设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
+ R& |  C9 Q# Z! w) ~6 a/ W5 C5 b
很快速的整理我自己常用的指令
! f# }$ [3 Z, L9 Y# [3 y( J
7 S) i  N, ^. i) a/ E$ R7 x: C/ P{:4_112:} + i9 ~$ z/ P6 @

. N) _- w$ m7 Y& e" KMAME DEBUG常用指令
/ t, D0 v% Q: S) x# o! J7 G: T' T  E- M2 j- a
内存搜寻: ci, cn, cl3 |- R# l8 ]0 R9 w
. S9 o' l. ?5 B. g8 p
    ci8 v) k$ I# Y8 D& P! |
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令- A: T% c  A& g2 _2 M" h
0 F2 E3 _8 X( p. N+ Q
    cn- _! Z5 F0 H. l
    搜寻指令$ A7 D  z: r  L" M& N  P2 M) U
    例子:
& l, p- O4 G7 [$ M$ |- {6 [    cn eq,60( o5 w( \9 H  y3 T/ t
    搜寻目标等于60 (十六进制)/ P, R* W1 {8 Z! M' j
        % R7 G2 d; b2 c5 W+ @
    cn eq,#96
# U$ X  S8 ]2 R/ q' L    搜寻目标等于96 (十进制)
$ ^9 H, o. Y, u# L+ {! T) ~0 G, Y4 g! }7 X% W
    cn eq0 r1 k* C4 R, j5 f
    搜寻目标的数值没有变化
/ \. m+ E9 o/ [" }0 z, {: W' q: G
    cn ne! d4 w. \: o, I: l
    搜寻目标的数值有变化* x* D* R& M: ?6 h: U
        
6 X- h  T* `* K6 Q5 D! \& }4 d    cn +$ ^! `, C! i6 Q+ y$ g7 ~; I& V
    搜寻目标的数值增加8 P* Q2 c3 Q4 N0 ?! O
    ! V6 X, [5 D+ h4 h* m
    cn -. Y& o* H1 m% m6 `8 D$ j( A
    搜寻目标的数值减少$ d) v% t  Y: J' p# o! a# J
        ) r* ~# f" E' k
    cn +,3
7 z& R, I1 l% b2 i% X! t: {/ }    搜寻目标的数值增加3 (十六进制)* R' F# u. r% N" X9 O/ ?

  z& R0 K/ u# B# k; o! u3 t7 J  i    cl% [1 H+ h$ M. }: ?4 |
    列出所有搜寻结果% B. |  I, N$ z$ h  n  {: ]
( w! r6 ~# ]5 l& T" a& E( ^
    cl xxx.txt
" I2 `" ?, V1 r+ v    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式- f8 z1 ^; k2 ^" F

* w6 G& _3 C8 L0 p   
2 K6 S# ^$ F8 r% n+ G0 q8 r内存监视点指令: wp, wplist, wpclear: I: F7 p( l' w5 y: ~
    例子:/ E% v; K1 B$ w2 C0 C
    wp 1234,1,r
5 O: Q4 P( Y- @4 g      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& {! i( e* g: L. t* j# x+ f7 F
    wp 1234,2,w  R9 a3 |& u4 F' l
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度24 X3 R5 U, P/ N& E4 e. ^
     & I2 e! }" n/ ]7 |% |8 f1 y( N3 k
    wp 1234,6,rw$ b" S: Z+ P$ T  T, g# w- C
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6' x" v) }/ U9 j% v4 T

9 V* R2 E# f* W# e    wp 23456,a,w,wpdata == 1
6 K. J% `7 @* p4 a# Y$ Z2 X* Z8 Y      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* j2 ?  K3 {1 O# t. \. n& y" W3 Z5 H1 Z) l8 G
    wplist
4 W$ q) D- V! E3 s& t: m; [' |      列出所有监视点
+ V4 y9 ?. q. g8 l0 I: a- m$ p8 R9 b+ a; q; P
    wpclear 3
- z) \3 x8 I$ b0 p3 k: c2 t      删除编号3的监视点" y: D( |/ j0 I& e+ }  @/ d

9 ]" u0 s7 J" [% Q# v' d    wpclear
7 r+ x7 s5 g5 U  N& S      删除所有监视点, z& m. Z) I  q5 O; k
4 ?3 B, C8 \+ C# L2 A1 P  k
      9 W: r& b4 W' j/ x% }/ ~; a5 z
8 A/ Z: \: O1 p0 v
程序断点指令: bp, bplist, bpclear1 m# u" y9 |+ h. K
    例子:+ I' N) s" l7 ~7 Q
    bp 12349 \! w5 F1 L4 L& B: s9 i
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断5 @2 f3 b" B7 R7 v1 N% L

- t( }) H' T% h5 j" a    bp 23456,a0 == 0 && a1 == 0
7 E: m- x) E5 U9 q1 B  j      在地址23456下断, 且中断条件为a0等于0以及a1等于0
2 K: C" U6 t; N4 Y& R- E6 K3 ^* T2 @0 w, {3 q. D' X
    bplist: s! Y# J; m) H7 W+ k* g
      列出所有断点
" n4 Y0 @2 W) J! `7 ]% |
% i  q2 n( u2 L8 W# S    bpclear 3
% r2 y* }- V0 E! F      删除编号3的断点
1 ~+ L- F) R% P7 D- i8 O) F) i% n; f0 l+ T) n* ^+ M; {- F
    bpclear
! ?- w! ^" D1 h8 G" t- T      删除所有断点4 `  ]7 b$ s: y) S4 ^/ ?
2 W2 n# ~. L1 ~8 q4 n3 f
      
4 |3 a( S6 f# p1 D3 E2 r' s* U: V      
& Y# o9 q4 v: R, H3 J0 h跟蹤紀錄指令: trace# h* t1 }" X. H/ [/ G1 ]+ L9 k
    例子:
6 i! O: p7 a* J; d, ^$ C- u, D. q' G; [4 y5 f    trace 01.txt
5 J. j1 C* \1 f$ ?1 s" d9 Y    跟踪当前CPU运行的所有代码, 输出至文件01.txt
; u2 l+ Y7 A" X
% }0 M- ~: K( M: Q# D    trace off& K' F" `# o) B* S2 {
    停止跟踪, 并且关闭文件
6 e+ e8 C3 ~- p
/ m- m2 |+ h5 {# Z+ x! _    trace 01.txt,0  t5 W- Q& f/ {% v/ I2 |! q
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& J% q2 z* [8 x( t: S5 n- Y

  ^9 D) N" m; \9 h0 v    trace off,0
; ^, q: [4 z0 t' N; s- Z+ v- |    停止跟踪编号为0的CPU, 并且关闭文件
8 q# p0 K# M! [( w! t  L8 T
# ]5 M* P$ F! C" u: b' S4 o* m1 N% N    trace 01.txt,0,{tracelog "A=%02X ",a}
4 N. n7 A  r, S4 i  k& p) B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 Y+ Z; q$ F1 ^4 [7 K
    并且在每一行的前面, 写上"A=a "
* i' K8 `1 V& w+ O* U    "A=%02X ",a为一个C语言printf函数常用的输出格式
+ C8 v/ g0 A) ?" t- H% h    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ J0 [+ R9 a( f4 w& e! ?* s$ n2 b    X表示为大写十六进制数8 c' \  O1 O$ [. C4 D

, G1 R$ ^5 N" z- |" \# r) e$ {+ D. W: T/ ?/ F+ f$ ~5 O
  |/ M2 ~/ u% d+ x9 S
内存直接写入指令: maincpu
, G% K! Z1 K, R  l7 s' z    格式为 maincpu.[][]@地址=数据
6 ^5 A+ r4 L' c$ I% K    第一个[]:" y7 W5 V! V# q$ S
    o 表示ROM地址. I4 M7 D0 J. d$ q
    p 表示RAM地址
" z8 m1 ^7 T5 ~  m, N4 W: h- A2 D5 P% @3 d% R  y9 K
    第二个[]:7 i, j- p2 f+ j' {+ ^
    d 表示4字节
6 k, t" Y/ _0 P: r4 o' t    w 表示2字节, t4 E0 m% d9 b. x
    b 表示1字节
; Q! ]2 L  G7 |' R, A) h" B2 u, n2 ~" |) }; t; _2 t3 }
    例子:( i3 l& v* \7 L% E6 b) r. v
    maincpu.ob@1234=FF
# P" B/ }$ h% d# b$ k    在ROM地址1234处, 写入FF一个字节
( A4 Q1 j3 C0 T1 Q" O  w* b9 U8 Q0 s, S5 T& J. j, C. U9 L* u
    maincpu.ow@1234=4E71
! u3 _! _/ I) U- O, k0 m  J    在ROM地址1234处, 写入4E 71两个字节6 ?; O7 T: q5 s8 w' x5 I6 |! H
7 i8 N; A; x5 X( i% l  ^6 k! _) Z
    maincpu.od@1234=600A4E712 v& U9 R& y- D1 u% \
    在ROM地址1234处, 写入60 0A 4E 71四个字节
( y0 L. N( o' U$ ^* T
% S& Y$ b* R+ P    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写$ `: k' _( g8 Q6 B
    # N  J& e, ]; r* ^% t
- H, M1 v& I' H' u$ h* Z8 v# b
其他:+ L# L+ v% e; f, P( L
    dasm 输出档案名,地址,长度
/ V* Y1 A& `6 s3 V9 |    输出程序的反汇编代码
: @! z3 o" R! a- G    例子:% F6 W; s( X3 \' w2 k
    dasm 01.txt,0,100000
1 X2 K8 V5 @; }    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ S5 G+ c- L1 W# v, w; u' g7 D
- ]3 n  Z+ `- a
    softreset
2 U# `  A, Y- b: v# k. L6 f    游戏重启, 但不重新载入ROM( U. e+ a* ^5 V+ _2 {: J
$ S) Z% s: S$ O( F) J
    hardreset
8 ]5 o8 ?/ g( f) P    游戏重启, 且重新载入ROM- @' g9 S5 L& b% H7 g/ M

! `2 X/ ]  k+ ]  q6 [& F/ U    snap xxx.png: x% [% H! x5 u: f
    截图为xxx.png+ X! l. \- j9 x" B1 F! J. G0 Z
& o  \6 V- R7 F+ J$ M, O
  
6 Z0 o2 V0 m% E! U# H! v: E  9 j7 G1 R' c. ~3 C8 _5 [; B0 I; U& S: `
  " ~3 V3 O4 }3 W8 T+ ]/ ]
热键:
/ }3 ?) K3 P* h/ N* O1 t1 Q    ~ 中断游戏/ `6 ~! A8 p* _# p
    F5 运行游戏
' [% T: X5 O* {% p$ g. i    F12 运行游戏且隐藏调试窗口
; r2 l& j6 t2 P; m; g, s" Y    F11 步入, 单步执行, 会进入子程序
0 \2 m# l0 X0 f* x6 L! x/ U6 S' ~    F10 步过, 单步执行, 不会进入子程序5 _( e" g$ A$ Z( r4 n, h+ {
    Shift+F11 执行到子程序返回
' N  F+ V) C8 x9 p  d) J& ^( z    Ctrl+M 内存浏览窗口
! @  v" v( q* h$ ~0 i    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU4 e4 s% p- c/ a* A
; B  E" c$ m+ h  R; k
{:4_94:} - v# A6 u8 D1 v; s

9 N/ W, r% |4 y* F6 ~% j+ p

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2550 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。! e; ^  Z! F: d

* Y/ e! S) f  R7 Y0 |1 [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 | 显示全部楼层
要详细些的东东6 o" p% p$ j; @, n$ T
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-19 19:01

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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