EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

7 f' I* E3 ~' ]很快速的整理我自己常用的指令% X- B% k* g& }* f( `' ]9 S) M
8 \+ S0 g9 n% p9 D6 V
{:4_112:}
& ^" E) h- V, e" k* ^3 y
4 Z& z  T% B3 Z. f0 zMAME DEBUG常用指令' P4 K$ l; g8 G& q

. L, O1 f! W! y* l6 I9 u- {- ~内存搜寻: ci, cn, cl! _7 d$ E. F6 R

: b& T; x" l( g/ D0 D    ci2 q) i7 K9 M. o2 P1 N6 Y
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
9 C- J) \2 v2 R- c% u
, {# w2 Q1 |" c' y    cn
' j2 i3 S9 K) B    搜寻指令! }. n  ^7 i. [2 x& p
    例子:
4 L2 R$ k: q( y0 X) l    cn eq,60' L* {! i: A$ C
    搜寻目标等于60 (十六进制)
+ S& d3 K- [' D: ^        
3 i- Z% Y1 ^$ o5 z* S2 L    cn eq,#96/ Z2 @5 N+ K# y6 C
    搜寻目标等于96 (十进制)0 t! l! D/ d' ]. d/ t0 y& g

5 b0 U9 t9 T# {. B  e    cn eq
. i' ~$ y3 `% l; Y    搜寻目标的数值没有变化$ e. E: d9 e) |+ k: Q- `

# ?1 u' {$ h) ?3 h; u& T$ m7 y) J    cn ne0 W  J" _$ S$ R' ~; s
    搜寻目标的数值有变化! g. I0 a1 B) f9 H' t* c) R  r. Z5 V
        
9 c. ~6 A: E/ z7 ]; P  L# z0 I    cn +& ^- ^( v' F. {* L: @+ K
    搜寻目标的数值增加
1 w$ n% z& o: A    ) }5 u, x4 g7 X) Y" ^
    cn -. \* b. q% a' y
    搜寻目标的数值减少
" T3 B6 `1 g/ s        
! h/ k4 ?( z; i9 I: p2 W, B    cn +,3
, w! K  t1 u5 c' F/ L    搜寻目标的数值增加3 (十六进制)
/ B2 B& O, d) ], a
  _0 R4 E9 v3 ]3 B  D+ l    cl
7 f1 G4 ^4 Z5 ^; W" X9 s& z    列出所有搜寻结果' y  y3 {/ Z2 ]

3 v: {' F7 l1 y0 W    cl xxx.txt
3 A( T8 W5 e+ f( `4 a    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 e/ U& b6 v; }; x

' p$ o( p' [" f/ `1 d3 G    5 \6 I2 ^- [( P8 e+ z  h
内存监视点指令: wp, wplist, wpclear
$ L* F3 {( X" Z# ~5 a+ x' P    例子:2 F; F) g$ Y% X! ^! Y! h8 \
    wp 1234,1,r
1 V# k( d$ C4 k" l$ G      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ K+ b- s  j* k6 Q$ }1 N
5 e) Q6 B" o9 C  P6 U
    wp 1234,2,w
  h  Z/ y% Z5 b: X9 E# G      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 J0 p) _" F' |( z     
0 K4 h% n! q$ q! A6 c' |7 Z7 c2 t% c    wp 1234,6,rw
8 I  ]( U' s% @# ^      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
5 o" z6 q  s/ r' @: _( v3 u, m8 s$ F2 z: I8 [, T: F( F1 N
    wp 23456,a,w,wpdata == 1; H2 S0 O) a: J$ H0 [: i5 v
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 r$ t" `- ~+ w2 y
: i% D2 s2 A' Z. R
    wplist  n1 L4 d* X9 h! y2 U
      列出所有监视点7 q" q, o2 E% b: e$ B

$ [$ A1 Q& h, B/ }7 j7 J" }    wpclear 3# [0 H& y+ `5 s  M- e  d
      删除编号3的监视点& y8 Q2 b7 @( H7 n" l+ \$ [+ p

5 i' ]* k4 H+ I" v" D    wpclear: Y; k, N! b- d3 ^* s
      删除所有监视点" i4 c; m0 E  H# E0 t* P

% ?/ f( o- U  X( c0 _' }6 x$ P      ! l. M0 P  i- ^/ D. A; Q

& k/ ?2 r! Y+ H# C程序断点指令: bp, bplist, bpclear
& W; c/ ~% ?9 K1 Y  V    例子:
/ N; V( [1 t$ \! u  G( B) S    bp 1234* {/ D8 r" k# l4 |
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
5 ^2 S/ u  b0 d
5 o) K: E) k# X7 P# z/ N    bp 23456,a0 == 0 && a1 == 0
. [# \' ^# _. b. ~" U9 W$ R8 N      在地址23456下断, 且中断条件为a0等于0以及a1等于0
* m. ?3 c2 k- M
- a7 q$ ]2 N- W' B& r    bplist5 E% n2 y5 N8 x; w, f' O  F* z2 I
      列出所有断点" r, D* t2 ~5 L- s, {; K% A
' D# h$ X) b& B4 P% t# `
    bpclear 39 b" P& ~7 F1 K6 O1 Z
      删除编号3的断点/ Z+ Q0 Y4 u1 R" V" h2 R# O  `+ ~8 c

. a8 j3 G$ `4 x0 A& b    bpclear+ W! x" `! n2 n
      删除所有断点4 d1 @4 Z+ k- x+ ~  [! c" S
: i$ ?/ J) Y" \9 D/ |" i
      
5 Z3 O" |* @7 z; a) X      # r! s. ^& z: J2 k6 Y5 v
跟蹤紀錄指令: trace+ ^, p! {1 d) M( {
    例子:
2 O9 U; y! ]9 R5 E2 ^9 s% _    trace 01.txt! ]0 V8 _) p9 D
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
: t. V( x& q5 B' h
7 u& Q' T; \# T1 {! d+ h    trace off
: G( C& d5 L0 L: D    停止跟踪, 并且关闭文件& G5 n$ k2 d! Y2 y# }% j

6 y. c7 U4 Z6 ?    trace 01.txt,0
5 z; P+ J3 Z; r- n; g5 i- r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- z* y4 G4 z: I; D- l+ @9 |+ F6 B3 p, n. t, p# w5 D6 c5 {. h1 y
    trace off,0; S, {8 m; ?7 s
    停止跟踪编号为0的CPU, 并且关闭文件
% k6 n  k6 c  n8 U% D+ ~9 `$ X! T, w$ F+ q" Q
    trace 01.txt,0,{tracelog "A=%02X ",a}
* ]5 _' Z1 t+ B* S2 u3 l! H  z, |    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 p3 ]% }% j: X* P4 K, i" U    并且在每一行的前面, 写上"A=a "
- T1 C1 Y0 P/ ~, A    "A=%02X ",a为一个C语言printf函数常用的输出格式
8 @. H9 l9 p+ E) b# V    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入+ r+ H2 h/ n3 ?! y6 R' t
    X表示为大写十六进制数# q! P5 P, P$ U9 i; e- y) J! @

5 L3 _; F! E1 R; `) u9 Q- D* ?4 [7 ~3 o8 Y" U. t% N. |3 g9 e
% r5 K; C6 l" A
内存直接写入指令: maincpu
1 Q. g( D% i7 n: ~, w    格式为 maincpu.[][]@地址=数据
0 n6 N: _2 Q) S1 W    第一个[]:
, p: {; f5 ?( d  k* C4 J, w    o 表示ROM地址
& L; C0 w% B4 h+ t+ i6 J5 n8 V/ h0 h/ e    p 表示RAM地址9 w& E( g/ j$ \
) ~" l; A5 L, Q
    第二个[]:1 z: N! n0 ~/ G, y+ _" @
    d 表示4字节  x1 s0 h: D9 l8 W: ~
    w 表示2字节% P- n1 V- {/ h* S, E+ C' [' q
    b 表示1字节
" E) x& x; ~- \' _! ?7 D4 `# q$ s4 }4 K3 u- V4 h  A2 }% w
    例子:
& C5 ^" L, D" N! K& l' e    maincpu.ob@1234=FF% W. G5 v0 l2 e0 E
    在ROM地址1234处, 写入FF一个字节
) t" j, \* V  Y8 j' V3 X) J1 u* d, b& [5 i
    maincpu.ow@1234=4E71
* D+ Q7 n/ d2 [1 [* x3 W  D- I    在ROM地址1234处, 写入4E 71两个字节! q* G" K8 L# l4 j% F& Y

) z" b5 s" L1 c2 ~8 y7 O    maincpu.od@1234=600A4E71
7 N+ r& C/ C  D& m. Q    在ROM地址1234处, 写入60 0A 4E 71四个字节
. g" M6 K: \' L% B% \9 \( g- {0 w9 W) O" o8 i2 R3 u
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 N; ]6 Y3 F: P$ `0 h5 I; f! e
    $ M; d' ^# b6 F- o! L2 t

3 O/ i7 m1 D( d) T其他:& @( e  W" F5 y9 ]7 l
    dasm 输出档案名,地址,长度
% c# S, ^1 B" B/ @3 Y/ k    输出程序的反汇编代码
8 |5 C6 o1 Z- k1 o3 @, `    例子:$ U' E" k* ~& a0 Y2 a3 g$ C
    dasm 01.txt,0,100000' s& \4 {: M( v! O9 {5 t0 G
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( }( e$ o% ]- B; {$ d0 `
' s& s2 ]3 U9 s. q    softreset
1 v: q" Z+ y  R8 c) m( d    游戏重启, 但不重新载入ROM1 m9 e% S8 ?+ n3 g0 b

) F/ @. s! Q# s3 y6 ]    hardreset
% g# w4 v+ [+ T3 |0 A0 R; u    游戏重启, 且重新载入ROM8 ^+ e% n) j* D, U/ |
& q8 v$ L; k& Q% s7 j+ d
    snap xxx.png
" {( r6 e  V2 u0 b/ w/ s* J9 G) |    截图为xxx.png$ p- o. n8 P6 Y: ?6 J
. T* q& f0 i5 b% T
  
/ w3 L9 S; ^$ j- P6 i  ; K0 @7 c" u0 m5 I/ N
  
$ M0 u7 c5 T1 S3 m热键:
$ ?  F' I6 a0 Z: O1 \    ~ 中断游戏- _1 R1 _" \$ b
    F5 运行游戏
. K1 G- u- v2 v+ j9 ?+ D6 _3 K    F12 运行游戏且隐藏调试窗口+ N7 u* E  R* r
    F11 步入, 单步执行, 会进入子程序7 V, Z) W1 i1 U8 F) p% ]
    F10 步过, 单步执行, 不会进入子程序
$ W" d4 Q$ `0 Z) R" ~3 o7 S6 G- L6 e+ Z    Shift+F11 执行到子程序返回
$ k9 ?3 q9 j1 I" e4 I7 x- Q0 M    Ctrl+M 内存浏览窗口
+ y  G; x" ^6 X( a) d% r. h- Y+ z    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU0 N7 U) [3 x/ }, J
& }; x/ y- U; G  Q9 W/ c3 L
{:4_94:}   h8 h3 p7 Q/ A
" d0 G, K- @) G

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
! V, p) \0 W% N$ x' ^1 o/ H9 U4 y
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 | 显示全部楼层
要详细些的东东' d; O* u  W' t9 W/ b
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-16 14:57 , Processed in 0.062500 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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