EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

, b' e. ^' K( L2 }很快速的整理我自己常用的指令
- x$ C8 U3 t7 x5 K0 z- E2 _
# E- T. D4 ^8 W- g/ X. w! `{:4_112:} ( p0 Y/ D* `; U4 g

4 V! `, V. \, PMAME DEBUG常用指令7 W7 K) b, n  X6 z, n+ e9 a

, }; \9 }3 ^3 a内存搜寻: ci, cn, cl1 I, T9 S* N1 H) Z

4 }! ]& _0 b9 s$ c0 X1 x: Q0 }    ci/ a# p/ O# ^( N3 ~% p0 @  J: U
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令; z( G& E: q9 z, t
6 K6 P1 m: L$ N# p8 q. Z
    cn' d2 m. |8 W  L4 l) \# x
    搜寻指令& C* t) W3 U. H! @. i# T' G
    例子:8 x- C' Y5 D7 ^
    cn eq,60( E5 }  V+ h! M- I
    搜寻目标等于60 (十六进制)
" I  q) {) i) ]/ y, ~        
# P5 m9 v" W7 ~! {" z8 E6 ]+ U    cn eq,#96
( ]9 I6 _5 e5 \1 Z8 G4 k    搜寻目标等于96 (十进制)) j& _8 Q) p# }* }/ s6 M- {

0 Q: i& [) U  c$ {4 I) @4 B/ f0 w    cn eq+ ?; v2 ]; V' ?# P) T! x
    搜寻目标的数值没有变化
- a4 g7 F5 T2 n
6 i- c- x! A: Y7 y+ l    cn ne
4 o0 \7 i- Y! G3 g1 {; s    搜寻目标的数值有变化6 B6 e* a" b; \  m6 T
        
) Q3 w# I5 x* r/ G; R* Z    cn +% q$ }% s+ ?1 x8 q/ p( O
    搜寻目标的数值增加5 I4 ]/ X7 j9 o3 C
   
* W) Z% ~' s% u' |4 Z    cn -
% ^, V7 x- V6 |; ~& k0 X$ u    搜寻目标的数值减少+ D. `% c/ u$ I: Q
        
1 U  h7 ?' C) f- x+ O! C    cn +,3
3 B7 \  J- G) _9 z) W    搜寻目标的数值增加3 (十六进制)
, z: k; W% e& Z. v, ^0 w: T; n' V( z! I7 u' g- I
    cl% Z' \* |1 S4 |6 K" L- i8 s7 q
    列出所有搜寻结果$ L! J- Z0 l! t, |5 v% z, i

/ }2 o8 x* N0 c9 W    cl xxx.txt
: _! R3 Q; c, @6 Z4 w* q/ l- @* c( ~    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 d  J2 E6 l- p8 f8 V) t  d+ T1 l

: k3 R8 c1 L$ [4 O7 d' N' T   
( ~  J- r, T& H2 Q- C内存监视点指令: wp, wplist, wpclear
+ L! C& t  V: t/ K- M& G1 |+ W    例子:3 ~  e3 q, q9 H! Q$ N; `: ^
    wp 1234,1,r
: ~( a+ h* A% f" ?1 F# ?$ M      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! k% [* M# q, m' u9 t2 e7 Y
3 D2 ~1 a# @) K+ _3 R6 c% t    wp 1234,2,w
3 J, U1 m1 b1 Q      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 j$ Z) \$ w) @% N     $ q, A" G, k% ?/ M
    wp 1234,6,rw
3 O" C$ w9 c  S: A! s$ I      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度64 S+ p" K* X2 R8 t- f1 l; L

& e7 F  u9 _+ F( W+ s    wp 23456,a,w,wpdata == 1
0 W* j% k9 x) c9 k. d: K% D      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 A2 H8 F3 L6 @( J# |! ?
$ v2 ?# }$ F, W" P$ r  H3 T! P+ X    wplist
4 R6 k/ |* h' `7 a- ^7 o* {( Q      列出所有监视点  B" O6 |4 D& U: k
5 _: N+ D- G2 P( F) H
    wpclear 38 M: ]# k: j1 Q0 e" S
      删除编号3的监视点
# v) {% C# F8 q' L) H0 e* x0 b9 q
    wpclear
! C$ e0 V1 w* {! X      删除所有监视点9 a/ U3 A, I* b5 M
8 c3 ?8 t% k8 F5 X2 B5 x
      
9 k2 q' g. y, Y
$ D1 v" u/ {$ f* d7 m. k% y程序断点指令: bp, bplist, bpclear0 n/ c8 }& N7 Q/ x& T' k5 c
    例子:. a9 t0 B6 `! M" E/ w* E3 A
    bp 12345 v6 _9 S: j! Z3 e+ y
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
0 ~7 x+ o( p1 v: f3 ~, M6 }; f, m1 q% h; y
    bp 23456,a0 == 0 && a1 == 0' I) d8 z! n, i3 R
      在地址23456下断, 且中断条件为a0等于0以及a1等于0! v- |, |: L3 w+ |0 a9 H9 Y9 ?  `
2 R2 k7 J4 v- G! A0 G: A$ x
    bplist
4 L+ {# ~) E7 y( o: N8 A; S      列出所有断点
; K+ c. O7 L4 V2 u+ g
4 ]: I* A" o9 Q- S# ?! v    bpclear 3- `* @/ q( u% w/ Y
      删除编号3的断点3 ]* g; B' `, }; f

7 J3 U- P9 D* j0 L% m: o7 W  A    bpclear# z5 L% t* j1 d8 H, b
      删除所有断点! W' l' q; [( c
5 \" }3 P  ?/ j( n: t) a! r
      ' |5 X* ]* ]+ }2 Q  |8 `
      + c, F/ n1 F3 L1 ?, X6 d4 M. {
跟蹤紀錄指令: trace0 b5 H7 @+ }9 w% N& F( P2 P7 y
    例子:
) e/ L, v( g1 c% ?8 u) u5 l    trace 01.txt
/ V0 W# S- k4 l# ^3 T/ n! @    跟踪当前CPU运行的所有代码, 输出至文件01.txt+ Y% j8 Q$ u4 T0 l! L3 M
* p$ o6 \) \2 g, _$ f
    trace off
( |: q9 K: Y  w/ a/ J$ b# U- e    停止跟踪, 并且关闭文件: s2 g' N+ C4 `6 @

# I; D* k2 }* y    trace 01.txt,0
: m$ G& f. E! t* m    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 j' R# ?3 v! e% b( Y' P8 r  Q+ e$ u( X* H" d- h% ~. z
    trace off,0
/ _$ m  n  ?( D* r- f* Q    停止跟踪编号为0的CPU, 并且关闭文件* l$ e) i' H1 }

4 N* K) ^$ t+ I0 S; k! W    trace 01.txt,0,{tracelog "A=%02X ",a}
7 d- t; p& j1 v! m4 B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 V+ g& i% I. v6 }! O4 i& r    并且在每一行的前面, 写上"A=a "0 J# Y, f* A) ^; I7 M4 y
    "A=%02X ",a为一个C语言printf函数常用的输出格式
! M  ]+ G: g& r2 j    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 @8 X1 ~" z! }    X表示为大写十六进制数$ S/ \/ O3 V* q% L# o

% W* q# O6 ~' j0 v1 P' h1 T) ]+ C
+ {4 T* f7 `" J. R( m- e3 ^% `6 G9 L9 I+ b/ j
内存直接写入指令: maincpu
; w8 w' A: j+ v/ K* v    格式为 maincpu.[][]@地址=数据5 W( o# i8 t, o; c- I# E7 s* C
    第一个[]:" M0 U+ Q7 n# }7 N
    o 表示ROM地址
6 m" N$ a! [: _1 a' n    p 表示RAM地址( i6 ~8 r8 Q2 x6 Q4 w" w

. G$ @2 w5 n4 n8 k& H. r    第二个[]:
: r! J* H' I9 R+ Q! |4 F    d 表示4字节
+ E7 K# i3 [1 U& m    w 表示2字节+ r8 t* \& ^1 Q; ]7 E, w1 @' V' i
    b 表示1字节
2 b9 m% x3 I4 D- P$ t1 y4 T! \9 n* V7 Z& i& c
    例子:
6 _- ?! |, p; Z+ t$ I    maincpu.ob@1234=FF1 B& ]. p* o! }3 L
    在ROM地址1234处, 写入FF一个字节
& G5 k/ }5 Q7 q8 n+ ~% V4 r$ o5 s1 x: [$ L1 @' M* G
    maincpu.ow@1234=4E71
5 h, C' V2 ^( R* w* H$ Q* c7 T    在ROM地址1234处, 写入4E 71两个字节
8 @% ]8 {' e7 b$ j4 c/ t0 R# q% _+ O( T
    maincpu.od@1234=600A4E71
' D% ~+ O: W+ H5 X- C4 t- d    在ROM地址1234处, 写入60 0A 4E 71四个字节
  {# b/ T0 p1 J- o7 z& Q
( I+ R( R$ z# W4 z9 F( @( h& p    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 q0 j- B, z1 @, ~: N4 ]: B
    ) X% \; G9 y) H* A; [
' t6 k' c& P. W9 {  m. y' z9 s/ J) c2 h
其他:
0 x  K% c, X" ~% A, L1 O    dasm 输出档案名,地址,长度
9 e1 J) _$ u7 I; |  i: U    输出程序的反汇编代码
" b/ L* u" P0 H6 z# ]9 a    例子:
* Y, H* D% V8 |5 Z; z    dasm 01.txt,0,100000. m8 s+ {3 S5 L* V1 w2 s) a, [
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ s6 }" i, v! {9 e3 Q2 z  o# U5 u  d: c; N1 y& P3 i2 R
    softreset" S' s. t' h4 m1 M
    游戏重启, 但不重新载入ROM
, N. r2 n2 J2 w: [" J/ N, K, p9 I
6 b; Z; Z5 d2 L0 O, j    hardreset
2 N( `3 p5 U6 A7 l$ K    游戏重启, 且重新载入ROM2 y1 m/ ~: r' N

. {* }$ k( V4 N* s; L    snap xxx.png$ y, D# T% q4 _( t3 J
    截图为xxx.png
  D5 X3 ?! X0 x  R; _* Q
+ [9 U* [4 d& z! R  4 z2 `* R9 @* a/ f' {, m
  ! o1 f6 |( N0 \9 s$ {  I4 X
  
# D" y7 V' l! {热键:  E0 l9 m! P& e" r, O; v3 m
    ~ 中断游戏
1 D! o! D& }. P. D8 z: U    F5 运行游戏" |6 C' g1 M& X9 ?" c# d+ N6 b
    F12 运行游戏且隐藏调试窗口6 h3 }9 i# a/ [1 L
    F11 步入, 单步执行, 会进入子程序; P! V  Q8 S/ g) g# q
    F10 步过, 单步执行, 不会进入子程序# A3 D. ?. q9 ^1 T
    Shift+F11 执行到子程序返回3 y/ u& w7 F  f: M& I& M
    Ctrl+M 内存浏览窗口
& p. N: H9 E2 Q/ N# g2 w8 C    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; m% A: ?0 ^* J- x

0 C2 P- g7 j5 x) L{:4_94:} 9 J3 P% r" L! J/ E$ V: h

& N  M% d& I. u& `% [

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
: Y: X) Z% }: H8 S3 t+ m: t5 [9 I2 b
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 | 显示全部楼层
要详细些的东东
2 n; z8 L/ E5 k5 O11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-21 05:31 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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