EMU618社区

 找回密码
 立即注册
搜索
查看: 1030|回复: 7

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式

1 M6 B; v9 y3 Z很快速的整理我自己常用的指令# s6 P7 W. s8 }$ W( }) B$ t& n
2 P. G8 f6 ?8 m8 K. ?5 c
{:4_112:} - F8 U: q, h5 P' {

- L/ J0 l. |' L0 xMAME DEBUG常用指令
5 l8 E, W$ q& j, R' z, p# Z; x9 x& S7 ^8 h
内存搜寻: ci, cn, cl
9 U# w/ b' E8 B- z7 i) M# b% t; D% b* k7 p
    ci
; ?( C8 m  C* ~+ _2 K. n3 X    搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 Q9 z" e6 y. |! a2 @
) a0 c: j- A8 F  K) V. j* @' r
    cn8 @8 O+ z) Y2 ^. ?$ [
    搜寻指令
0 J/ m) m* \" m! D    例子:1 x5 ?( P9 B: T6 h1 A
    cn eq,60' H7 v  r: e3 c" k6 n
    搜寻目标等于60 (十六进制). Z0 E% m  w  w4 k
          N; ?3 ^1 l# |5 m
    cn eq,#96. y8 F0 r& d! g' Y8 K0 x
    搜寻目标等于96 (十进制)
, A% w. z+ v' o! O4 w8 k& K* f) ?4 d5 ^  d" X% o% v
    cn eq7 t7 w4 g! r& S# U
    搜寻目标的数值没有变化
7 A* ]$ c: o4 L+ @3 O- ]5 U
% K& }  b; ^. U- h. S0 H    cn ne
" l0 D1 H: h* a7 ]5 A0 [1 N% ~    搜寻目标的数值有变化; {# N9 y7 v% z3 H2 g/ h. p
        
$ L# d( ~6 H) z: z$ H    cn +
: @* c0 L. v! \1 h2 s5 q. Q    搜寻目标的数值增加9 b1 [9 O1 m2 u1 Y
    " L  H. ^; k% Y
    cn -3 {9 H' |4 f8 T$ ]$ T% g
    搜寻目标的数值减少, c3 v+ g) t1 \4 m
        $ N  P0 \% Z3 e0 M
    cn +,3! A6 I( E: v/ [! ~
    搜寻目标的数值增加3 (十六进制)
: p/ U( e+ Z0 H  Z9 X' W. R2 G! ?2 {& W, G( V
    cl; U9 B; k3 H* _. R# h+ t& J
    列出所有搜寻结果
+ o7 `# a* T* G  c8 f7 K( U
  Y: U' d, W8 A& c! `    cl xxx.txt' d, g8 _+ b; D# p2 X4 I+ i
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式$ Z5 e3 A/ U" l' Z& B/ f5 w

, b8 K( }( b" N: h    % }, j) c8 w# R) x  _0 m$ Y8 I
内存监视点指令: wp, wplist, wpclear$ N. A6 e; q$ Q; M- U
    例子:- }' L6 j% H/ O" t2 x% F
    wp 1234,1,r
. ^* N: j" A. J' q/ K6 b6 r      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# R* D3 w+ t* J" z$ p
, Z: x" G9 {  G$ V1 t: [" ?    wp 1234,2,w' i- C! Z# Z9 t0 G0 B
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
" y4 p9 [; c& P2 h4 t6 W- o0 i- r8 k0 ]     
4 j. p5 w$ q- o  |5 P4 S/ q% M    wp 1234,6,rw
  U+ N2 h" i% t! k3 _; l6 \+ Q( \      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
' A# T4 Y  C5 e2 w; Y* U
3 r/ R& C2 f6 m! u& O1 {8 \. n    wp 23456,a,w,wpdata == 14 O0 z  `) ?  o' y/ ]
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ S  x$ `6 c. I7 p7 u3 T. u9 A. j
$ s! b' p# \( I7 n9 t- Q1 `
    wplist4 k* i0 `4 E0 H, o6 s
      列出所有监视点
& K9 B1 N7 M6 x7 h
# k/ z5 n: }2 u    wpclear 3) u/ B5 x# O, i, T
      删除编号3的监视点
' C4 |5 y' G7 ^
, X4 z7 Q, I2 f+ X- F% q1 y    wpclear
  X5 ^4 A% o* `% y      删除所有监视点
! f# R0 h" ~% i# P/ N: E
" w5 G5 P3 J' ]  ]0 f      
; P/ _; P: f$ f4 M5 w  W  j7 [- n: n, a
程序断点指令: bp, bplist, bpclear6 s# H' o$ o' e
    例子:
5 Y: ~; K2 @) i  Y; M( Q, t    bp 1234+ {- Q6 s% c9 a$ |
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. B0 e( B2 t, D/ w# J4 Z$ g/ t7 ]& E2 _; X1 U* L% k. W- a
    bp 23456,a0 == 0 && a1 == 01 q6 K4 J7 Q- s4 A
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 J9 M; R; J7 t& J+ m/ V
! c/ Q) ^  Y4 M    bplist
& k7 }+ }3 h7 c1 D4 Y. k' a      列出所有断点
' C& o  c  s/ p5 T# i0 }  O5 o* @; g  K$ `
    bpclear 3
) P' Q4 L+ |4 E! O      删除编号3的断点. Q. f. [0 O4 R- I2 T; e

- G, H0 h0 b2 `" w& Y' W2 a, p    bpclear! w/ |& |% [7 g
      删除所有断点
, `. u( g& V; G5 L$ M. n, `' u( A# }, `5 s7 `1 g# [7 _& q
      " P. A  a- m7 j7 U+ K5 e6 Y
        F  o0 b- z4 s- o' }# G6 G
跟蹤紀錄指令: trace
! A! \8 y$ l! g$ P    例子:+ B% g7 ~% y9 E7 q$ _% N
    trace 01.txt8 Z( H. Q: T9 H4 ~4 S7 x: |9 o
    跟踪当前CPU运行的所有代码, 输出至文件01.txt! a( O, f0 K9 q1 p
) w' j6 n4 K& R6 \' T& Z
    trace off/ d$ \' [, E. }) z
    停止跟踪, 并且关闭文件4 ~! h9 M6 A- ~5 A; \  ]3 m; O

( c( ?$ ~+ b3 N4 ]' w    trace 01.txt,06 A6 x: B# L0 i/ C  l+ p. H
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt8 D: y5 U8 w. ?! |, j

5 m' h* z9 Z' H5 M+ h) r    trace off,0) w& Q; y1 ~- S) C# S& K4 ]! _
    停止跟踪编号为0的CPU, 并且关闭文件2 a# U1 i- Y, r# |8 ]' ^
" ?* U' F5 z- a" n) `! D- j
    trace 01.txt,0,{tracelog "A=%02X ",a}$ L$ ~2 C) A8 _* \: n1 l! E
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & k9 W: N; ~" P/ @9 f% T1 s
    并且在每一行的前面, 写上"A=a "
! ~/ Z5 \/ c$ ?0 o& F    "A=%02X ",a为一个C语言printf函数常用的输出格式
3 g: k- ^3 \3 v* ~    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' G/ V. X4 l8 X) |    X表示为大写十六进制数
5 `/ G+ a8 K- N8 i% p: s
" u* _7 ^( M" F7 V) Y' J& l0 h. v. E* o, X! h8 p7 A3 \
9 `+ V# S1 a/ F. `7 O
内存直接写入指令: maincpu
: K7 w* F4 c' Y" |( f' y4 t    格式为 maincpu.[][]@地址=数据" V2 |- }4 o+ U
    第一个[]:
+ r# c* o# h* |, N2 [" F    o 表示ROM地址
; X4 r' @+ t9 w1 k( P    p 表示RAM地址
" t, J( u- h' u& P
% P1 M1 i% a/ n5 I. y    第二个[]:
0 j$ b  S0 c' K; ?! B. x) r- Y    d 表示4字节
( V1 b) K5 }9 P+ R( E    w 表示2字节
# T. S2 }  _7 y0 Q1 T/ ~    b 表示1字节
6 @4 v7 N8 O; ]. K! K  S. X# b+ k0 @: k5 R
    例子:
; ~# z" z. H- U+ `8 u    maincpu.ob@1234=FF
- x: z- C/ ]( l* F6 a& _    在ROM地址1234处, 写入FF一个字节
5 @5 T  ?; e) i& H2 @
% m+ ^/ k2 g# M1 Y9 C; h/ V    maincpu.ow@1234=4E715 Q% e3 J5 N: W- x' d6 |0 n* \
    在ROM地址1234处, 写入4E 71两个字节
2 J1 o' f( |  f
4 a: D6 ~/ o( S( h/ B1 |- \    maincpu.od@1234=600A4E71
( d3 w5 Z9 d- A/ R% F    在ROM地址1234处, 写入60 0A 4E 71四个字节$ r* w$ N& S  L, h8 c

8 ]1 W3 |' W3 m) p    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 {' U9 s$ k1 w
    / q* ^+ G# n& _* B5 N$ U+ Q) [# \4 t6 h% j
  D" k, U1 r2 T+ l  ?
其他:
7 X, N6 w; h0 N/ y& `    dasm 输出档案名,地址,长度
( \" t6 }& T3 M  p0 c4 `) T/ i& b( S    输出程序的反汇编代码0 P" t) Q( d: l; D" U, R
    例子:
/ J" h% V9 \' g    dasm 01.txt,0,100000
6 L& D4 U- g6 q% \    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" @' K& H7 l2 K1 |6 G( Q
; t% z3 `/ ?$ T& I, a" [7 H/ h    softreset4 l, q/ \5 S8 r( Y: k
    游戏重启, 但不重新载入ROM# w- y5 |' G0 k
" h6 F, l1 X% k1 Z8 ?; g2 b1 o
    hardreset
0 W" c1 i4 w) B    游戏重启, 且重新载入ROM8 i( t8 b/ X4 J2 q9 R5 N
" l$ v' N& p# y( u9 t/ U8 b
    snap xxx.png
1 N* S  Y8 }5 `, U; J5 T    截图为xxx.png
* K1 n* e* ^5 C2 P( x8 d. w) w( t" e. h( L( k- b% h
  / O; z, v  Z. P+ L( `
  & Z1 ^4 T5 c) U& q4 h
  3 @: Q! t( M7 q, {+ O8 |
热键:
7 @' G$ z6 V5 O5 K. R* ?4 M0 u    ~ 中断游戏
, l/ r6 x% n# e" Z3 \1 N) x& |# h3 J    F5 运行游戏7 F3 \4 u8 R. b0 x! |
    F12 运行游戏且隐藏调试窗口
6 q, p' H: T! g6 q    F11 步入, 单步执行, 会进入子程序$ {7 k  q) ?; v# H2 [7 T# Z/ m) m$ ?
    F10 步过, 单步执行, 不会进入子程序! D% ~* r8 }4 [3 Q& J# Y' l) t: \
    Shift+F11 执行到子程序返回
# l/ f6 x8 J. ~; {  ?0 X    Ctrl+M 内存浏览窗口
9 o. E2 E9 k& j; N    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU, f; j* \9 g, {7 A3 y

$ ]1 B1 x. p0 ~. g/ ?{:4_94:}
1 i) g' n! V5 p1 [8 r$ ]4 `3 E
: `  e7 w' @3 K8 v) u0 U

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-3-20 10:14:03 | 显示全部楼层
我又来顶帖子了
[发帖际遇]: 银河漫步踩坏了花花草草,被罚款15 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2544 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( @. M* p; X% {$ j  d  f
& F2 k4 a8 A+ z3 q4 j/ X
PS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 2013-3-20 16:27:53 | 显示全部楼层
看到二楼就忍不住顶顶

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-3-21 09:48:53 | 显示全部楼层
先顶一下!有时候研究一下
[发帖际遇]: sdiencelee 在论坛发帖时没有注意,被小偷偷去了 1 个 柠檬. 幸运榜 / 衰神榜

签到天数: 149 天

[LV.7]常住居民III

发表于 2013-3-22 23:02:26 | 显示全部楼层
要详细些的东东, v- }9 ~8 F6 G. P) r2 \
11111111111111

该用户从未签到

发表于 2013-6-14 19:10:18 | 显示全部楼层
感谢分享,谢谢。{:4_118:}

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2025-2-19 06:21 , Processed in 1.081055 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表