EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* R% Z  w/ A2 O* a3 c% ?7 }3 w" w很快速的整理我自己常用的指令
+ D1 H$ h0 {9 y) i% i. Q
) D/ A; `5 {( x1 R{:4_112:}
% q- X0 z; y8 a3 G- `+ z! o+ R; l+ Q& ^( {7 G
MAME DEBUG常用指令0 Y1 @6 b7 d) l; g, F8 [
) K' X' a7 h9 [3 }# E
内存搜寻: ci, cn, cl/ R9 D9 G  N' M4 `

" c7 k6 N6 W$ n+ e' M6 l! S    ci
% N9 Z6 v6 O* b) S+ b    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, Y% Q- Q# q8 t; Q6 Y# [& \6 K6 V% o6 n2 v# F1 n+ |3 J+ ^
    cn) Z# d' V2 k9 g" y+ `
    搜寻指令
: G0 `  C! ?( K) C; F/ f    例子:, {0 p: o& j; q
    cn eq,60* t& x+ @5 v: N  T
    搜寻目标等于60 (十六进制)! i# H2 I  ]5 I+ K9 M# W. }! O% ?
        
, h, D" q. G; Z, J. _) e8 ?    cn eq,#96  D( b5 D& ?" h% J/ T+ j! m" C
    搜寻目标等于96 (十进制)0 }5 \  v5 w7 }/ {
7 l& I! |8 @/ o$ m2 Z" X0 @6 {
    cn eq
9 E$ O' J1 b- m- c! P! M    搜寻目标的数值没有变化
" a4 W5 y& A7 u0 E$ t
8 T; H, Y  P8 o3 B# w    cn ne
! y* D8 p. e% b0 R    搜寻目标的数值有变化
4 t2 }$ @* E* Y% H+ q0 G( w        : B# j7 `! \3 B* N
    cn +9 B5 @7 T6 k1 A0 l) L* m9 J+ @
    搜寻目标的数值增加2 w1 q0 w) j. w5 ^- \$ A
   
) _0 l+ ]' B' ^/ d    cn -
! G+ x/ ?6 ~* c    搜寻目标的数值减少0 g% L% k/ `3 T& m" d6 U
        
4 n3 m% g: ~. w$ A% d6 p; W) |6 s    cn +,36 U) d' u( g/ s7 A* D& U: B" e. M
    搜寻目标的数值增加3 (十六进制)4 x$ b8 n$ z5 }
; N- P) N7 }( @9 {1 j
    cl( q. {, l' |' I1 z6 K$ N
    列出所有搜寻结果
1 {* U* h( ^) Q- ^% M5 H; z6 _- u4 z- D- i; U: G6 F& ^
    cl xxx.txt
) m- ^2 q- |4 g* q' q4 F    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 {2 T' H- Z5 q! |& }. z" |  y; J
9 y# s! f4 M4 X* y
   
" |2 m- D( O% ]& Q0 j内存监视点指令: wp, wplist, wpclear
- O7 y1 a* E. l0 ]0 E9 z3 T    例子:* {" G+ h, C- P* Z6 b  G6 |8 Y
    wp 1234,1,r" J; J' ?+ e# p! ^  {) \0 U
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 S; Z4 ]; X4 R- M8 k
0 C2 C6 Q( C5 ]5 W' m/ T  C8 U    wp 1234,2,w
1 q8 O1 \% e  r, A      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" A7 v; A+ E6 A: B8 y& g7 s
     
4 Q4 \: c/ f5 q: A/ E8 a8 F    wp 1234,6,rw6 U) d7 a2 Y$ N! i" g2 d6 r7 r
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% O! P$ S( q. S0 M8 J  {  q5 a$ \

% P% v. x6 Y! u/ X    wp 23456,a,w,wpdata == 1  C. w/ _5 L5 @. N- m2 |" Y6 J
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" F/ y4 ?) {5 W2 b1 c# s5 r* v  K  U5 l4 ], T* r
    wplist) e/ R; C. X/ y) [# V5 x* R! X
      列出所有监视点( V( `& _9 d* k& ?$ I+ Q% N
/ i$ A8 G0 l  B
    wpclear 3
  c9 \* r2 [. G4 m5 z      删除编号3的监视点; ]5 |3 C/ `9 E  j5 o( `

0 J! B! d! e7 A    wpclear
: q! X/ J  _  d- H8 [6 t6 `      删除所有监视点
, j2 @, i: @& c! e  i. {2 v8 o9 M* O. A1 e
      
; n' a- ^3 p7 p' O- W7 h! X
8 n: w9 ?3 ?  Q9 Q" N- u程序断点指令: bp, bplist, bpclear; K' k4 y6 m, L9 [* Y! ^. X0 [$ D
    例子:
. y# A& X9 U! w* W5 `    bp 1234
6 M  o4 c0 m! h* @6 q. V* W      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断8 T3 w  {2 \3 a" N% t$ J+ H. O+ a

4 @/ k* [' p8 p% d5 M, `% l8 h4 I. }    bp 23456,a0 == 0 && a1 == 0
* n& m+ t. F+ b% ^4 s6 c      在地址23456下断, 且中断条件为a0等于0以及a1等于0
  n7 q" x: R% a  E0 x4 C
- R; j/ J  [/ X0 n2 G1 r2 o8 x& _    bplist  q, x+ Z9 k5 F3 U; _0 \
      列出所有断点
! h; R4 ]2 M# k2 L2 t
6 f$ j0 j$ {& O- T; s6 W) D    bpclear 3" C8 b/ `  {8 d# @! `! x' A
      删除编号3的断点
) i" l& q1 M. m6 j4 F' w: Z6 f; Y& C' @- q+ ]. C# e
    bpclear! \; Y  e5 H. v/ M( y
      删除所有断点4 q0 t& w- t7 c/ Z
- v1 D+ `( U+ ?" G! t
      
6 L& Y, Q" K/ v6 H      
% ]5 c% }) m4 q0 a跟蹤紀錄指令: trace
. Z9 _% J4 K/ Y1 N3 H) U( r+ w9 A: K    例子:
- w3 a2 D+ x/ j' b0 G( M1 y& x    trace 01.txt
& r; M. n6 j8 g: Q+ {: B! O    跟踪当前CPU运行的所有代码, 输出至文件01.txt  D; @  y2 \: L) c9 h7 |( _

/ w( H4 x. l4 t& Q& k. ?    trace off* G8 W; Z3 ~  K' ?2 ?; N
    停止跟踪, 并且关闭文件8 M5 N% Y' v% F$ }5 S4 @, S; b# w

: f5 \; j  J1 ~2 D7 \8 R    trace 01.txt,0! U1 g# h; {+ O8 g" L' D
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) v" l, _' o9 V/ ]# d$ M8 ~/ v6 s/ J
    trace off,07 v2 m/ E4 s3 a
    停止跟踪编号为0的CPU, 并且关闭文件! {2 B7 P& Y$ I, V+ y- u: C' m: v

, A5 H, \( n# w) _( @9 ]    trace 01.txt,0,{tracelog "A=%02X ",a}
+ h1 }! K3 [+ b; x4 t6 S  s- b    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* m6 s2 X' g' y) w    并且在每一行的前面, 写上"A=a "/ v5 M* a6 s/ v* s  K" Q
    "A=%02X ",a为一个C语言printf函数常用的输出格式
, i/ q3 z  a: F- H0 e    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 Z. g9 e& K' V6 C" d    X表示为大写十六进制数
. L8 a1 T" f' V! x8 d* |1 H7 K* g3 V2 z: B

# q1 s8 k& C- h3 c7 @: F6 @1 z/ {5 q7 T& H5 w7 R
内存直接写入指令: maincpu6 A) i1 Z7 j; [  y& _
    格式为 maincpu.[][]@地址=数据) Z' V+ j* W" }
    第一个[]:
6 X& Z- Q4 M% j% ^    o 表示ROM地址
; _; M! `/ A' K) h    p 表示RAM地址1 h% S9 f0 `# q$ l3 c# J/ E( g
6 w$ m4 m- |; ]' ]
    第二个[]:
4 V8 _% w- R9 s  M    d 表示4字节8 |0 b, p. [$ m) b4 w
    w 表示2字节+ a4 }6 O8 y/ j4 s
    b 表示1字节5 c6 E1 f2 [5 P, b8 Y9 r
3 I0 r$ f: h' d+ W( E1 x
    例子:' j. X7 M. F( d2 v2 s: p, A+ m% t
    maincpu.ob@1234=FF) M, J7 b. _: Y# d1 P) P
    在ROM地址1234处, 写入FF一个字节' u) o/ A: t3 r" ?& [/ W
9 {2 B! T) j4 r; d
    maincpu.ow@1234=4E716 ~- Q; }6 @/ a! E
    在ROM地址1234处, 写入4E 71两个字节
5 z" s) v! f: s* }; _; A* p( B7 A7 j; J8 u+ S- ~' c' M- G
    maincpu.od@1234=600A4E71
4 L. s- _# d- ?. i0 |# L    在ROM地址1234处, 写入60 0A 4E 71四个字节0 A" f7 q) [0 j* S3 R
, n9 I. m7 g* r1 T/ l
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ W9 P( c1 R% }' v9 `( [    4 K; P! w' t! V9 k% W* u& V

6 ^! h; V; F3 S5 K  Z其他:
/ e$ d% L$ \) _* ^- u    dasm 输出档案名,地址,长度
- w5 O: Q4 j8 N) e    输出程序的反汇编代码
+ U" U8 C5 Z9 i1 |5 X    例子:0 I( e6 t! T" L& P$ y
    dasm 01.txt,0,100000: {: `4 c3 R4 Z$ [
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 h+ A& E$ E6 R* N7 ]
7 w7 Q5 ^+ L" Z: h8 b% e4 v0 P    softreset
2 N- h7 M5 Y8 B- l. n2 S    游戏重启, 但不重新载入ROM+ ?  \# P" [9 N' N0 U

( J) b' }' N# k) ^* c    hardreset4 m3 \) _' j5 \% @  ~1 N
    游戏重启, 且重新载入ROM7 b, j8 k0 v1 p; y6 v/ e3 m) Y  x

% e: ?0 b/ T+ ^& V2 V, C: b    snap xxx.png$ K0 M# m! N* O; }" V
    截图为xxx.png. N  g* r2 V( a  N1 s# ?
+ D, l6 S+ T+ o* m! J7 V
  2 T6 K# p8 ]& {
  
2 ^* M. Z, G( K0 k$ E  
8 s8 Z9 k. M$ h7 x4 f. q: ]热键:
" d. k3 R" O, z3 a    ~ 中断游戏1 x5 k) O0 ?, G  k: W
    F5 运行游戏$ p0 n1 r0 h7 r3 c+ g' p; b) O, I
    F12 运行游戏且隐藏调试窗口# Z1 D" }2 W, }$ _8 A
    F11 步入, 单步执行, 会进入子程序
) |' ?' Q( {. p9 L. j- V# b% K" G    F10 步过, 单步执行, 不会进入子程序& q, J$ y& J; G6 E6 d% v
    Shift+F11 执行到子程序返回
- g  T( C, X- ^% S    Ctrl+M 内存浏览窗口
, v, ^) u  d4 R    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) a, t  G: H5 q. }! n1 \7 W8 A) W# o; u! p
{:4_94:} 7 z1 i/ c5 U2 O( u# V+ z
$ t7 s1 e( D# ?: \. h. r

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。3 _9 B, Y2 _# {, }
% n  _; |) |1 L* D0 I! f
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 | 显示全部楼层
要详细些的东东
7 V; l1 W9 R, [7 j( v) n& C11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-16 19:18 , Processed in 0.078125 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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