EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

1 O& A  i$ u. F, g' O很快速的整理我自己常用的指令. m3 _  z) }! Z$ o0 h
$ y6 X" l6 G' w! }0 _) j0 X
{:4_112:}
* P' a; L" h) Q; |2 a1 k
+ d; z5 P; g' \- YMAME DEBUG常用指令
  ?3 @6 V$ S; v$ I
* {7 F8 U! T) \0 V/ Y  B内存搜寻: ci, cn, cl, {- ]  A' A0 V6 {

6 a& w( ]8 i! m4 p    ci& Y* s! |: M) i( g0 T9 F
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令# u" @/ C5 H9 B( ?& X
5 N; t5 r! Y. K. u1 ~! k
    cn
" }" k+ I; _' L8 q1 s, ~# W    搜寻指令0 E5 {2 c0 O8 Z
    例子:/ \8 A8 ?! L' l' p, P/ _
    cn eq,60
$ T& k( s! D( O    搜寻目标等于60 (十六进制)- s3 D8 X1 p/ Y3 x, p- f9 h; j
        
* l& e5 Y- v* @* i    cn eq,#96
  w3 V* F4 O" X+ C2 R8 T2 [    搜寻目标等于96 (十进制)8 f, H3 Y- A* m: }( ^) F
6 j% v! k' j8 x+ |0 {. f6 O2 s
    cn eq
9 Y$ U3 O/ H" g% n  y4 c6 e0 n    搜寻目标的数值没有变化$ Z. t( W+ h8 c

& r6 h7 {; Z2 J" e    cn ne2 Y7 |! u! Q. c
    搜寻目标的数值有变化
7 ~" V9 q! {0 N8 {2 e; B) ^5 _        1 V4 }# S. K: B! l& u  L* x
    cn +! C* i9 l( J" R
    搜寻目标的数值增加
8 I- F8 j7 R4 i4 l# _    + c, o& `3 h' j" k6 B/ M6 w
    cn -, G7 I1 k- G) A( J; B4 C
    搜寻目标的数值减少+ F- w5 @; Q. F; M, y
        2 D. J9 @) @& S7 M
    cn +,3
& I4 ?/ Q  p% h# j( O9 ~7 ?    搜寻目标的数值增加3 (十六进制): {4 a1 f6 V; J( Y6 f, Y, H) F
$ D0 r- v7 S' l, R/ _  `5 u
    cl! d' P; s9 ?- L! s
    列出所有搜寻结果- E! z( Z6 v1 ?6 V
# v! U: F2 H8 @* E
    cl xxx.txt
: a  b8 m1 O6 d0 y3 `1 b4 ]& D    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# V; ]. q; V( }! G' Q6 a) x9 U+ l: O% S4 m3 [9 e
    9 J1 i$ Q/ H. c, X
内存监视点指令: wp, wplist, wpclear
. B3 r4 {8 Y- g- _: v    例子:
  P- |: n9 C9 q! M% ?$ m    wp 1234,1,r
* \! ^  }' @1 M) G5 O' S      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1, r! b) u) f) X5 o6 t2 v
4 J; \; k: ]3 \& P+ F  _! e
    wp 1234,2,w
9 {$ ?, |: g( N9 M+ `# }      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
, [: y5 D: v# R       i: B8 k+ j: W( Z
    wp 1234,6,rw+ V: I# b8 O* p2 j, m
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ L8 z& ?9 z0 |0 r" X* @! L

" m! X0 `8 n( I" D  K  x8 `    wp 23456,a,w,wpdata == 17 e; n4 \% h  W  x
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 b2 Y& w: k" d' P  m: ^. h2 L* x* E( M

5 j3 \& F; G& K+ g  i* \" s    wplist/ E5 {4 A; _! h- p
      列出所有监视点
" y9 y% O5 a4 i. ]& J- V. I. u3 B0 w9 r5 O) G! T! S: G
    wpclear 31 b# v# E" x* j3 C' K+ D" |
      删除编号3的监视点! S( b; G/ _% U

$ Q* l6 O% E. d- k/ p0 _9 [    wpclear. a9 `3 W6 q: J9 m- M
      删除所有监视点$ Q0 C. @, Z% T7 n

) s! z2 X1 |2 }, H! F      # ^: H( T2 s/ z/ r5 X6 v2 d3 Y
" s6 X* p2 R5 m3 D, I6 d
程序断点指令: bp, bplist, bpclear
  W  E8 v0 l3 a9 u) [' Z% K    例子:6 b# L9 r& h( y# ?; \1 ?9 z
    bp 1234$ F' K# |6 c7 l: Y
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 i7 O# u$ b( Q2 Z3 j4 u- I! i* u5 O! \2 K+ L5 O; |
    bp 23456,a0 == 0 && a1 == 0
1 r; A4 T* B7 S1 J! j      在地址23456下断, 且中断条件为a0等于0以及a1等于0& g2 Y* T- s" C. ?: O8 I: |

5 ]* p& m- f4 I' Z  @    bplist/ u+ `! o& ]4 D# ]
      列出所有断点
  l* G; c1 J! U6 ?& c1 H
4 Z# r/ d: t5 k4 D$ P  X    bpclear 3# Z7 @  i2 t  x3 j" |
      删除编号3的断点
0 a$ @: U- q1 ]- A& y7 [+ _
2 s. g7 r  V5 f0 O    bpclear
* G4 j1 D. \: q6 z6 e; x- o      删除所有断点
- i9 V9 N! w, N) h$ \, W) \& |, O- S' h, e3 e5 `6 q
      
! b% w  b/ _% x( h, R- I      & ]! L2 @- N# M& l- ^
跟蹤紀錄指令: trace
4 d( m4 F+ j; g. p* `& }/ {    例子:" R/ z/ h1 F5 G5 {5 r/ i# N1 Y
    trace 01.txt2 F" ^  V4 @5 E  ]) S- Z( Y6 m7 h
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
( T( U# W% P) w2 s, u$ m( \6 a4 R) s2 Y
    trace off+ w# Q# x+ N$ Y! m4 V
    停止跟踪, 并且关闭文件/ f+ y( ]3 _7 R, B
$ W3 K8 Y1 ~6 v9 I* ^6 X( d
    trace 01.txt,0& g4 q4 j. Q4 G$ w* y+ h
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 s2 ^' [1 A1 l1 w- \3 a
; Z, x0 E- n8 Z, j% M7 ^/ K    trace off,0) y! I. U! E. Y( u6 d9 r9 a
    停止跟踪编号为0的CPU, 并且关闭文件
1 ]/ C3 Z; U/ x3 ~
2 w6 C2 z3 Z% F  H9 b8 b& F0 d    trace 01.txt,0,{tracelog "A=%02X ",a}+ w$ a  y! s( {2 t, X( |! M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# O1 O) k/ t3 z9 p    并且在每一行的前面, 写上"A=a "3 z; G, o, p; ?$ i: w" w
    "A=%02X ",a为一个C语言printf函数常用的输出格式
2 H8 G) }. i# p$ C8 }" r    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, ^4 L9 A/ S5 X# d2 I" L    X表示为大写十六进制数- N4 M& [" t- q# C

& M0 I5 i7 t. Z; _
/ s) |/ Q& O+ q# i" l' W. j. ^5 Q" T) ^  _- Y
内存直接写入指令: maincpu- {5 S, J& g3 O
    格式为 maincpu.[][]@地址=数据4 E: f* e1 d3 J; G) D
    第一个[]:
  L: [2 Y' t- K    o 表示ROM地址
' y# W8 s4 e, a: t    p 表示RAM地址
# ]& h  q) W9 m/ x2 ^2 e9 u" R/ J: m! L: x" m$ o
    第二个[]:1 @/ E* y- D  x. m3 ]# K
    d 表示4字节8 p* K# G  I6 T4 q4 g) k0 y8 n0 m
    w 表示2字节. P3 d: i% x1 h7 u- o1 _% C
    b 表示1字节
1 O. l9 L" Q7 ?! [  d1 d4 X6 ?9 L" X% |: @$ g
    例子:* N. {8 R# J4 m; W
    maincpu.ob@1234=FF) O( t+ P+ p. }7 s
    在ROM地址1234处, 写入FF一个字节
  s! c4 O7 b! W2 z
9 t/ s* a" x0 P. h1 ?    maincpu.ow@1234=4E711 j8 t; D6 \+ k8 z' }/ C# V  z
    在ROM地址1234处, 写入4E 71两个字节* f' ]* ~; F: n- }2 E

, e" D$ S1 X+ g" O& ~1 ]# e* B    maincpu.od@1234=600A4E71
4 {+ i# D" H) i7 R% W+ ~    在ROM地址1234处, 写入60 0A 4E 71四个字节
8 k, }. q5 `; O1 I. b) Y8 G' \5 ^/ J
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ O$ t7 m: ?  A; \& h    2 t6 [+ r/ X- ~

8 P/ v% T- _# e9 t! Z其他:
; o$ X9 ]/ R, W' C+ \2 _' K    dasm 输出档案名,地址,长度0 z' i' i& h% N& `2 j* E4 j
    输出程序的反汇编代码
; ?* a  r) W6 q% _7 z    例子:
! C2 {( d6 h  U" w4 W" g) p* V4 m    dasm 01.txt,0,100000
! v" e  h2 R% q. ^0 R' f: R) }8 w    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; N2 j. }( p  F& m) b6 o
) A: m* e. n( W3 Z0 I7 M
    softreset& f9 Y! P& U6 ?& e( V# ^- L
    游戏重启, 但不重新载入ROM' J6 ], v( f( f: u& |: o

, z( B7 ]1 |' H6 Q    hardreset
: a9 ~; A4 x' G' {+ M& _" ?    游戏重启, 且重新载入ROM
# C: g  L3 Q  a( `8 j- d& l. L% l9 D) R: W
    snap xxx.png
& S6 d* S$ e2 V+ t    截图为xxx.png
) a' M: s/ t) K4 @& z0 k# }7 E  K3 g
  ' o% p; U/ J$ @
  / M7 S8 b5 e& V' P. P
  3 ]7 B( M3 f$ b' ^' E
热键:) _  ^' W8 ?5 M) V) H
    ~ 中断游戏
" ?& ^% m% u) v2 X9 d1 \2 b) {    F5 运行游戏
6 m) N* K" J' y  \5 ~  h    F12 运行游戏且隐藏调试窗口( O1 J" O& N2 C2 f
    F11 步入, 单步执行, 会进入子程序8 X% S+ P7 v1 y& q
    F10 步过, 单步执行, 不会进入子程序
9 Z  m7 ?0 v- \    Shift+F11 执行到子程序返回1 F3 z4 ^9 V! x2 I
    Ctrl+M 内存浏览窗口. |+ f3 a/ w; I8 R; e; v8 v3 s  N
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% F8 y5 a! a& v4 n5 T9 {% X2 C3 r

/ [, r% g: t3 ~: l9 s7 ]+ M{:4_94:}
8 P: k: N8 f8 j4 S  ], P
. _! T0 f! H. z, S

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2579 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
. ^1 G7 ~6 U" _  q* t! G! y' z' S7 r
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 | 显示全部楼层
要详细些的东东& s$ F# [3 o$ E! K* c# S$ w
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-9 00:44 , Processed in 1.078125 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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