EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
- t" E% E' E$ J4 Z0 Z) Y
很快速的整理我自己常用的指令
& Y/ r/ M! j6 q8 F, [/ a( u2 \0 \6 w
8 p$ m% Y, e/ `. h, d* Y& x$ S8 h- A" \{:4_112:}
( F, }0 u) u$ F. }- ^. L6 s6 T: L) E. V$ P1 O: g  q
MAME DEBUG常用指令$ F; ?" M$ [( v8 D% P

' v% z0 y5 q' u' K' J内存搜寻: ci, cn, cl
2 g7 K5 e6 H. y
: B  R! p/ w# `( D    ci
3 x/ r( ]" x' b2 |5 e& {* X( T    搜寻任务初始化, 每次搜寻一开始一定要输入这指令% u4 J5 b  G# Z- r" Y  _

( q  l" ]( W! P/ g    cn, ^* {. X: W, w0 T" b6 k! c6 C
    搜寻指令8 V8 O$ C  O7 P/ z( W
    例子:
$ L# r6 Z, V: o% f    cn eq,60
# t7 U6 a& X/ j3 P    搜寻目标等于60 (十六进制)) t  Y' E* k# \& ~* Q
        
" x; r; l* l6 y1 s: s* A4 a0 e3 b- Y0 x    cn eq,#96
4 {  m# G8 O( K  _0 y# m' W    搜寻目标等于96 (十进制). A( A$ ]* k, F8 ~8 f, s- j2 n- l

# }+ }7 z; N; \, T6 R    cn eq0 R6 R4 T- {! c
    搜寻目标的数值没有变化# d+ J% u3 L" i5 C! a. \% V
9 w1 t3 s! r) m/ P8 j
    cn ne" f- ~, F6 D* K; r3 a
    搜寻目标的数值有变化/ J  C+ X1 F! D, G4 t+ A0 k, a
        * R# y5 N; v: W
    cn +
" z* D8 I! Q% f. ]" _) x; E    搜寻目标的数值增加
* W  s/ ?3 O0 C% K    3 u! [! G1 r8 G+ B1 E* _3 p& S' Z7 J
    cn -
! ]. E5 a# _0 j3 O  N5 h& z: [6 @    搜寻目标的数值减少
/ D' m2 {. f( M        + f5 n4 X; B( e2 ]1 S* |" l* O  t
    cn +,3+ k* Y. a: y+ f' j9 I
    搜寻目标的数值增加3 (十六进制)
% R! ~0 n% t& M/ ?
* J4 e( p. ?& k: R& s, V( w8 o7 ^    cl* C' s: ?8 K" T+ `$ f% k% a
    列出所有搜寻结果
7 j4 H: j/ f3 R3 ?" K" N. N; c/ Q/ D# ]# k
    cl xxx.txt2 M; k; G% S0 t
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" h6 D: b; j4 h% x

* ^; V0 P2 N6 v' l5 @0 i/ Q4 P- u      o$ d( H' J- ~& K# }! O  i# e6 Z8 n" ?
内存监视点指令: wp, wplist, wpclear
  p4 D! d) C. @1 x. Y    例子:
( H& Q) }1 T5 [' T* V    wp 1234,1,r
/ l3 M" G- h* [% y6 O( j      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) D' u5 L1 u8 l7 d# b9 \% S8 F/ S, }
9 u; o3 n  w) p8 {; K+ d8 M
    wp 1234,2,w
$ J9 j$ z' d; @$ [      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 w1 i) L; {- L" g     
2 S' ~1 u5 ^/ G! O4 k$ E' \    wp 1234,6,rw
8 T2 v" M% e% \* k7 v      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& ?! Y# w! l, W0 E6 i
  A2 {6 Z$ J) `! z! I( v. K$ u
    wp 23456,a,w,wpdata == 16 [: V2 D& b2 ?) E8 X* ^" i' z
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% `' n5 x+ p6 j$ W7 {- O7 [

+ M6 s3 E, c/ D$ [    wplist- Z! P: Y: X9 @1 }- i
      列出所有监视点
& o) A1 k, v8 u8 g  k, [; ^$ k+ ]7 w6 F( d: F9 c- x
    wpclear 3
! ]' Z; m1 Y, ^& ]9 I: Q. @. q      删除编号3的监视点
9 ~/ V  t* o% i' f' n/ z
; o! O0 l  F. `, ]% w- t    wpclear
* V) S. b& v) D% I1 y. i+ W      删除所有监视点' T' A$ J8 X2 E2 @. @% ?
& E/ [2 b% a- Q
      
$ p; L% U. u9 Y* N4 }7 N! o. B3 [; J6 E
程序断点指令: bp, bplist, bpclear4 V& s+ x9 R; ~4 G
    例子:
9 X3 C+ ~6 V" ?    bp 1234* p0 _, @( F- f+ a9 e; p. b
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
" Y0 ], t/ r5 R. E% m0 b2 u9 g
, Z7 i; r- [* V- S9 b    bp 23456,a0 == 0 && a1 == 06 h$ d. j; K0 z- ^/ o3 f
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
& x  x3 v1 U5 b5 X; @' O; g
3 z5 _. L- D4 n. F$ o    bplist
  }* ?6 ?8 K4 o/ p1 E! h      列出所有断点& h8 i2 s5 M) u9 }' a8 Z- F
( O9 \4 q. y" }8 {- R/ g& ]( v
    bpclear 3
& A1 E: ^. v* N6 d6 s% ?      删除编号3的断点; p0 _" n. ?" M; x" B6 m+ n

2 q9 q5 h' A9 ]& @    bpclear* Q4 G; z# X; [( p* Y5 D8 E
      删除所有断点4 @* `9 c# ?3 S! y7 Q
. f. y* c! e. v5 H! \" v
      
# B9 p, p9 v0 u" l      
  E: F1 }6 Q8 }3 T: W- ?0 |: p/ e跟蹤紀錄指令: trace
$ h! \/ {5 _; R' j! b    例子:
1 P9 Y9 A8 y1 d. n" R5 Y    trace 01.txt; k$ }' A, H# m2 e. P. x* |1 \
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 |: Y/ f$ m! Q0 B; K4 i8 l2 Y4 i5 j: p$ O9 D
    trace off
  J3 O1 H, Y, z- B    停止跟踪, 并且关闭文件3 v$ k* a8 ?- W" g( p# _+ p
9 I- K( C! o  R7 w' D( L6 _
    trace 01.txt,0
% H+ G5 O7 E8 R" T" H  m, U    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) ^) C4 W2 G3 s) U- \. @* [7 ~6 }/ y- @/ Z4 ^& c* H5 ]/ Z8 i6 z
    trace off,0
8 G$ Z1 ~) v5 Z* q- w' c3 Y    停止跟踪编号为0的CPU, 并且关闭文件
0 _! z( z0 `* {% m
! [" M7 T2 e& o. U    trace 01.txt,0,{tracelog "A=%02X ",a}
2 E5 W2 ~7 f. s1 m    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 s6 V9 F* J& i* {1 u5 A
    并且在每一行的前面, 写上"A=a ", U! }  o' p" ?; _# w
    "A=%02X ",a为一个C语言printf函数常用的输出格式5 H% H- B; G% k0 k
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 p( B1 S* i$ I* v% j7 f
    X表示为大写十六进制数
8 k9 y# P: n. [3 z
& d- h) Z8 R2 X, p  W; Q: ~0 w% L& t) ^2 o. [
( v* g' k$ {' D: P& r
内存直接写入指令: maincpu  h6 V1 S  `; C3 p
    格式为 maincpu.[][]@地址=数据
$ a! I' D- L0 N    第一个[]:
9 C" @3 |" t( g6 ~    o 表示ROM地址
& P$ t: P5 w5 s    p 表示RAM地址
2 Y! [0 i* b, v* M4 J9 H
& X0 T5 J- \% E9 q8 ?: l    第二个[]:
/ y/ c- t/ v9 l    d 表示4字节
1 P  K9 g/ S  M' D! i% g    w 表示2字节0 [: g2 ?) S$ g! b$ X, l
    b 表示1字节( F' l8 W8 x4 L6 [+ r8 O) `

( v: A, t6 ?+ R/ Y# q5 [! ~3 Y    例子:9 \  w5 {) ?- \: p2 b
    maincpu.ob@1234=FF9 W6 s, L) p8 f0 Q$ W7 K
    在ROM地址1234处, 写入FF一个字节
! b8 n$ i! b, ~2 z! J# |/ D  J. ~+ t( {4 e6 r
    maincpu.ow@1234=4E716 M/ N+ O: F7 a) x/ y: o
    在ROM地址1234处, 写入4E 71两个字节
7 F; b' X- G0 q$ M( f
- ]# C4 X: f- I( V- S5 O    maincpu.od@1234=600A4E71
3 _$ Z% u' X) p- s% i5 t    在ROM地址1234处, 写入60 0A 4E 71四个字节
4 w* ^2 W( W7 @" F+ `& n' D) H* i" M1 n3 R" K, B: z8 l
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* R# R  M$ B) m( W" G
   
$ E3 x$ m7 j9 c$ k* l& ^! d; C
0 s( r  p$ [+ t, d其他:
' P( k1 r; M1 w" _: N    dasm 输出档案名,地址,长度5 @+ I3 [/ W8 Z# B
    输出程序的反汇编代码
! J, h& W0 l& m1 z    例子:3 Z' v/ y* R; E. K
    dasm 01.txt,0,100000
- D( ^9 Y/ z8 y' x* O8 Q9 A    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
* g+ M" n( X/ Y& g7 l: ^+ `$ m3 A' e
5 b; k8 ?+ z5 F# B+ Q% N7 \, y    softreset' d  D' z$ c. G  f$ A
    游戏重启, 但不重新载入ROM
/ D5 g: _% d9 Y8 m" q
1 `5 ?& P, N. u$ N% _0 ?    hardreset9 @2 g, ~* c1 s
    游戏重启, 且重新载入ROM
2 \4 Y! {% s' M3 N, w1 V6 ^4 }( _; q. m
    snap xxx.png3 [2 U6 f/ y+ j, {) f
    截图为xxx.png" v* q9 P$ X; o" V$ K& Y  V$ ~

- V% n7 R' r3 r5 W: Z: j  
* t; H- G. u( N% |( W4 @  
8 X" ]3 J% b: n# Q" F- ~" i  , c) }# P: Z+ b
热键:- b8 G  Q/ J2 X; x& [' l0 \  o3 R
    ~ 中断游戏9 Z# O8 K, D9 X
    F5 运行游戏- ]2 m; ~7 R6 A3 |0 y& B
    F12 运行游戏且隐藏调试窗口. p. e1 d$ t; h' n
    F11 步入, 单步执行, 会进入子程序
. _1 J, i  X6 [) f7 a( Z    F10 步过, 单步执行, 不会进入子程序
0 p' Y0 I  v' z3 N8 h. O! S    Shift+F11 执行到子程序返回
6 f! D+ \# L6 y, }) a  W    Ctrl+M 内存浏览窗口  j4 r  {5 L) I. p' S# T5 [: d
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' K4 N$ H- k) s' e8 A5 d! j1 A) w. A* u* t: h& {' A
{:4_94:} 8 Y) i/ b- X- t" k6 P1 y- ^7 d

$ H. {1 X6 g( m, [" ^! H, F8 |- w

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
9 S5 R$ s( v. R7 n7 g1 Q/ z- h' e5 ?
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 | 显示全部楼层
要详细些的东东
* y. Q7 b, x, L; A11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-25 06:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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