EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

% u5 F. p2 p, ?; J, X1 Y很快速的整理我自己常用的指令
' h* p2 Z0 F/ Y1 V- Z6 P' h; ^% K7 y4 |% J& V5 e$ q
{:4_112:} 0 V# L$ N/ q' \7 y+ C
) R/ e1 r, B- }2 O. u/ u
MAME DEBUG常用指令
2 J9 h$ o% S: ~
; ~) d8 N$ Y4 r( ^内存搜寻: ci, cn, cl6 Z& |" z$ J  j

# e/ b+ V; J' Y' _    ci1 }  k5 x9 e- u6 Y
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
8 m+ F8 S$ q) e; ]* E. p7 Y: Y- Z( h8 p! r: f) D  R
    cn* d7 _; i8 W( R* L# a' H& q
    搜寻指令, }4 j9 }3 f) {% r$ c! t
    例子:0 T6 S; f, Q1 q# y9 O
    cn eq,60
; l* y) |0 o& d9 B+ g+ q    搜寻目标等于60 (十六进制)9 M1 Z: \* U5 d/ |1 ^$ k' x
        
) `( u/ v8 [3 w  l9 J7 ~    cn eq,#960 D$ h& y) V) b( j# T4 F& U
    搜寻目标等于96 (十进制)7 u. n% y1 \+ `1 a! f; x
" w8 J: x/ G: v, @
    cn eq
8 x6 @" P0 O& N7 L6 z9 c8 V4 }$ q    搜寻目标的数值没有变化
6 J& x" t3 i( G0 p7 q( X, @6 r: ?3 P2 d- I$ i! |" c+ l3 K  {$ n# N& w- G
    cn ne
9 j# n3 ~4 J! [. H: E    搜寻目标的数值有变化7 z# ~) R4 ~' p' \
        
0 j0 C9 i* I% y$ r    cn +7 Z* g. \# ]$ r  j$ o  I7 W
    搜寻目标的数值增加
7 M# P; {/ @7 l+ D6 }$ a  q3 _   
3 F  g3 {8 D2 P& M    cn -
2 P- z( v. S0 S0 |    搜寻目标的数值减少
5 u# @: j" ]+ c, y& f        4 r) h4 |! n: [+ X: J
    cn +,3& C( ~; T3 h& L0 Y7 Y
    搜寻目标的数值增加3 (十六进制)
4 j( ?8 y+ D. D5 C  s8 R# v% [4 |: v8 x2 y. E
    cl
4 q# K. I: ]7 M; h. t6 K: a, K    列出所有搜寻结果. x/ N3 x4 n/ g# S( f% f6 u+ q
" \' x1 {& ?5 Y# j! i- v4 g: ?) A. t
    cl xxx.txt# A' ^$ {7 L% g- O
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式4 \/ Z& Z% S: g

3 C2 o5 h/ w; a5 s# K9 L& b# `4 ^   
. a- i" q/ I% g, t3 E内存监视点指令: wp, wplist, wpclear
# j/ y  J( t+ i0 T+ o8 {: S# j3 f    例子:
$ q* R' W0 [2 r) u4 E' h7 L! W+ ~    wp 1234,1,r6 _4 Z2 U0 C: q- F+ g1 C% e: k
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度11 o/ B7 y6 ~- r& Q6 G! F

3 R: |/ |8 V- o5 F    wp 1234,2,w
: O7 c$ [( W. A2 r4 H      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; r# `- s6 a  ?9 |- O- ~     
0 A, {  A# c! E* b; I/ Z    wp 1234,6,rw
$ D$ D/ g1 R- ~      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度62 t0 n0 T- |  _( u5 ?; n

9 C  n- `/ R+ E$ U" \5 {    wp 23456,a,w,wpdata == 1
! K& T0 x7 v* N2 _% u# u7 E, F      在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 e) z6 K4 l" D$ h9 _8 X

! B/ O4 D$ s% U9 J% p    wplist* O8 x# U( \: v  a- @
      列出所有监视点5 w: S) B! D# l" [! H1 G  O( q

# O/ y: s. w4 P# G0 m" n    wpclear 3- y  R: g+ v! ^
      删除编号3的监视点- |6 I% j, G2 @& x0 [1 f4 b

2 y6 J, o$ j3 A1 B    wpclear
9 e* k7 l# S7 W: R2 c      删除所有监视点; b& ]) `/ q; c; V- T

9 |! t5 T9 {3 v/ F$ ?      
, {; x1 Z6 Z, f4 ~
2 c3 b7 w* o, {& \, ?; K# [程序断点指令: bp, bplist, bpclear
9 }( w$ M1 x2 ]  o4 Q    例子:
, L1 }: A* ^: t; B    bp 1234
( N1 I4 M- l9 J1 U      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
% `2 |  [- E( }8 Y( ^) d( R
0 `6 z/ X. \# X+ r6 _: n6 s    bp 23456,a0 == 0 && a1 == 09 x0 p0 n9 E) a0 {) a1 X5 O# u8 V
      在地址23456下断, 且中断条件为a0等于0以及a1等于06 p; O7 P8 K6 W* L) G) L( \) j

, A' o- Z2 V3 m1 |. v    bplist
" b3 q; f+ y. {1 \1 M4 R* U9 ?2 o      列出所有断点
4 R4 w' e' q/ |% d: s3 f+ n" s9 f& G7 E! K& Z2 X7 S: L
    bpclear 3
! x3 F- o4 l- y7 H( ?% A5 \: N      删除编号3的断点  ~3 M6 f) _  W) ^# S
, U; r$ j0 n4 }7 K/ v% [
    bpclear
+ M9 e3 a$ v" K" G6 Y* K      删除所有断点
& @* e+ q" {8 _5 n5 K2 _
8 a5 L( a; |# g' a      # [: a% g0 O! X% y( {. u
      * Y+ _9 ^  t" Z7 d- J; X6 k. O
跟蹤紀錄指令: trace' L) x) z. l& J3 \- r  x
    例子:2 L7 f( }7 e2 U3 ]5 Y, }% P, K8 T
    trace 01.txt
! ?. G# v0 U& D7 e    跟踪当前CPU运行的所有代码, 输出至文件01.txt9 f3 K; p$ K$ r3 O8 K6 t9 |

# o- L7 }: r# B7 H  |3 I    trace off+ V; o2 ?: n& U/ Z* j9 G
    停止跟踪, 并且关闭文件5 D% a, m8 O5 `2 a7 {) V" c) P# v

" N6 z" p, M4 n& _) E+ j    trace 01.txt,0
3 ?& V- s# Q4 S+ G; i& v    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" S- j6 C$ }% K0 h0 K5 l6 N4 D) v( t8 J
    trace off,0% ?6 O" b' ]; p6 U
    停止跟踪编号为0的CPU, 并且关闭文件
1 O8 V' L' Q! a; h+ e3 o
3 @4 P" ^: H1 H8 R: ~5 i$ k    trace 01.txt,0,{tracelog "A=%02X ",a}
* S4 A6 |9 h' B  `* F5 D( H" O    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt / x' R  S/ q. m/ R$ X* {4 K
    并且在每一行的前面, 写上"A=a "& b5 S. G9 h. f1 l+ ?, \
    "A=%02X ",a为一个C语言printf函数常用的输出格式) _7 T9 A- |! T6 E: ?- d
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
: }$ U6 u7 k- I- ?4 p. L    X表示为大写十六进制数+ p' M9 g$ g7 o5 C/ t' _

4 R, e! O. {1 ?" H; V' T8 [/ C4 b4 W
3 z, H+ V+ S" C+ N4 w, ~; z" m
内存直接写入指令: maincpu" L! p9 m) B2 ]2 H6 o
    格式为 maincpu.[][]@地址=数据$ v6 v8 x8 `- C2 N7 c# Y- x! K
    第一个[]:
4 S3 v0 N% S& {* [" E5 A    o 表示ROM地址
( M$ _6 g% G2 y1 R    p 表示RAM地址. O/ v9 H5 V, q

/ d9 g# j' ^& O  q- Y    第二个[]:8 d7 B: `4 L( I, ~" K/ Z; |
    d 表示4字节
2 t1 N7 r) }' \) a) Z2 x% B    w 表示2字节8 B4 q' K/ }) v. D) i+ r
    b 表示1字节# X% t1 N1 k6 q& m* U1 R5 |; E

) e9 D, ]# }* B. z: h( y9 s; A6 {    例子:% N9 T) O7 h  P6 N! H0 y
    maincpu.ob@1234=FF# s( N# A( n- Q8 l
    在ROM地址1234处, 写入FF一个字节5 m  M* {: @- k7 I
0 w) t+ z0 I& D+ f$ K/ D
    maincpu.ow@1234=4E71
& n. _1 {$ ?/ U    在ROM地址1234处, 写入4E 71两个字节5 s% a: ]5 j; d( ~: m( a- j" }% w, r  l

$ g5 r+ y- n. {+ X    maincpu.od@1234=600A4E71
2 I1 B5 B; a8 D+ y' L    在ROM地址1234处, 写入60 0A 4E 71四个字节
! @; N0 r* L1 E4 p, G, G7 r4 F- e3 T# c
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写" _' |" L6 k4 F. b' b0 u
   
- C4 c$ M/ Y% S! E( W! R" y9 k; W5 \9 x" z9 w
其他:1 i' D( G9 e* c" f1 N
    dasm 输出档案名,地址,长度
) G7 l) z, T8 \* s# K  p$ x, w    输出程序的反汇编代码
5 j! T, f; ]: Z3 E. N! c+ P1 g    例子:
  H/ }2 a% s" P- F  t8 D    dasm 01.txt,0,100000
' B5 n# @/ A: t6 Z9 r$ s+ z    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt* n  _  Y8 R7 T* C  o+ b9 G
2 t- T6 j% z* v9 @" B1 b% Z
    softreset7 x8 z+ H/ e/ ]" R+ V
    游戏重启, 但不重新载入ROM
6 Q3 d, X8 U  V
1 c% G% n& h" g  r. e% O! v  x    hardreset# }/ Y  l/ m% H) [3 n0 N. X
    游戏重启, 且重新载入ROM; x3 g& h9 V5 q+ H  x& L  G2 h

' _/ j$ u. G) Q! Y8 k0 t" j    snap xxx.png/ u& g6 v8 [, w5 Z
    截图为xxx.png
/ _6 z2 ?7 N% u5 e8 ]
5 J: p3 O- v* V; U. `2 D6 e  
# y3 t4 [6 j+ s* F# Z/ x; E/ M/ {  
: [- ]6 z9 Q/ F7 `6 Q  T  
* k3 s! Q7 A* u& p. r热键:
/ [% ~1 J3 e- K9 W    ~ 中断游戏
+ o& F0 ^+ G/ b1 h# U) |: x# k    F5 运行游戏
5 A9 q7 s2 a& [    F12 运行游戏且隐藏调试窗口
# o1 s  p$ A) l9 F1 L# U8 M) q    F11 步入, 单步执行, 会进入子程序" R$ ^: q: y8 t; h- _7 m
    F10 步过, 单步执行, 不会进入子程序3 K$ D% C8 V: H) l
    Shift+F11 执行到子程序返回
+ w* Z! a" h4 p0 B8 z3 ]" e; Q) O    Ctrl+M 内存浏览窗口* u# i9 i0 s- W% }
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
; h0 h1 Y- e/ X9 U) ^. j% c4 Q& G* [6 [9 P; ~+ r
{:4_94:}
0 @0 E- r4 |5 ?' w
6 m% C6 A& _6 Q% Q  w% i5 X: [

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
3 T7 y( A. F7 @
6 y; O# a  Q; C8 k8 MPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
3 v6 d' O4 M' N: r5 h3 ]11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-17 16:45 , Processed in 1.093750 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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