设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
% G" j/ E8 v7 e2 O$ Y3 e& O; t
很快速的整理我自己常用的指令5 s9 m; u1 O/ O: F. F
- f) U' A8 J0 A2 s, G
{:4_112:}
+ G( W6 N- F' t8 R: m& a' v2 T& c2 b) n( `* u5 v
MAME DEBUG常用指令
' m2 o0 @+ b5 x- \& e$ ~( _3 ]: A% I) E0 S
内存搜寻: ci, cn, cl6 D6 L4 W5 W& K0 |
2 @1 b7 X5 M, `
    ci+ y% d/ M5 X* c' c4 D
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 i1 T3 t- p( Q' V3 b; v, P
. y. v6 j8 Y" {6 u9 n( u
    cn
( i, ?2 |; I5 a& g/ n4 v    搜寻指令
6 c8 @# x6 I$ _0 W$ @    例子:% l8 n  q5 f- M$ H2 M2 \; l" A
    cn eq,60
; w, ^5 J$ w. T1 ~2 Z) x    搜寻目标等于60 (十六进制); ^; ^. y5 i+ k8 V
          k! v  V) h$ M% [5 N
    cn eq,#969 E, R* u' k" c/ m  o$ H
    搜寻目标等于96 (十进制)
- \) X6 N( R, t8 {
4 P2 d( H" \4 Y+ r. V  U- A$ L* H    cn eq4 a% s8 J$ s3 v2 \+ D
    搜寻目标的数值没有变化) B9 X/ n; ]% Y$ v( ]* t/ p
& X' S) s5 {$ ~% }9 K
    cn ne
/ P1 c% z' L; B; E. u! n% r% H& K    搜寻目标的数值有变化
5 u/ N# l" x4 o4 `" K        
7 n/ H7 S/ n0 b5 N- \1 l9 k0 y; U% M    cn +& p& Y0 P; r, m% v. [) P
    搜寻目标的数值增加5 x" R3 L3 t; O+ h, H: Z4 H
    5 W& K+ D! z# K
    cn -
8 S/ z  h* |9 z2 v) Y    搜寻目标的数值减少
9 J8 i, y1 b& \' Z& S  b- d2 F        ) S( y8 v% F5 a3 e7 d
    cn +,3/ t1 u% u- _  r6 R, {% H+ J" s
    搜寻目标的数值增加3 (十六进制)8 G) t$ {8 r" T0 ~

8 W1 K" e' F) I) `    cl3 [9 z% g6 Q9 x
    列出所有搜寻结果
' d- G! k2 m5 u: }6 h' F
+ B1 q$ r6 J! r. {& C    cl xxx.txt  Q  j8 l9 J) s& o6 h- i3 T
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 L' d9 f  e( `% d5 d# u6 O* U3 O# N3 ^. j& m2 c) X4 {
   
/ U+ U# {& J2 w& e2 ~5 z0 g9 P内存监视点指令: wp, wplist, wpclear
# w9 e) _$ l) I0 M6 p/ q( x    例子:
* j4 k+ k0 D$ C# r; s4 A- p9 k    wp 1234,1,r' L& x' W) K, L0 v; @
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1+ d( ]1 J  k$ T. _, J
/ f; l6 E4 S& h3 O$ u" h5 w2 {
    wp 1234,2,w
$ n) _" `' |; k6 z3 N6 L      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度26 W$ J1 N/ K1 c& r
     2 i( S: l% b! V: L) M% v3 W) }
    wp 1234,6,rw) ^* N/ j, y1 k  I' @
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6# m: f4 L* m6 S- ]+ I

- g  [$ p" [( m0 `  F* _    wp 23456,a,w,wpdata == 1
9 i+ ^8 d6 e/ t: b% t# [1 z      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* s# l% e) u1 `: U4 S0 J8 o5 T/ Z- t4 m2 i/ \
    wplist
1 I  B$ d7 H! n* p      列出所有监视点
# F) G2 c% Q; p( h% [# |; n. y# u" A$ p2 w
    wpclear 3$ v. v4 d! _  V
      删除编号3的监视点
( S4 c- O, h6 d' q
9 z% \% A8 K/ B    wpclear$ w+ o9 L8 a) Y! U8 ^: m- Q
      删除所有监视点* M+ D1 i* C9 ]

- J3 h7 |( w2 z8 y3 p      
5 L5 y  r) O( z7 _  X( ^1 w1 V8 Q* N- R5 c) Q
程序断点指令: bp, bplist, bpclear4 f$ A" H, p. Z
    例子:
+ w" T  F2 q3 h3 g    bp 1234
9 W2 J$ Y, G7 B$ q9 X      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断" O1 E: P* M" A; U  k2 H

1 N- l# j; G+ d8 y) _. z    bp 23456,a0 == 0 && a1 == 0
, M4 w" J: a' t+ A, W      在地址23456下断, 且中断条件为a0等于0以及a1等于0% \% P8 q: D8 _, l+ Q

% M: `- Y/ n/ }+ A. I8 v    bplist6 e8 Z; m' U" U4 x( z6 f
      列出所有断点$ J, c- I% L2 `/ M2 B* i% S" b
0 @0 y/ l$ `8 P0 Q
    bpclear 3
% a8 M6 p" k* A0 \, |# _      删除编号3的断点
, @! E3 F/ O- q5 B9 Z; I7 W  z  p' |
3 c; n' B% \# ~; [4 n& p    bpclear$ l# ]; }. ^1 ~+ _
      删除所有断点
3 L8 H* l! C* q  C' b; f7 M% R, x4 g7 q; n
      2 M! l, c# }4 s$ P* i
      
0 D7 @, C* g/ a' [" r2 N% F% n# v4 A跟蹤紀錄指令: trace: H& z$ j. _. H( ]$ \5 c4 b$ G
    例子:/ f4 y2 i8 b4 U% F
    trace 01.txt6 x) x' a- T% C- l: I- e
    跟踪当前CPU运行的所有代码, 输出至文件01.txt& M8 |& L( x0 L8 j2 ~  m8 b  P! K

! w2 q: ^  M9 Y    trace off- b9 ?/ @! z' J6 S) Y" a( \) U6 T
    停止跟踪, 并且关闭文件( L5 B- P4 c# E( o( u: w0 D
2 D7 |& r% i" a
    trace 01.txt,0
$ ?# k1 i5 [  I# |4 H8 f! l! g2 [    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& k$ o$ v& V) q( A
5 X: @! ]7 q! v
    trace off,0
# y7 |5 j! V. q( l    停止跟踪编号为0的CPU, 并且关闭文件
. Y; g" s! K1 j& N
: v: s+ ]" t  e9 J    trace 01.txt,0,{tracelog "A=%02X ",a}
6 Z" a% Q& f. v: P- Z# B! W1 o    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 6 Z* {( q5 a$ Y/ i6 ?. G4 E
    并且在每一行的前面, 写上"A=a "
9 g/ v4 p$ P+ ]) A4 L    "A=%02X ",a为一个C语言printf函数常用的输出格式
/ v# ]9 c& ^% y    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% z4 n4 T. W0 k- j$ x& Y    X表示为大写十六进制数# t% M& |- Q  y( A% p0 K

3 A6 W3 l0 X9 B. M0 |" M. U5 D
5 `3 W: k7 F4 E, }. X  Q7 [
$ J9 a" t8 w  F5 e" l内存直接写入指令: maincpu
' u( n7 O: q% w! N$ m1 ?8 P( p    格式为 maincpu.[][]@地址=数据' k# p  |* M! m9 b# K. X
    第一个[]:( _5 [' x- c+ F! i. q
    o 表示ROM地址
$ H; Q  r4 A4 \5 I    p 表示RAM地址, Z2 A1 {, R/ w
* ?. ~9 r9 Q# Z, m* C; C3 d
    第二个[]:
0 U2 u# J5 R4 |3 c2 T: ~    d 表示4字节4 D3 T' ~( D  p) W% y. B% b: R
    w 表示2字节% O6 s9 G6 X, ?+ s; L& a
    b 表示1字节
' A, m1 r" u% G# v. ], L1 {
' l) w( {& M8 s* `8 R- c    例子:
6 c$ z3 D9 M0 L! F* z9 X7 a. N. [6 o    maincpu.ob@1234=FF
+ i# K: {" ^# \6 a, M4 n3 u9 b/ o    在ROM地址1234处, 写入FF一个字节6 m# E+ s1 W7 q' C/ q6 C# |
2 U9 |2 d9 e% L+ M0 J) h2 e
    maincpu.ow@1234=4E71) s. b: s4 a/ x3 y7 J! Y
    在ROM地址1234处, 写入4E 71两个字节
8 f5 `- Z" U# G
. t2 g' `. F) ^6 {, j6 c0 t4 ]    maincpu.od@1234=600A4E715 q7 J9 [) O5 f3 c" m
    在ROM地址1234处, 写入60 0A 4E 71四个字节
# H- `; J* o) V  w7 \, V. C# d1 n+ W# |% {
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% r8 w6 S2 e1 W  w/ x   
% I& E7 S: R# h* J- }
" ~" ~4 Y* \4 A) B% X8 c其他:+ F0 B# N6 @0 r' {0 k: f
    dasm 输出档案名,地址,长度2 G8 C9 F& y& l- E# F6 V. _2 Y
    输出程序的反汇编代码: M9 J" ]7 F  g0 C- G
    例子:8 j8 S9 H3 f& O: P& ^
    dasm 01.txt,0,100000# @9 o: H$ u9 S
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 @& {$ p8 I5 j* }+ D4 ~! f! B
0 e' \7 L7 C7 Q2 a% |
    softreset
: e9 l6 h( b6 [3 l    游戏重启, 但不重新载入ROM
) {+ ^: Q9 F5 z& r+ D* {' f" H3 |
9 x' V% r9 l  X    hardreset+ Y3 w% a. S. N3 L* h& G
    游戏重启, 且重新载入ROM3 B$ |9 L# l, S2 V1 N
1 _9 M& S% a% d4 D8 w7 T7 l; @0 t1 s
    snap xxx.png
7 ]3 T: Q' o9 ]5 k    截图为xxx.png$ T  x9 D5 M- q4 t# b, x* a+ q

' }5 `! G2 |4 _& s7 b9 Q; x' i  
9 \4 k) }" Q% G7 D7 f  
+ E& c9 J+ \6 v1 K  ! c+ Q" @: k* `5 \6 \3 v
热键:
. [  B' |- g0 S  B6 I    ~ 中断游戏
! t* Z) R; n& B    F5 运行游戏
- V$ C, [) C+ ^! ]5 f8 ]3 o    F12 运行游戏且隐藏调试窗口
& [  Y6 G$ S) K    F11 步入, 单步执行, 会进入子程序
: ]  ^; N1 W: h4 [7 ~3 P5 `3 L    F10 步过, 单步执行, 不会进入子程序
9 ]3 D- C- \8 o# y4 h    Shift+F11 执行到子程序返回& x0 _6 `- x0 _3 X+ Z
    Ctrl+M 内存浏览窗口
1 ?7 i* x. ~- P. C; A0 x& R  j7 A    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ ]5 N6 ~5 B8 r- k3 C, l) ]5 {6 _; Q( e, M( H0 D" B
{:4_94:}
! t; Z& k( W. d5 v/ U# Q" k
* Z. {# d* {! e0 d! d: e/ z

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2564 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
5 f9 `% _- |3 M$ l! ^/ b
  r& h. R/ K3 c. T4 w: }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 | 显示全部楼层
要详细些的东东
$ M/ `9 H% ?5 u* ?) d4 Q! Y11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-20 15:10

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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