设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; y0 v( I+ I" }' A
很快速的整理我自己常用的指令, f% u  w. G2 b' Q. T) g

6 z1 ^, U3 T" @- v- M{:4_112:} % Y, b) \0 ?; ?  v, M: b: A1 [

3 M0 m! g5 O1 F3 P/ {# ~, v4 GMAME DEBUG常用指令) d0 o8 v9 I' b' P" J" S
! h4 D+ ]7 {7 v( D2 H$ n
内存搜寻: ci, cn, cl
6 }8 R; V. B, S; G" ]) O) U4 d1 f3 F/ h
    ci* H* ?7 P  f% C3 O! w2 g1 j
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令4 w) Y& m- d8 W+ Z* \: `" h
4 |: k0 B: a0 F4 A+ c
    cn
/ S8 F$ S; r& Y8 C' x$ {  ~    搜寻指令2 b) _/ }1 x* p; M
    例子:
& B* W* Z. ?! Q# H4 }" y    cn eq,60, Y2 u4 _3 t5 j- D- h: h; R3 t3 E; X
    搜寻目标等于60 (十六进制)
+ l; }4 @+ p7 }# }! B( r! a        . F) O0 a8 `; A" x" z
    cn eq,#96
* _" S% }5 k& q( A0 R3 {3 ]    搜寻目标等于96 (十进制)
3 [1 B( l7 ]8 Y( {9 T  J
- i4 U$ l% I) ^' E3 B( S    cn eq, J( n. r. `8 y* n0 Y$ y- g
    搜寻目标的数值没有变化
! @) H# J+ R; j4 G$ G) G* @  ~$ ]2 |1 s
    cn ne9 {, C0 y0 n( L; g$ q9 K3 `
    搜寻目标的数值有变化$ S& X+ |7 G6 `7 V+ _
        7 p. v3 {: N# r! D5 C4 i7 S
    cn +% Y5 o% m$ ~3 t8 i
    搜寻目标的数值增加
# m( m8 n% K( r0 E: P   
8 G+ d% W; K- ]: S3 ~0 |5 o    cn -
" Y( h/ A  a& f7 U* d1 p! P    搜寻目标的数值减少
4 _: Y5 H8 w. h& U        4 R3 E0 P: [5 X$ O- j' A
    cn +,3
* Q+ Y# T) n5 ]+ l5 [+ w    搜寻目标的数值增加3 (十六进制): q1 {6 q- a) d9 v  I1 |

) p4 D9 k! }/ p5 z    cl* y$ k& S2 n0 H* K/ L
    列出所有搜寻结果5 T. d% [( \9 |& u. H  |0 U' d  @) r6 f

# D+ E( B" b( h- N    cl xxx.txt
9 T$ b! c& @8 Q    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式' w& }! S0 a+ |+ a6 p

9 m1 s: H9 l) X5 ]  x( E! f    ' G3 y" g& z! O7 b
内存监视点指令: wp, wplist, wpclear
1 q( G" c0 k8 I2 M. }2 S    例子:
4 |' F2 C4 A6 v+ m9 U1 E! W$ D    wp 1234,1,r
! B: P$ D( C; {      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( e. v/ S5 D" ~& Q
9 u- j8 n$ G1 `- u6 S
    wp 1234,2,w; j+ F! X6 q4 e. t1 M9 _
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
- j- x8 J% Z+ d& D2 t     ! d  I. w$ N5 O; o
    wp 1234,6,rw6 }3 f3 r+ w9 n; E
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" a0 x. @) n3 d6 _) }% i% m
/ i3 {7 Q( `. B, ]3 I; A    wp 23456,a,w,wpdata == 1
5 h+ m9 j2 b- N7 B$ Z* g5 F      在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 G4 Y/ t4 n3 B. w& C% ?, @, H' K

0 F1 q, n. D" U% f    wplist2 p, P1 g' n. {! ?7 _. S) ^
      列出所有监视点) I' ~) G) Q9 `7 ?
- ?) v+ X$ `) b( E0 i
    wpclear 34 a& M8 G8 E; z2 s
      删除编号3的监视点
. I4 O* f( ~' p% @* }0 I& v
, A8 h! {6 x4 M4 P' ?+ u. U    wpclear2 s4 b5 k, w/ h1 _* Y/ u' Y, F
      删除所有监视点4 q4 U: ~+ r8 t
7 I0 o  p  k) H# }
      
- X8 s9 y7 D5 U' @  s3 o
) `# x# N, C- U5 a程序断点指令: bp, bplist, bpclear
+ K1 J7 H2 i# g* A5 r& ?7 `    例子:
! e) K  N+ E/ F5 l    bp 1234
$ n: v5 p, `- ^      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断; ~5 j, W$ y. }0 D
# b: B# A5 m7 w/ k, O( q* j
    bp 23456,a0 == 0 && a1 == 0' w& }3 u$ S' k; s
      在地址23456下断, 且中断条件为a0等于0以及a1等于0! O3 E7 n' @/ a8 |

* m% k: K0 ~0 O    bplist
: j4 r4 ~5 t  r      列出所有断点
2 M: P1 U" p4 y: E" }3 j& D' Y  Y0 m
    bpclear 3# o' \  [% w+ \9 Y3 k8 J$ R5 {
      删除编号3的断点, c, [: u) e$ T' p
, a9 k6 C$ K2 L
    bpclear' n* G7 I1 Y6 Q4 E/ Q* J
      删除所有断点
  O- o, T0 ?: b' t& W- {5 _( i6 R% y4 Z5 m0 }
        v6 \$ G6 ?: h. f6 h& X! ?% k
      ) x: ~. z& r+ x
跟蹤紀錄指令: trace
$ J7 K: g6 m6 p1 F4 ?: q    例子:. E- |8 K2 B: y+ @- G
    trace 01.txt  t8 Y4 n% o, o: W
    跟踪当前CPU运行的所有代码, 输出至文件01.txt1 B" s9 D6 Z0 C' t* P9 O

8 \) L$ e2 b% J$ b    trace off
! j3 {) m" ^4 d2 y2 K: ?6 m    停止跟踪, 并且关闭文件
7 K& y$ R) v3 d) l1 k$ q, y" \  m$ X
    trace 01.txt,0) b9 Q+ O. O$ Y4 N- D# i
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 b5 k. u; J1 ?* e! M" m8 m5 `7 ]9 n/ G
    trace off,00 b# I/ i) d  A- `
    停止跟踪编号为0的CPU, 并且关闭文件
, m6 k7 R5 L1 r2 a# F9 _- D$ \* |
8 G$ z+ I0 D4 A3 Q* ]! s- ]9 Y+ b! B    trace 01.txt,0,{tracelog "A=%02X ",a}8 u1 M. B( v# v% L
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt " C/ V* ^' b, h7 F+ V# |- T
    并且在每一行的前面, 写上"A=a "7 |; [) h! ^+ f& Y- n
    "A=%02X ",a为一个C语言printf函数常用的输出格式; j2 }* V( q+ D3 p
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
- h- B' l& k) B7 U( d$ _    X表示为大写十六进制数
- B6 z: X! ]6 Z, @3 r
9 i$ @; p( l4 g4 b- S3 |+ t, J( x2 f$ F3 V& [/ v7 x

: A5 `! o% C0 x- _4 A$ |  n! V内存直接写入指令: maincpu' `' f$ g) l8 d8 o+ Y2 W7 F
    格式为 maincpu.[][]@地址=数据& Q5 c* A+ K! |: @& C; Y$ b
    第一个[]:5 j& p9 A4 X2 r) f
    o 表示ROM地址
. i, ~. @  ^& a% i; ]    p 表示RAM地址8 A& r$ H( |' Q; f: N8 |0 H  k: \
; o$ f6 c5 p* }
    第二个[]:0 z! I* k5 z& K! I
    d 表示4字节8 G  X3 q9 |* l. \3 y9 {
    w 表示2字节$ N* [( q; Z5 a
    b 表示1字节: v+ E0 P8 I/ q3 z. e7 S& q
+ Q2 R7 f$ ^6 F% t1 C3 w( B
    例子:+ K1 s+ |3 \$ I" h" @8 j3 ]' [
    maincpu.ob@1234=FF) m8 q9 H, J4 v# C" B, `7 d
    在ROM地址1234处, 写入FF一个字节
# y9 j: ?' D! O5 K6 N1 \" d1 h8 f! i3 Q
    maincpu.ow@1234=4E71
. o2 o% w& j" l" {9 l9 E    在ROM地址1234处, 写入4E 71两个字节8 |  v. O9 |6 ]8 ?/ F
/ \$ c; E0 E; _$ @1 N8 o8 H
    maincpu.od@1234=600A4E71
# J6 x+ f- w/ f2 l4 v. J) n/ }    在ROM地址1234处, 写入60 0A 4E 71四个字节
, V6 E1 c" S3 y9 \9 K# y& I- ]2 U( X2 r( {( `/ o' F
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写$ s2 @  b. c' U
   
' q, N3 ]( O+ q: j. q9 e7 L; Y5 V" z+ \- M
其他:: J5 b8 j' v2 a7 N" P
    dasm 输出档案名,地址,长度
1 m. q- R1 Z$ v& z. L    输出程序的反汇编代码( E* P7 \. w) E% e+ d4 x
    例子:
' ]; s5 H, ~  ^8 K    dasm 01.txt,0,1000000 q: o# G3 R$ L9 j% s
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! V* q6 J6 R( U5 ^; j1 i3 G
7 j# u; g8 s! |0 q8 M    softreset
' G: Z4 F' r- ^    游戏重启, 但不重新载入ROM
. Z  x, n- [" i: d6 u( h! U  o* c# W/ E( _5 {2 q1 l
    hardreset
5 f" K1 |9 O! E8 M6 {    游戏重启, 且重新载入ROM' s. l* U( ]0 I% C0 g

3 ?/ x3 v6 ]3 K% J# p6 A    snap xxx.png
0 B# k# v$ k) b2 E9 t& ^    截图为xxx.png$ U; X) O& R2 `  I" J! y0 f* w

, }. G& ]' W3 B# Y- O! k  
3 b$ F3 G4 F5 N% ?  d/ P0 w' y  
3 t& F1 O) E* q  0 Q% i% H+ h: t* l( y
热键:, D! }. B/ }  w# r- J
    ~ 中断游戏' S9 X( f( \$ V9 J9 S! b8 P* M0 ^
    F5 运行游戏
+ q* C- O4 T8 U" Y: t    F12 运行游戏且隐藏调试窗口
6 r  c; }$ }9 G2 y! o8 V( r    F11 步入, 单步执行, 会进入子程序& M( ]7 z7 d( N* K
    F10 步过, 单步执行, 不会进入子程序9 t1 S* D; X6 t4 u
    Shift+F11 执行到子程序返回
) T* K4 W( d+ L- S    Ctrl+M 内存浏览窗口
" ?1 G) g) b$ u. ^* |    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 Y+ u; D" q9 Z: C  R
, z/ J" D1 |0 l* F% w{:4_94:}
! F1 I) [0 S- B& }- u* l$ |' q$ d4 |0 X+ k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2567 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
3 p8 U/ f6 h% T8 k; U* g" O  B
/ _" Q7 ]& U1 u; m- oPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东5 g" [- j% u6 M0 s$ `/ y4 O
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-11 08:07

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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