EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
9 a# {7 @5 i& X  j
很快速的整理我自己常用的指令
6 L2 S; w, s9 l8 v* K4 k' `
; _. z" \( F' B. l& M; v' n* E) m{:4_112:} 9 [: ?" H9 d9 E& q
2 e5 f) D! z4 u2 R( }
MAME DEBUG常用指令
/ m' {' Q6 B/ e; Z$ L2 D8 v0 Y( F$ Y
内存搜寻: ci, cn, cl. T. `# c8 \$ {* h) L  j

6 \5 s$ z/ X% r' Y) n* O* k    ci1 @" l: G9 H" K
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* k, D* i0 P# J: z8 C1 J3 _, L, o: B+ D8 A# Z) l
    cn
& D+ Q1 a! _% |    搜寻指令, @6 s* b, g; v' t/ F
    例子:* }! j+ @# P2 F& t
    cn eq,60: p7 Q$ s5 w9 a9 R7 `
    搜寻目标等于60 (十六进制)9 W% l' D  Y) k' \
        
8 S* n- |: h0 |$ U8 v" Y    cn eq,#96) {& ^/ }" h7 o' ]% B4 Z
    搜寻目标等于96 (十进制)
  Y* f& t0 q0 @. Q2 {: k) d
1 ^6 u' M1 Y0 @8 y    cn eq
" F7 i! [  _2 b. G$ x    搜寻目标的数值没有变化; A4 Q, j# e  Z" n0 X
( D' Z  z* l. s, ?$ B
    cn ne2 |2 G. f6 ?0 N0 j8 e; e
    搜寻目标的数值有变化
9 F) N; F$ L1 C" E( S! ?        
9 c1 n" k" A8 S5 `9 y9 j6 _3 }    cn ++ A9 {, l  w; z; x' O& r
    搜寻目标的数值增加9 n. L: ^9 }6 ~6 L8 F' P0 E8 U2 @8 Z
   
# z' e0 W& q% s9 J% W' ?; X    cn -
. ^/ A* y" P$ p9 Q  @& E    搜寻目标的数值减少
: T( T6 T! s$ M# F        7 {  h1 W/ j# F# b% U  w) ~8 y
    cn +,3% K8 T; ~/ \0 h% g0 i9 Z0 a
    搜寻目标的数值增加3 (十六进制)9 ?2 ]; N3 p6 Z1 G
# @* u. Z7 J: A0 b1 R% n/ m
    cl
- W# d9 {2 @5 B  T    列出所有搜寻结果9 x; E9 O, @) B" u: {4 T
1 d# k& [& x. `9 P
    cl xxx.txt# e$ l2 V/ q) W/ p
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 J* c+ m: K" y1 t* p4 j- |- ?
# S# I. n1 D) }
   
) D2 ?$ a* x% t$ c* d& d6 W内存监视点指令: wp, wplist, wpclear) R3 R, R6 M* Z; T, w& N( v
    例子:& _7 W( Q, c, L; a/ a
    wp 1234,1,r
+ e8 q  W2 j- {" n      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. {' ^1 I) j! ]& H5 g9 p+ a7 z; X! h( L* |8 g
    wp 1234,2,w! D4 T1 r5 O; t" `7 H
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 }& O- M! `- K0 y( ~
     2 I* C  M+ q* j5 W$ C
    wp 1234,6,rw! p4 o( d8 A2 L4 l  T) D
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6  q4 L$ h6 w  j- C

: M! W7 Q. g8 e% d    wp 23456,a,w,wpdata == 1
( l/ N; p: w: r  ?* ]      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) _% C: c7 |( w0 P8 m$ d; m; U, w, y6 c6 x
    wplist& {- D% u! R4 w7 y
      列出所有监视点$ R& ?3 t4 a$ \: j8 ^$ a' I1 V

  `2 U* j: `* \) ^3 D0 w    wpclear 3
7 v6 A7 r/ x; d# v/ F      删除编号3的监视点0 _: {" c- [8 z1 {
4 R/ J1 T% W: b7 l# f7 ?
    wpclear
+ u) q) Z  D4 B9 O) F. l. U1 \      删除所有监视点
+ h$ |' ?* W, V* W. m& }5 t. _" j6 Y" b
      . g% S$ S! y' L  v

# T5 ]& d; H% @( X8 q' _程序断点指令: bp, bplist, bpclear
: R( |& @, t% {- q    例子:% F6 {2 G: B. S) a$ C
    bp 12349 }- g3 l6 q  y* a* U
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断; p) Z' [" [6 i7 i# |2 a# j' y

5 y# Z' M, y4 l; P    bp 23456,a0 == 0 && a1 == 0* ?+ D. l1 U* n+ _& U7 b& R( }4 M6 E
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' x0 g9 T$ C) @- G1 f
9 ~1 N* M1 A8 \8 o9 \9 L/ N, h    bplist
9 {, m1 B# s* n2 H      列出所有断点
* M+ R+ Y, y7 Q# b
) B' V$ G3 x! S, b/ R    bpclear 3
' E- V6 U( R& P4 }      删除编号3的断点
0 [  R( a7 x9 {3 |; m) M2 e% l2 r* X1 c9 }
    bpclear& `3 w* Y2 I) i1 J% L: b) e' g
      删除所有断点( K9 k9 B& B0 O2 ^+ k5 V9 v
6 i# j  R# J& }! E6 t7 M4 Q8 z2 w
      
. p! n0 D8 ~& m      3 c3 }+ O8 Y+ u$ J5 W+ i  |
跟蹤紀錄指令: trace! O8 b* I6 k5 {: I. h, H( P
    例子:# e4 w/ @/ B. q0 n# l1 r
    trace 01.txt! D- y2 p3 D; c- P% d& F/ ]
    跟踪当前CPU运行的所有代码, 输出至文件01.txt+ Z! n$ ~- o  I+ ~9 {

" f8 ~  g6 V- T9 G7 @" h    trace off" z' m. ]) M3 \) j5 x; K
    停止跟踪, 并且关闭文件, q5 o  c7 v. h- u' e3 t
% h- U) l; L( F5 O9 D5 p
    trace 01.txt,0
) Y2 G; ~+ h/ d# @. z: X% O5 q    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# }5 N! A: A$ ^) C! ?8 ~; o4 q5 N, n+ ]+ j1 n
    trace off,0# b" `. y9 ]! u: Y
    停止跟踪编号为0的CPU, 并且关闭文件' l& ?6 Z$ {! o. s, K' b

9 R( w% K, x. r8 i    trace 01.txt,0,{tracelog "A=%02X ",a}
* O7 q) f2 q+ I3 f% ^4 {    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 U3 w) I3 n' a    并且在每一行的前面, 写上"A=a "2 U: ^" l2 Y  |1 m0 _
    "A=%02X ",a为一个C语言printf函数常用的输出格式+ a7 `  }+ T8 g8 I: q9 L2 i
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
8 D, p) i( u, z/ F: j    X表示为大写十六进制数
& f  \, C0 `9 R; M- H1 {: h7 S3 |5 v2 J

8 [' N, [# Z) m7 d/ ?
; I; ?, D! s, L4 Z内存直接写入指令: maincpu8 T9 O8 c3 H6 V9 n
    格式为 maincpu.[][]@地址=数据; w! Y+ d, y. y" m
    第一个[]:
2 C  n3 l& }1 M1 `; A1 O    o 表示ROM地址
; _4 l9 W1 v' g3 D    p 表示RAM地址  l" m0 V% H* J7 ]: _

2 [6 a2 b) D* l3 x# K. p7 k    第二个[]:8 x, e& j. ^8 ~$ N3 L1 v7 ~
    d 表示4字节( k# q* e( o2 Z, q$ L2 p
    w 表示2字节7 V# G' p6 i7 |
    b 表示1字节, U# G* D* ]4 Q! e4 a
  Q4 z( \# x) N) Y
    例子:2 W2 {" C5 _2 n* u: z# c5 L
    maincpu.ob@1234=FF+ Q5 e4 Z9 H, M, W' D
    在ROM地址1234处, 写入FF一个字节0 k7 U7 t" y) a. k

: r8 R2 J( ~) g& l5 G) j    maincpu.ow@1234=4E71
1 L: O& F. \' v. U    在ROM地址1234处, 写入4E 71两个字节
. {4 @9 T1 K( \, Y* K# y! M% W1 D6 v
7 f1 z' ]% N7 e: g# b8 [) K    maincpu.od@1234=600A4E71
( r* o5 M# {  N7 N2 G2 j6 O    在ROM地址1234处, 写入60 0A 4E 71四个字节$ y! p9 [9 O  z  e( l- f5 d& q

: F" Q& E5 h4 Y    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
* b9 y% Q. M; ]+ u* W( r    1 L  M  e0 h( G- b4 }, m: W

8 ~- I! n) m1 R/ y: Z1 D" A其他:/ `: ?8 V% J1 {* x
    dasm 输出档案名,地址,长度. J# b5 |6 X! v1 @9 f$ y. J
    输出程序的反汇编代码
0 i- {7 o- \+ [. ]    例子:3 ?$ U1 i! w5 I, [! L9 \
    dasm 01.txt,0,100000
+ L5 n8 ?& b! `6 V    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt: ^2 X( z/ j: S) P  C

+ c" K+ u5 Q6 O! E1 l" |) P    softreset; i3 A9 V5 Z8 L. M4 b- ~
    游戏重启, 但不重新载入ROM' f5 z: Z; H( D* J, H

3 C8 Z. E$ z  \    hardreset+ [, X, H+ g1 ]- }' \/ G' g, J
    游戏重启, 且重新载入ROM
  Q% e2 J1 u$ q& Q5 H; D
* V, Y/ ]- _9 W% N* ?0 I    snap xxx.png7 \8 K" g5 g  |. `
    截图为xxx.png
2 w2 x5 \% t5 z% A8 y1 Z+ Q
# n9 I* T4 s2 r5 U  
' E: P# C& Y5 x  G" A  T4 J  5 z" ^6 Q3 b' L' f, e1 z
  : p4 Q# ?( Y0 S
热键:* B/ `) ^5 T& e$ A2 Z" F+ d5 \
    ~ 中断游戏* O0 K; U3 c6 `. A1 J- e. y2 \
    F5 运行游戏
- }5 C% a) K) o# K    F12 运行游戏且隐藏调试窗口5 q) b8 p. t, I
    F11 步入, 单步执行, 会进入子程序
1 p+ S2 G7 c) u, g+ K* D    F10 步过, 单步执行, 不会进入子程序
4 Q- _6 j4 v7 F4 l    Shift+F11 执行到子程序返回
  h) e  i3 W  E* R' o    Ctrl+M 内存浏览窗口# e. Y- g  P# i7 J
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! a0 B- S: N  d5 ?) S
& b1 [& S; k! f/ u. s9 t) M; o{:4_94:}
2 a" a& C0 [3 |4 ^' C' R0 [7 s' @; _0 t6 c$ p  I

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( @' f3 L9 t3 y7 H. T) b
) }! X, A6 ^$ V4 [% T& u
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 | 显示全部楼层
要详细些的东东
( t: {4 H' f& M1 D. J# j11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-4 21:52 , Processed in 1.361328 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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