EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

# s( G" g- @  ?& N+ Q很快速的整理我自己常用的指令; C7 z3 L1 T( a

- \- w5 Z( Z1 `{:4_112:} : g( {! V6 v5 D& m

# v" j6 m8 G' x3 N4 B% VMAME DEBUG常用指令
2 H% K( k  `+ w7 |0 G9 g  G: V
" s% b, m4 J0 G' c内存搜寻: ci, cn, cl) f- l2 I5 _, J0 ~
0 }4 `* n( k- y4 J
    ci( Y& U1 p. b! S6 R
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令: l1 ^/ {2 K0 j& ~5 }
  T# e! g0 y  l
    cn: o, L2 @; \7 J+ `
    搜寻指令& ^! G- I# Y: a, F: [
    例子:
- r" n6 _4 K0 F! K( X    cn eq,609 f% h3 }6 K% q1 @( ^# c
    搜寻目标等于60 (十六进制)
- q. A+ J: [' _9 h+ ?" G        
3 _0 V# C0 `7 V# h, E8 ~' G    cn eq,#963 D6 s: ?; K9 k
    搜寻目标等于96 (十进制); V- B  ]" t( l5 @% c

2 y0 i+ O8 @( [& A    cn eq3 U0 R" ]4 |; A; H
    搜寻目标的数值没有变化
( J. z8 [5 E" d- }8 Y2 V1 r6 g' H1 S. |9 w7 N  i- s
    cn ne1 ]* T9 o' w$ |% _: L7 L. A
    搜寻目标的数值有变化
) `) R, e" V( c" z. @        % _* p: `' q) W7 ?; s" R
    cn +
$ X0 a) ?# @! S; Q7 X5 e( O    搜寻目标的数值增加& N# j& h# [% H7 x3 V, n& b9 @
   
) }/ G8 \0 S$ V) i3 G( r& P6 S    cn -
0 [4 t1 A$ o$ m- b  M% W# V    搜寻目标的数值减少+ r( g6 y# }% A! Q7 g
        
; [7 q  |: D- g8 t6 ]5 {. w# [    cn +,3
0 c+ o+ Q( G/ j" C/ C* v+ M    搜寻目标的数值增加3 (十六进制)' C: G( Z. O* q% q

' [; d  |; S; H8 @    cl' \* o6 W2 }: N& J" B0 u
    列出所有搜寻结果% R' x: r; g' q* \' M) D
, s0 t3 P8 R: g& F. R, v' I
    cl xxx.txt. Q5 x+ W$ m# t- _
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式# }; M4 P% w, j8 }% l& U

6 t1 _% I8 Z0 c  @: O( t! ]# O      \$ J) ^! y$ h8 x7 c# O! i$ C+ ]
内存监视点指令: wp, wplist, wpclear
: o5 a; r4 d4 j    例子:: Z, a* R' ~  \; U5 d5 T
    wp 1234,1,r9 m3 v' ^4 A7 K+ U9 ]9 r+ X; G
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 Y5 A2 O/ t8 ~: {0 ~
2 M# C+ H7 p2 l& x    wp 1234,2,w) W0 g. [; P+ Z, h+ H8 m: w; \
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' m( G0 G$ W' {* j     / M6 v9 R* L  K" _! z
    wp 1234,6,rw' I: g! S7 p. \. L( u: e5 j) T
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) [1 L6 X1 d# D) \* D' z2 r

" ]& f5 X8 ?2 z. {  k& I    wp 23456,a,w,wpdata == 1
) M5 q+ x  w* q% r1 k, J+ o      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- w- o) q' I1 N$ C+ d
& t( w/ R; N$ T. @/ b
    wplist' u* k) o+ X8 b0 v/ L
      列出所有监视点0 O' |6 U4 j7 }2 \
$ ^' ~5 |$ u" c( t5 T
    wpclear 3
* z# F6 `  m$ |9 r; V2 j" u" R      删除编号3的监视点
4 A- h8 q+ }- e) i; g/ P: s3 Q! u( x, o" m6 i  @- J& `6 ]
    wpclear% O. Q" p1 _$ `
      删除所有监视点7 }4 ?. \9 R/ ~& o4 x5 I- I; R7 K
7 I6 H% q+ o5 B" P9 `% o0 M) |1 j
      0 B8 h5 ^8 H  F7 X% g8 Q
; x9 M) g$ o- T1 F5 G) O
程序断点指令: bp, bplist, bpclear
, I, q4 }3 \# T( d2 X    例子:/ P# G$ k$ b) z7 I
    bp 1234
. e+ A4 ]. v3 V, `% u      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- m# z4 N8 j$ |% }& A& r3 |% C/ T/ r, f$ ~7 }2 P* Y" I5 n1 E
    bp 23456,a0 == 0 && a1 == 0
  M0 [8 z% n/ K8 ]7 O1 G: i      在地址23456下断, 且中断条件为a0等于0以及a1等于0
; [- r* e& t( ]/ B) X! q4 P- F' J5 v% z5 A4 G' }
    bplist
5 d; c  [7 _( V; P! V( I      列出所有断点4 L  x7 ?/ H8 T9 C3 h

7 f6 W, T! r- R* _6 m    bpclear 3
2 ], Y2 i$ Y4 u( l: T. n1 L      删除编号3的断点
% \+ H1 @7 W' x; k
9 ^' E, ^7 P9 |  d! ?. C7 L; x    bpclear
; c& I( U6 G+ }# V$ f) j! \      删除所有断点2 f0 U. h& o  L- U% e6 e, t0 H4 i

; E5 t. F, f' k- S& A      
- a& H0 f# j- X' Q$ `9 ?' {      
& Q+ k  P: V+ `* j* V1 M8 J跟蹤紀錄指令: trace
' ^& ]0 u7 H6 A: E4 L# {3 _, F) E    例子:6 w% [5 c% |: ~9 v6 L6 l
    trace 01.txt0 B% `( g3 j$ j& j2 ]
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 o7 C( t% s( T1 O8 [% |, G2 s5 c- F
    trace off) b( `9 `; z; R' e0 i3 p/ ^* o  M
    停止跟踪, 并且关闭文件
: v9 Y# `. b5 ]8 _+ _
7 C( i% M% F) R; f" ^& j0 e4 M    trace 01.txt,0
" m3 I5 j6 H+ x' l    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. B6 E! H  P: r. r. y
3 X0 N& e) T5 s& c& }8 D
    trace off,0
$ S5 }5 `# O: O9 g/ g    停止跟踪编号为0的CPU, 并且关闭文件/ Q$ L( L$ g+ V& _' ]

9 q/ @2 N9 \/ l  s- d6 x    trace 01.txt,0,{tracelog "A=%02X ",a}
8 E; ]  O3 C) p* p5 \# [    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 6 z' T/ S* |: ]- F/ D% @/ Z7 R
    并且在每一行的前面, 写上"A=a "1 K$ p# m/ {& J" Y; ^* X% T- g6 ~
    "A=%02X ",a为一个C语言printf函数常用的输出格式9 t' W; x3 j/ d; a" ^& F
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, E# W* h: I* D5 V; A    X表示为大写十六进制数+ e1 v' M" R# ^* F, `- Z

4 h5 T9 {% Z8 p+ s0 r5 }( w4 K3 K7 {$ J1 q  `- Q2 P% M
  s, |* z5 @4 t& t1 j
内存直接写入指令: maincpu
' O: k/ I, X* ]/ m; H2 o; p" D1 n    格式为 maincpu.[][]@地址=数据* A0 v" f) \4 P1 v# d8 L) M: z
    第一个[]:3 b" p! H- j" A+ ^2 M& C1 {5 ^
    o 表示ROM地址
9 r/ a1 G$ b  ?2 ~    p 表示RAM地址. E% G2 A2 l  d  j" O  H# q

+ [/ Y' N9 g/ ?4 [, k8 z    第二个[]:
: O5 B; a$ R0 e0 t! {    d 表示4字节
- C7 q" @9 {7 ^    w 表示2字节
5 x' E. X0 }: m+ m* W6 V8 L. `7 n$ ^6 m    b 表示1字节& @+ ?% [  S0 Q. V0 W
$ y: w6 h5 K$ d3 K$ ^  [
    例子:
5 ~1 Y* Z- Y% V- q# ~' ?    maincpu.ob@1234=FF  x* y% E! @  d* E# w$ w7 ^
    在ROM地址1234处, 写入FF一个字节
% u1 J) O  _8 m& b( M. p) @/ U" ^1 ], Y" q+ C% V
    maincpu.ow@1234=4E716 ~1 }' P2 R8 N9 x  A
    在ROM地址1234处, 写入4E 71两个字节
) N. |- J2 V; D
( ?. {" n2 h$ q0 a    maincpu.od@1234=600A4E71
$ v( Y* w. }8 \/ [    在ROM地址1234处, 写入60 0A 4E 71四个字节
2 F* Z9 C7 H& l# ^& {% o& i+ s& ~  K* v3 o; e5 S7 ~. E  \; G
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 f# i+ v6 x3 g   
& a  g* A" z% N0 X# i7 v1 `8 z& U5 L- g+ u
其他:- v  W  ^+ E& D. _4 p9 E
    dasm 输出档案名,地址,长度, w* j! v, q$ B# @9 V
    输出程序的反汇编代码
* H' `& u/ p% x9 g% u    例子:7 S* h. |1 j. o2 Q5 H8 `* {
    dasm 01.txt,0,100000% C1 W* f! U" n& e  }
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 D6 M) m0 D! f% |. K

/ h3 I2 D, h, b$ w  }    softreset
3 h. q1 }" q6 \* b9 l6 h    游戏重启, 但不重新载入ROM; U2 ?8 W& z' |( M

+ S  {: d: b$ d* \    hardreset
; f  E2 }  a: D$ |0 R7 o# Q    游戏重启, 且重新载入ROM8 P- Y9 Q0 I7 J
! r0 N! F: ~& m" P4 v& m5 I& X$ ^% {# R9 e
    snap xxx.png
2 Q8 k; A* p5 {+ @1 i  n    截图为xxx.png
$ N5 @# A  b) y9 T
. @8 z& o- d, Y4 w+ [9 G  1 [+ Q8 Z0 \" ^4 ?: @) T- W) n
  ( f5 q" I) h, _, a1 a5 A6 A7 w" O
  - e( k. P' P+ j3 i. p3 [
热键:. h* n" X3 K1 a% O0 h+ W$ ~& ?5 ^
    ~ 中断游戏
) _5 {9 N% f) Q9 n    F5 运行游戏
" j& v" }$ R4 J: y    F12 运行游戏且隐藏调试窗口
7 y# ~& @3 f# H0 u6 e1 v# j    F11 步入, 单步执行, 会进入子程序2 P3 F  U% _' Q: Y' L/ T
    F10 步过, 单步执行, 不会进入子程序
) J7 |) o  J4 A& ~; V- g/ @4 C( l  M    Shift+F11 执行到子程序返回' l; x; ~" [! `  N" t
    Ctrl+M 内存浏览窗口
& j9 g4 i# k& T1 [. y* T    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ S/ O' Q% F9 f: d$ |# f* k" ^+ r/ i: t2 F* i2 o6 M
{:4_94:}
* f, H- c8 s4 X/ D$ y9 @; u" o
. B: [. q" O# f8 ]& N  s/ G

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 F$ V; f% R- m: J# T4 ~8 `9 P3 e/ ?( l- K
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 [* A! ]: N. n5 \) {5 c
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-13 07:51 , Processed in 1.182617 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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