EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

; i# q' R2 _! \( S2 A很快速的整理我自己常用的指令
& Y9 u2 g8 x4 @( n9 `, T3 n! I5 o6 [, Z, W  I
{:4_112:}
  x1 E. F. Y% [- W6 F/ t8 a; R: n+ b# h- a/ Q" u
MAME DEBUG常用指令
0 ?0 M; q, h5 p9 k2 w7 U. |8 U0 ?' ?; o
内存搜寻: ci, cn, cl- O  i: H3 ]( |; W9 R
$ z6 W" c  w: ?$ f7 O- {7 C" X
    ci$ v5 E8 _4 [3 `
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令. W' Q6 j. {# D. A9 ~
$ w" q9 s. B: Y' u2 z8 `& M
    cn
0 c0 z% ^" J" x. B+ Z  T    搜寻指令$ t( \) {' J6 o) u+ K9 `+ _
    例子:. j7 c( H) i) i% h# F* j2 L6 D
    cn eq,60
5 z% l  b, }6 f    搜寻目标等于60 (十六进制)4 E* B+ Y/ O9 s( S
        & E) l$ o/ p4 p( H
    cn eq,#96
- b9 W8 s) L; e    搜寻目标等于96 (十进制)3 d0 C. b/ l5 |3 i  Y! ~
$ I0 j" B7 |  w. X6 ^
    cn eq4 E$ o9 z8 }0 X$ Z" a, I3 g2 [9 J
    搜寻目标的数值没有变化- X; u8 o9 u* f# K

! L6 L7 z) j9 H/ |2 O    cn ne
: W% P4 Z. j3 Z* N    搜寻目标的数值有变化, x" B0 x+ v: e# q' G5 K
        
& L# D  S7 M" B. Y1 @    cn +
( R! Q" b: n; A- J9 H  h4 V! x    搜寻目标的数值增加( X5 C4 J, _  L3 p2 X
   
. O, s* m6 D. G8 ~/ S' K  e    cn -8 Y0 p6 v% u. n) R) Q9 f( _; i
    搜寻目标的数值减少
& g0 O4 P2 q5 v, k% q4 d3 G        0 ]0 k3 I4 F$ P; {; h9 R: t
    cn +,32 A2 z9 T4 v* \" @1 B( ~. g7 |  \
    搜寻目标的数值增加3 (十六进制)9 [& B; J) d! M" w# Q/ x0 C2 F

1 ^( Z" \1 N" [: c6 U' y" d    cl. G  E& d* L/ t# }5 L: x
    列出所有搜寻结果5 X& r9 u6 m( p! T) Q
) p( ~. t0 ]) x' z$ T
    cl xxx.txt) j7 H8 ~- Z" h4 P0 l. l2 S
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) J- ]/ o) d) }5 r+ l5 Z9 }7 a* E, z! \
   
1 U/ l- W, {1 Y内存监视点指令: wp, wplist, wpclear  t, `, [/ T/ C3 |. T) |0 V: f
    例子:
9 ?  G, i" x4 K# g. g4 v    wp 1234,1,r
5 \. X" o& m6 n1 ~. u0 w      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# A/ Q2 z5 q5 U1 m4 h/ }& j2 ^2 N; ~! p' x6 p7 l$ I+ Y8 M# Q# o6 K: e
    wp 1234,2,w
" s. p  X3 [) V  a0 c" l      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度27 i2 u# A3 O7 Y! |
     
# ~- P5 V2 L9 U$ R5 z+ h0 |    wp 1234,6,rw
2 |. M* n6 a: j2 Q      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 U& {/ s* h3 \* a1 {
0 ?& i. q# v9 c) E    wp 23456,a,w,wpdata == 1- A1 \6 |. K" Q6 @5 k3 f: Z
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于19 S, h6 _1 ]0 y& W; S2 U

* M4 @; X& S5 P3 p    wplist
9 m1 i  o4 [3 i: K& G) ?- H& b      列出所有监视点
# w  M# E8 R6 B  j' O! v+ i' i" }& k
    wpclear 36 d3 G2 z, l7 o  v# H
      删除编号3的监视点
3 N4 J( G1 c9 B4 b
& [1 B5 l* |8 N" s5 j) o    wpclear
! o! o: ]* m( p8 h% x6 r8 B      删除所有监视点
* G: ?; T$ Q: S1 S: g1 T9 U; L% w& t9 E4 w2 s
      4 A6 ?- h0 l; B- t
- W; {* X2 C# U, J% ?
程序断点指令: bp, bplist, bpclear
* \; d7 n' L4 Z; B    例子:
- r( _# s( j5 Y: q" i    bp 1234
( z2 H3 j/ Y: Q$ U- G9 o9 Y      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断' b3 }! [  h$ C  ^
" I' Z& E2 j# g3 w
    bp 23456,a0 == 0 && a1 == 0
+ T7 `+ a3 t* }8 j/ G# ^6 O      在地址23456下断, 且中断条件为a0等于0以及a1等于09 k. {1 h% B0 i( D( K
* i# G4 _- B$ `) `7 T4 ~) M, n
    bplist
  }, b4 h2 p7 Q7 a- T3 S      列出所有断点
; r# ^, I* x+ E' r/ G- m1 ]' R* ^; V9 C8 k  H/ A
    bpclear 38 ?1 \- J3 D, G+ I, n1 c
      删除编号3的断点
9 s2 x0 }$ |% q6 c
1 Z7 v  _8 L8 k    bpclear% _( ~5 k) j2 }9 k+ d- C! }; k& z
      删除所有断点
4 B- u1 x+ q0 H& Z; p; f4 u
! z5 C' q' F5 e2 A: Z, ?3 f5 j      
3 [& o2 V& b( Q' ^7 ~5 [' t      
  v/ R+ C5 F1 H+ }# g7 B跟蹤紀錄指令: trace
4 C, R5 K) d6 [/ D7 w5 j) E$ v    例子:
4 \0 ]% }( K' Z) Q4 M0 x! T    trace 01.txt1 Q$ W! H6 c6 Q
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
( t) x$ G  U* M( `
6 P) p' H" F* y. o" V1 c    trace off
3 H1 L$ _$ K: p- K5 {    停止跟踪, 并且关闭文件
5 Q% O- g) V3 j; s& [+ L3 {
' {5 T% f7 ~/ S9 j    trace 01.txt,02 a. m% l) D& l7 u4 S$ m4 K1 ~
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 |+ s0 ?6 u* Q0 _' B7 h( M0 B

9 ~( o: a8 u" R. U$ k0 \    trace off,0
  s3 O. ^8 }) G% P- Y* \- q" d/ f    停止跟踪编号为0的CPU, 并且关闭文件
  [& K, v; n7 ~# K6 L0 {" R
0 m; L7 m# I! h1 O    trace 01.txt,0,{tracelog "A=%02X ",a}- g, A  S6 A# E# ?3 u6 d; r
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 k( I* ^2 i: A; I+ h3 o    并且在每一行的前面, 写上"A=a "$ }3 ]. }7 l6 A
    "A=%02X ",a为一个C语言printf函数常用的输出格式2 r0 G7 S1 e8 M0 `6 a# [" d
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 c6 E: G& |# t$ [& l    X表示为大写十六进制数
3 X$ z/ H$ F8 Q! \# L
/ Q" S* T- W# b0 p
' F$ {# e* ?- G- U# v- F
7 O, ^" {- I' h; w0 m" r# O内存直接写入指令: maincpu
5 f6 }! [8 \; `8 C& p    格式为 maincpu.[][]@地址=数据3 s, O+ T# ~: L& H0 s! f1 j
    第一个[]:2 K8 x5 i: A9 F2 c! }) E
    o 表示ROM地址9 u$ D$ @. b) p+ c( ?
    p 表示RAM地址
, l" a2 l. }7 a! g! n# \5 q5 E0 Z: w; @$ e: F" R
    第二个[]:! \, ^/ x: H' j$ A* q( t
    d 表示4字节
  V9 c, |& ~4 k/ @9 C  f    w 表示2字节8 _* G0 E3 R2 N3 w  m! S
    b 表示1字节
/ J( B" I$ I8 A2 ~9 x& v: `5 H. I. a  t% v! M0 `
    例子:
4 M- M% |- a. E8 Z& j  E    maincpu.ob@1234=FF5 t, T2 V$ `0 J8 n9 `& Y
    在ROM地址1234处, 写入FF一个字节, I% \( e  P& k0 s( y

, M3 z3 V3 B2 d( w  P    maincpu.ow@1234=4E71% E" M5 u' Z& u) |& F8 ?
    在ROM地址1234处, 写入4E 71两个字节/ S' J, O2 A; B
! t! I2 m8 ~; H, I/ J0 Z+ m
    maincpu.od@1234=600A4E71
7 \) G+ O) \5 n+ f0 B/ ?$ R    在ROM地址1234处, 写入60 0A 4E 71四个字节
  }/ X* I. r* }8 a3 m9 h( n
4 {2 y1 `- P5 U7 G; z% g% Y    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写  H4 y; W* ^8 X1 ?
    + D& T9 G4 p$ ]: C
" d# p$ |- k0 W% [
其他:3 O2 @. ?1 @! C, L
    dasm 输出档案名,地址,长度
( u! ]% R) b7 _    输出程序的反汇编代码( L( P5 n. e1 u+ J) H& N  [6 J
    例子:
8 t# W5 ^5 ?" z  `$ ?' h6 ~9 {' B/ k6 {    dasm 01.txt,0,100000
1 l8 W( \& w' U$ F( X. v3 d8 L& @! X    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
  ~+ x) u. _; `# p9 d& K
+ @' o- z* |, R1 P2 a5 N" T    softreset
  {& ]! z$ |' p1 w    游戏重启, 但不重新载入ROM
* I( J3 A, N3 O  n/ T5 [
1 P+ R, L% d% H" J+ S0 [    hardreset. Z3 f1 G- ^. o2 t- O( W
    游戏重启, 且重新载入ROM
7 ?, G7 C! T5 M! i2 F& [4 Y/ K7 X# w; l4 Z0 R
    snap xxx.png$ |& M/ E) C/ M5 y" ?+ `
    截图为xxx.png
* V9 N/ G( z- S/ K# F2 M% }+ ~
) o3 l5 a+ b1 ^1 W1 P8 Z- x4 C" z  
7 `; V, m/ V5 I$ x& b  
" W& S% ?$ O$ [7 l8 J( u/ Z, i  4 l. k2 ]& Q% t8 D
热键:
! }7 |' R8 m3 f' t    ~ 中断游戏
. x; C2 z+ N" n( n' ?    F5 运行游戏
; X) ^. C. g7 L; E6 ]7 u1 ~6 l    F12 运行游戏且隐藏调试窗口
3 Z5 z5 |3 @' @2 x! d% G    F11 步入, 单步执行, 会进入子程序
( A, z4 s  n  r' @* O% y    F10 步过, 单步执行, 不会进入子程序5 R! n: V) y+ D5 L6 n
    Shift+F11 执行到子程序返回; M0 m' V: V* m- Q% N, q+ a" l
    Ctrl+M 内存浏览窗口
5 z' ?/ [; k* j: {3 |; O4 G    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: X/ ~0 A: E( o5 R* ^9 g; n7 y
{:4_94:} 4 [2 {0 o8 m6 m( X) ~

. N$ q# j* n4 T# y! Q- [& R) k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
4 S3 r! `- t" r1 l; T% F0 n, K$ q; K  S. L  P  i; C/ z
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 | 显示全部楼层
要详细些的东东. @8 x  w6 V' _) e  A
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-6 19:03 , Processed in 1.106446 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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