EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
7 e; e8 j0 F5 t4 z5 l" t
很快速的整理我自己常用的指令0 a9 Q! y/ F* ?! @" @
( x# ?% j- |, {! S, j7 R! E
{:4_112:} $ R; J: p# z3 v" w
/ r& X) n* {7 Y3 q" D( u* Y/ N, z1 U
MAME DEBUG常用指令: W7 Q- w3 ?4 t6 o, ?

1 ]! }7 X: u8 a7 R8 z9 K内存搜寻: ci, cn, cl( X+ X) a; J/ I8 Z  H

0 |6 L7 e1 |  A# f2 |    ci
. _. L8 T: L+ M$ u% h7 J: W    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, j; G+ ]9 F& k) t8 Y- j0 L9 @
7 o; d5 Q* r! l$ Q$ S6 ^5 N3 F- T    cn
3 Q1 K* g5 K. n2 K  _    搜寻指令
9 |  Q) I( `& D, Z, _    例子:
0 [9 m/ S0 E8 G1 C; t9 E0 g. @    cn eq,603 d9 |  o$ I7 U- l' |; e: k+ c
    搜寻目标等于60 (十六进制)
; [, T8 ~/ e# n! j* j% r+ c        
& M) R+ A" w8 T1 a    cn eq,#96
' J- [$ L0 Y1 a& q/ F0 p    搜寻目标等于96 (十进制)
/ x+ Z5 e/ ~, V( Z2 N
" _3 D( f' q. t7 i% j$ P1 F0 \' ]    cn eq7 _! m1 c: A3 V! I4 ^0 @& j
    搜寻目标的数值没有变化
/ o/ b8 M5 n2 ^2 |! E5 D
' I8 Y- Q+ t* n6 f9 h" t    cn ne' V0 e; k; |% i8 a2 d2 S
    搜寻目标的数值有变化
" t. K# G, C1 @$ ~( D, Y        
' u2 d6 m1 ]3 ~1 Q& Y5 S    cn +: `2 V& B' Q3 L  Q5 s6 `1 q
    搜寻目标的数值增加9 G- r7 n( O) A! D" U5 \+ v
    1 P, q( R  R: r# N) I: f
    cn -8 e7 k8 b1 p, }; B* D
    搜寻目标的数值减少2 S( B% J5 }% |, Z
        
& @& x% C/ G0 L/ g6 {% z( n    cn +,3- H6 k7 V6 C8 g) B/ l$ e2 k
    搜寻目标的数值增加3 (十六进制)6 e- Q$ I  P0 }. D1 i4 }2 r

' c2 F. L) o8 }# R% A. |% z' X    cl
. ^& x, b( n1 u! l    列出所有搜寻结果9 [: |1 w' d2 `) e: j3 F! ^# B

7 }. L6 O. m2 t" J, T    cl xxx.txt6 D9 B; R) r' q$ p$ n& i) W
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
' g- m3 O' m: x% N9 A; l
% w; Z/ {4 k( c  S' g1 t" L    + Z) `- @: d5 z1 |. M& S: U
内存监视点指令: wp, wplist, wpclear" Q6 s# x& Q0 a6 e+ \3 O: X1 [$ v
    例子:4 G0 K- V. q/ |( {
    wp 1234,1,r( ]& C5 h4 T/ Y8 j6 P  @
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ \; ^/ u1 O& ~4 C9 t- j& `/ ~( t
  o9 P4 u9 f! C    wp 1234,2,w
5 {1 _  [* O$ q. z6 a8 N, I      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 r9 x- o$ {/ E+ d  b
     
5 ]- u) k# ^1 [3 D% M    wp 1234,6,rw( ~* f8 ]; u- x* R! ?
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6. l4 H! i# j- y/ w" h

5 G5 H! F& ?9 s    wp 23456,a,w,wpdata == 1
& B) C) L' ~) t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. A( j+ Q3 L6 V" v7 `3 p
. o2 [: K$ P( s    wplist5 [8 y6 A) C: }$ y  Q
      列出所有监视点
" `9 |; {) C) O( }+ U& _( B" [" a8 W) ^
    wpclear 37 O# C$ ^6 w4 I& U8 O: k( p" I
      删除编号3的监视点
" o3 s8 h( U% Z8 G! N+ J
1 N5 B3 @* Z* X7 |5 M    wpclear5 w8 a! \4 s& ]
      删除所有监视点
, J; X7 u* c1 b/ F4 S$ E) p4 e& K: s5 y
      , V- ~1 s- V) v8 D/ v) X
3 G% w% O- t4 `, N+ F
程序断点指令: bp, bplist, bpclear8 B5 S: d* a% M. N! M' @% X9 N
    例子:
! C# a6 e( L% U' I' g    bp 1234( u, B  n$ y" ^" j
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
6 Q5 E. a( s3 R3 y8 I  D  E1 i* n* E* d2 t# j% v+ s1 u
    bp 23456,a0 == 0 && a1 == 0
/ l' H; ~1 j* _7 P( t      在地址23456下断, 且中断条件为a0等于0以及a1等于0
/ D$ n8 U9 p1 x& ?6 j, y3 d+ z7 F$ N% c" X$ [6 @
    bplist
1 x8 F* p; R5 r! |" n$ K% m      列出所有断点
4 _& t" B& x, G& }3 h4 d) i2 w& w: A" R" c9 w; {+ l) a
    bpclear 3# }' w9 }2 B; W( G4 A3 D
      删除编号3的断点8 `% I3 d/ I, N5 {
" \: {1 m- }2 t" e
    bpclear# k3 G9 Z, Z0 t0 [7 v2 ^
      删除所有断点
1 r! a- f+ h5 N0 C8 C/ e. n; t
( a3 V" T9 O! M0 ~4 h  e* F+ m- ?# [      
9 @& w% A9 O4 l9 k      8 [- r5 U  K! ^1 n
跟蹤紀錄指令: trace% R! _4 x% Z/ k0 r/ H
    例子:4 a1 _& E7 d( H( R
    trace 01.txt* v( x: G2 p1 [+ |
    跟踪当前CPU运行的所有代码, 输出至文件01.txt5 }. u" G. t7 R

, m5 K  M7 t6 h9 s/ b' X2 U; Y) P    trace off
7 t. ~; S# t1 e4 i) t: ~    停止跟踪, 并且关闭文件8 t, T  B2 M/ j9 D3 ^5 h3 R) p

* Q5 T. e# O- a    trace 01.txt,01 y; K8 e/ T8 h! H+ g1 a: _+ O9 Y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! m+ S; p: I. S$ I8 D  p; c6 `, x+ G' j" h# d! w8 a$ [
    trace off,0
. P' h& i; j$ f: Q    停止跟踪编号为0的CPU, 并且关闭文件! S+ S% s# T0 i+ @8 c

: J% n# I$ D, j6 D% x3 q2 [- k    trace 01.txt,0,{tracelog "A=%02X ",a}
( d( [* G3 h  i1 Y: L! o    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 Z, l* }" B/ |* m    并且在每一行的前面, 写上"A=a "
7 ]& x$ L1 B3 U, `7 s* }    "A=%02X ",a为一个C语言printf函数常用的输出格式
- O4 |6 v  W7 |& D) f    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* M( Z% N4 I" H2 J# P& [4 E& w" P) g
    X表示为大写十六进制数
" S3 C3 D9 n8 }2 C2 p; Z5 M& C! ~
- y; y; p4 I' z! H1 s& O( t, \/ a; h, N$ u9 T+ d6 ]
% P; b% K0 |% p& M) k0 {" w) M
内存直接写入指令: maincpu% {; b# s. b) P8 v- R
    格式为 maincpu.[][]@地址=数据
7 _- Q, u& x' c% Y0 c    第一个[]:
) @* F; x  ^5 @& f    o 表示ROM地址
, B! V; A% @- J) S$ e4 e3 d    p 表示RAM地址) a# S9 u5 |+ H) E& A5 Z6 P! [, o: U

& J$ }8 n3 B- [- j/ [" _4 M7 [0 b    第二个[]:
' f! j0 s0 K8 F, _; f) b' V- c    d 表示4字节/ U, h4 t5 Z$ v( w& B
    w 表示2字节
: K1 q) c0 }% h    b 表示1字节
! s/ C* Q( e* A8 l: F% @: z2 V3 b( C
) w; t# c+ f7 v. M# x6 b# |    例子:! T) f- f; u: q
    maincpu.ob@1234=FF
- R6 Z: t5 [" A# E* P' j3 w    在ROM地址1234处, 写入FF一个字节9 q/ o! ]3 B/ m( K

( M/ m( F0 c+ Z: W    maincpu.ow@1234=4E712 l8 `# ~% O4 _& w+ M6 o& o
    在ROM地址1234处, 写入4E 71两个字节
2 P. G# |. t" Z& S0 O. ~/ ^8 L" }! L8 ^; Q0 M1 C: b
    maincpu.od@1234=600A4E71
! E1 s( }+ f4 \# Q- g    在ROM地址1234处, 写入60 0A 4E 71四个字节/ [, K; {/ [  o+ A" [3 P$ y

! J6 s5 m% h1 P2 [% D" e    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: x* A# b  z# h# G; V0 Q    8 ]1 w1 e) N7 v8 m" g

* J* f3 V6 m* P4 f# o+ n  {4 x其他:; k! ]2 C: v9 v) c, D2 P, m
    dasm 输出档案名,地址,长度
  w* |  a2 \( z* m; H4 j    输出程序的反汇编代码
" [( }/ R* q7 c2 W8 Y4 {    例子:! v8 w/ S# E6 r- S; |, ?% e
    dasm 01.txt,0,100000' F% k/ ~7 o, e" a8 B) j9 e
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt  I2 [9 z3 ~# ^
7 D  Y- Z6 P5 B: g+ J7 I
    softreset
( l! Z, d, v( p9 N$ w. k- Y    游戏重启, 但不重新载入ROM
3 H4 M2 M4 x' ~  x7 L2 K2 G" @6 W3 f. m
    hardreset, M7 @, v( m9 \, |( o  ?
    游戏重启, 且重新载入ROM0 q9 l' H4 R4 m( n
2 E& i4 o5 \9 h3 A
    snap xxx.png
: U& w5 h3 j  z, P  X    截图为xxx.png
8 I' O9 W& G) ]6 y0 K
; c" ]/ u4 A) H2 o  
$ t1 P! k5 r2 q( H  2 k% C' f8 D: X- f& d
  
/ E) M+ _: V) l( D% T4 H热键:5 c# }* ]8 L5 A7 C! d
    ~ 中断游戏
, H& N# ^" G! G" C: }0 ^& p8 {    F5 运行游戏8 r7 |9 W* Y! [1 b, _  g
    F12 运行游戏且隐藏调试窗口
& v) |3 w/ ]4 M! I, a, G    F11 步入, 单步执行, 会进入子程序
7 n  H' o+ Q$ s9 f    F10 步过, 单步执行, 不会进入子程序. t7 l" |& ?% v" I# k8 s+ I5 [" S
    Shift+F11 执行到子程序返回# Z3 i6 E9 |9 A& e0 L4 s: N& M
    Ctrl+M 内存浏览窗口! t) u8 @! N3 x' H8 a0 R  Y
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU0 N" H6 e6 K! d' p# r5 N
- f* R, D  x# J& k  T: @
{:4_94:} 1 Y7 g% A, A; M( @# p$ g5 U; }) L
$ y3 @  |5 e. N5 P( U5 m( N

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
% V4 g8 [3 _" f- J9 T$ A3 l  Q& H2 a! \. Q/ L& }) n) d
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 | 显示全部楼层
要详细些的东东
  o0 Y) l. B# l11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-23 23:59 , Processed in 1.094726 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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