EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
  S1 D! k! a% [$ e
很快速的整理我自己常用的指令
2 `% B8 v+ b' y/ {& \5 w
- w" D0 ^  ]! ?8 V{:4_112:}
! b3 K$ v& d+ r: }) c4 d( ]* q4 T5 P6 r( y( k  y! r
MAME DEBUG常用指令/ u+ T1 S5 v; [) C4 k

5 J, ?% o, P3 X! E0 M内存搜寻: ci, cn, cl
, X6 o- T: s# b9 R, [' R9 H/ }$ O3 ]
$ C( f: c8 {; L! D    ci1 r! O, e# M9 u
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' L& C. T6 M* U) [: [7 z1 O% }% k  V
! h% ~7 @1 J1 r/ P( a4 R! k& L' f
    cn" W  T' _" C3 l7 y' ?
    搜寻指令# x/ R" c6 f6 ?" K
    例子:
- F  c& D3 E8 ^. V8 q2 O! g0 ^; e    cn eq,60
% N+ v" O; j5 @6 Y    搜寻目标等于60 (十六进制)
6 _( L- {" m. o' D3 `        
2 j1 I* h: w$ O$ A6 U    cn eq,#96
0 k, Y. A' h" v2 c    搜寻目标等于96 (十进制)# R  _) F. o3 \5 p6 y
! e9 }0 z. b% `4 h- e
    cn eq  o3 C: I! T* L7 G6 G$ C
    搜寻目标的数值没有变化
4 A$ V; J! m( ~6 g  x) P1 H3 s3 O( f! g! t
    cn ne
2 O  j6 T2 m5 C* E& p% @    搜寻目标的数值有变化, m7 \% B4 J/ f$ \& n- i
        
& O" p7 D1 Z  e1 R& N* r: |    cn +
7 i1 P$ x: L  q3 T  A, C4 X  j8 i    搜寻目标的数值增加
5 g  V1 x  [7 T6 U( u; ~    # D1 a% ]' S8 C
    cn -
1 d$ {& D" _# C' G# ^+ Q, h    搜寻目标的数值减少. l& ?0 E5 s. u
        
1 d. K% X# c: c! ~: ?6 j- e% v    cn +,3
8 [, R( I; T3 m  ~; L1 U, _, Y    搜寻目标的数值增加3 (十六进制)
2 P$ `& a) R$ v4 s( }' F; @9 \
9 W) {5 K( d9 y/ X    cl# w; t) D2 J$ K5 {" x5 {
    列出所有搜寻结果
  y4 E- `+ t- z% H0 F  k) c* r
' d" Q* V+ l: E. D" T& z6 [    cl xxx.txt) P; @3 _: y7 d! I& s
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, D. n9 R1 J. A" ?2 U& d
% ~4 P9 C1 b7 b6 |   
+ j4 i* [# H* {7 y内存监视点指令: wp, wplist, wpclear
7 n# h- U  R3 t% ]) V6 s    例子:
: C0 ?" {; j& T* A1 f: O1 y    wp 1234,1,r( Q7 C  k- _* }& r
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
2 u; N) T( i; d9 o8 M3 g" i$ N) t- N" `
: p9 ]. M0 C* {; z' B4 I  i    wp 1234,2,w7 M! Q+ k. j9 e' E, r* T' e" ^! U+ N* c- V
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ J8 v+ e* Z, x) t/ Z     6 A& O  E: z! @; a; n4 J. F
    wp 1234,6,rw" q- X1 s5 d/ ?3 W" K- W
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 ^6 H0 n1 M8 s7 \8 h2 r, n  b& C5 A& P& x! B7 J% q
    wp 23456,a,w,wpdata == 1
' g5 I0 i- x, D9 \. G0 i$ D      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 s( z  n, @9 f& H; U: z: p. S( ^# a2 x8 u& }5 A  r
    wplist" s! E( @& k9 x+ f- s
      列出所有监视点1 j: p- M0 d, O8 ?/ Y

; D: M  ^" c% k* U  F8 h    wpclear 3. v/ G, w+ A0 ^! L' l3 g
      删除编号3的监视点( e9 F4 l# y( N0 `& B
2 X3 c+ y: b4 o: A
    wpclear
& p% P/ q% ~7 C5 b  C# H2 Y      删除所有监视点
0 m: ^& D/ \: F, R* |* r4 z7 X0 }/ p: C" G
8 O* n) [* ?7 C! T" K      % z. [( X4 K8 b/ c+ j1 N' B

$ I, w# d% ^) X- M6 t, U5 i& `# Z程序断点指令: bp, bplist, bpclear5 V' ]& s* o. D. B/ @5 z
    例子:
  m. F0 H6 G  g7 L2 y    bp 1234$ l7 r0 f6 s& t7 e+ C
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
  d2 [$ B: O- Q) y' E. m3 B" C1 P7 f$ L, ?. G2 K+ t
    bp 23456,a0 == 0 && a1 == 09 v; e, A9 _6 z( w4 ]
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
$ @, G( n! w3 ^/ G4 d6 f. H& R, N$ ^6 Y# ^( u. `! I: j# \
    bplist! y- z" i- G2 g+ c/ _( L3 z
      列出所有断点
6 u: @, T4 {* @5 H) G0 y: ?6 m1 v/ m
    bpclear 35 h6 |9 D2 b$ P2 ~) k$ P
      删除编号3的断点
+ c+ ~( a/ W+ G& n5 h- {$ m/ n# `5 u( D% L; X
    bpclear( O' R0 f  z& l
      删除所有断点( I: \5 ^: C% C1 i% y

7 M+ y( q6 [2 U. W0 u! l      
3 {% H0 d8 V$ b% @( t% J" `: z      6 P% |4 D0 E. T5 D
跟蹤紀錄指令: trace% `5 U; [9 C1 s( ?
    例子:
* |# f/ ]3 V# S1 U8 ]  r    trace 01.txt
2 s* T) A% d3 g; x5 f1 S3 V- R    跟踪当前CPU运行的所有代码, 输出至文件01.txt4 [+ M7 N6 `/ y1 N: n  w3 \. l- C

1 L) u( t) h; J, U    trace off
2 b! @$ R: L- s  f    停止跟踪, 并且关闭文件8 W0 H: E/ z& X; W0 H* M* L$ B- y
; Y8 C& w+ O) @) o4 i4 m, e
    trace 01.txt,0
* o7 I- n8 Y! k) D    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% v$ c  m, Q7 D' t+ F" f2 Y# J, ?. p; p. l
    trace off,0! d3 Z2 P; R+ [# `1 ]
    停止跟踪编号为0的CPU, 并且关闭文件8 ?9 I( L# h3 K; d5 X( j- }- u

; c$ Z" Z2 s' T8 u' n# N. y. y% l; X    trace 01.txt,0,{tracelog "A=%02X ",a}
- ^( z7 D9 B' x* k9 z+ |2 R# L! j8 r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 h1 F8 @8 S2 N& a) _& B9 [5 \
    并且在每一行的前面, 写上"A=a "3 M! b" N8 c+ }) }
    "A=%02X ",a为一个C语言printf函数常用的输出格式
) g. }5 Z% c* Q    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入" k9 J4 E  q; G1 V
    X表示为大写十六进制数( ?& i0 C. b/ a4 }; W

* ~/ ^, P& P2 b7 p! N$ `0 ~  h8 c( r5 T6 {' [2 |. n

2 Y1 a* [9 i5 H0 F5 X% T# I内存直接写入指令: maincpu
7 w5 @# _% ]* X( c+ A+ S    格式为 maincpu.[][]@地址=数据. }" ~. O# J  m7 [9 e
    第一个[]:) Y) d( G4 {. P! Z& |
    o 表示ROM地址) E  B1 \9 i! \" e" u
    p 表示RAM地址- I5 T" }' E! Q2 j/ G  ?8 o% Q
- z* s# a; `; y, }, l: o5 y$ i( }
    第二个[]:3 J; H5 `# v# b" J4 k: J' ~5 ]0 B
    d 表示4字节
3 o5 @  ]  A- m- v  o. H. Z    w 表示2字节- ?2 L% m  w, }* @* G
    b 表示1字节
) g8 ~' ^/ s' y1 w+ B+ K  E& t+ J6 e% r$ B5 t
    例子:1 ?) {5 x/ o& C, T
    maincpu.ob@1234=FF- t- H9 X5 _, F; {" z5 G
    在ROM地址1234处, 写入FF一个字节* H1 y- `7 @0 F3 t
! n' e7 l6 S' k& G: `" S5 ?1 F
    maincpu.ow@1234=4E71
4 ]9 ^0 |" ]/ E' @5 b8 `    在ROM地址1234处, 写入4E 71两个字节! ?2 r6 ^: k: m% @
2 Z6 S5 {! h% p2 N
    maincpu.od@1234=600A4E71
% _& `* w6 l' Z3 M2 Z1 L1 l" B    在ROM地址1234处, 写入60 0A 4E 71四个字节
3 r! S) r/ z4 L- u  @' Z3 H
" T) `2 N+ r# D    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' S& w% l/ d! F
   
# G6 v+ K. @+ a2 `4 M5 g% ]/ i* L$ V3 y+ s- Z
其他:2 T) i/ ?( R# p+ t' |
    dasm 输出档案名,地址,长度
  }3 l: z1 x# D+ [    输出程序的反汇编代码
& T5 T4 k: N* j9 ]    例子:$ r- ?6 O5 g( W  c
    dasm 01.txt,0,100000# v% A  h* y; ^
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( U8 A8 ]$ I$ _; J9 W+ s( F
6 |1 e+ P' [( o0 _( d    softreset! c: ?- O1 n/ A2 \. {$ o' }
    游戏重启, 但不重新载入ROM
, p2 H0 l0 {) t' C+ s+ w# ]! G9 K# l* h  q- m. W- G0 C6 p
    hardreset& P9 H* r- _/ O
    游戏重启, 且重新载入ROM! O3 s/ Q& _' t
9 X5 _3 b4 Q1 P* \) T
    snap xxx.png3 t1 }  N4 m8 L! ~9 b& {! U
    截图为xxx.png
% A9 h: W; B& v) d+ U; `: S" E7 B9 r" R! \" _9 D3 g6 a, l8 v
  ' Y* C% j% e( O3 d7 R0 r
  
/ q; c2 k4 x! q: ~  
  X+ z  e/ [( ?: O* U热键:
0 f+ |' R: Q3 ?% E+ }    ~ 中断游戏
, a' r$ Q- {) r1 R9 s; G    F5 运行游戏- d  {* ~9 A8 j+ B1 i
    F12 运行游戏且隐藏调试窗口
+ i$ a$ |9 K3 Y, I3 ?# Y5 }    F11 步入, 单步执行, 会进入子程序
4 m4 x2 K& v) w$ G- j    F10 步过, 单步执行, 不会进入子程序
/ P& @. U4 c8 Z/ ~7 Q$ I    Shift+F11 执行到子程序返回
1 U$ U7 n) m6 D2 K# e" p    Ctrl+M 内存浏览窗口
- Y+ c, {' \0 g" ~    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ k( Z3 X/ j5 n" j& P
- A7 n, s# g/ W  A{:4_94:} 7 X3 d  c, c5 E; C

" @- H1 b9 r3 L8 p9 [9 b

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
2 h# O! l! q- ^2 L- u) T2 f( u: H& C
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 k: x% a: i6 O' a
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-7 15:24 , Processed in 1.076172 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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