EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

0 F, y" e2 s0 l/ `4 e很快速的整理我自己常用的指令
0 _( N5 R  _4 ]+ W
9 a4 O" z: F2 y/ C" M9 t5 o% O{:4_112:} : z" l: [( y3 h

6 k% ^0 ^( R6 x7 w- {5 P' cMAME DEBUG常用指令
" F* w  d! }- X  T' o  s* g3 ~6 r6 |# r: C% d4 }, A! [9 }; Y3 \$ `
内存搜寻: ci, cn, cl2 A5 F4 q# N" g) J% ?, s: q
5 ^2 F& ]1 Y9 U: @3 L2 h! ?1 |  B
    ci
2 j$ N$ L  q$ f7 i. c5 V6 a    搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 C+ n$ o3 O  }% l; V& R
( `4 E* ]1 y( ]1 i7 s
    cn
# U  E, [6 t: I    搜寻指令
0 H+ _# Q0 K3 @0 V5 t1 ^' w9 ?9 A% S8 e) r    例子:; A. H( C- ]; u* y: _: v
    cn eq,60
! t" q: Q1 x8 h9 \( D* ?    搜寻目标等于60 (十六进制)
2 z& ?* }. W, q: L. K6 N# o        
5 g' m: G& F( l6 V" a2 j1 U    cn eq,#967 J( S" r( x4 l
    搜寻目标等于96 (十进制)
7 w- c8 n2 j! ?' u: t- R
" L: o5 c6 I" e, v- y    cn eq
8 v( j7 M8 O/ n' O    搜寻目标的数值没有变化: E% T. e. J# S% b. L4 P6 z1 ^

3 w! L5 J6 U. \; B    cn ne/ c# X) C1 \" ?7 S4 c
    搜寻目标的数值有变化
7 z. ?2 J7 B1 Z: X        7 h* J! J7 U0 m1 z+ Y
    cn +1 N! m5 c2 z3 I* ?4 J  |' W
    搜寻目标的数值增加  i# T2 P# u2 I% O- S3 E
   
3 o2 L9 |3 V9 U0 w: H. p& l    cn -
; `( X+ E8 y/ M( [. ^    搜寻目标的数值减少/ w6 C' m6 t$ v3 g% `
        : _' i' h0 s/ [" k- Y( X
    cn +,3
, p9 N6 f% t3 s+ g  D1 F    搜寻目标的数值增加3 (十六进制), q5 f8 B" }4 w( _( f% H

1 L4 u" E3 m  `! J: t    cl
' y& @, Q" b; h    列出所有搜寻结果" W" s6 b( z5 o& W
# Y, y" e8 K6 i" Z% g% J1 @
    cl xxx.txt: r- ^" m! a# T* G
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式( l- V  x3 c4 E# |  L1 y3 E
5 `8 \$ U: W! y
    $ g) s" D4 Y% l5 L  K4 o
内存监视点指令: wp, wplist, wpclear
0 s3 n$ g) {! w0 z: Y9 L    例子:: P! s2 V  d* B. ?
    wp 1234,1,r2 _, ~) {3 K8 u. [$ h, r% M
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1" ?* ]) G6 c, h( f7 C' {
! `( G( }6 x8 Z7 h
    wp 1234,2,w0 x* s/ t2 [  M
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* j# r% W7 ]; @3 S. ?( t, ]
     ( W" m8 V1 ^, J: X0 G
    wp 1234,6,rw
; Q2 B; W/ |. X4 T( [# X+ p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 Q4 i1 g  d) z2 z& G
" i% S+ J, j4 r5 V0 {
    wp 23456,a,w,wpdata == 1
: c0 h8 g2 p" E! F2 B      在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 C! {1 s/ `4 ?7 s

- u; Y9 }3 x  H2 P    wplist9 A1 ~: `: f9 }% I( R
      列出所有监视点$ \: t* {: b% _8 P  a
! a6 p* c! _, D- Z" ~3 g0 A
    wpclear 3
; \: Z1 K6 S/ f9 [. o      删除编号3的监视点
; T& C7 T4 W( n% }$ L
+ b8 x) M% @9 J2 X+ ~8 P( {    wpclear
) K4 a5 X' F% _& w( ]  E0 s      删除所有监视点
. @# l( H$ R; }6 h4 l, d6 n
4 [0 v) W* L$ D- ^5 T! \      " \  G2 R& x& s- a

6 ]' v& X; Q. s8 x+ j9 k程序断点指令: bp, bplist, bpclear
1 x2 D1 x  r9 o( A4 a) [( q$ x    例子:
4 Z* s2 e' K' T: m$ A    bp 1234
% b1 X2 _$ X+ g# ~      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 T( k  e/ s9 b, A8 U2 Z0 k9 K" F- H4 U$ q5 w( P
    bp 23456,a0 == 0 && a1 == 0
+ S& p4 M9 G' a* j      在地址23456下断, 且中断条件为a0等于0以及a1等于0  c7 C6 F6 M. O, j9 d7 q9 ?8 f

% @5 {' K$ e; z. r. q) {9 Y    bplist. u  `0 z' `0 _1 b; h" K
      列出所有断点
# t4 [6 K, I# H7 m2 a. W; }/ U
    bpclear 3! ~: J% M! o% e: R6 d9 L
      删除编号3的断点0 K. K/ T- p. A  E- U, i0 p7 d
6 E# D# t5 n) Q: a, \
    bpclear
) @. L. y0 I6 @: C5 R1 S      删除所有断点- ]/ p) Q; @" g' g4 z$ }6 R1 i

+ f" a" S' C3 C3 a/ t      3 |, g" v6 F- N2 b; i; J
      
4 Q$ P; {/ M+ }, X6 Q跟蹤紀錄指令: trace
3 V' A8 [( z# {4 x    例子:% T2 w/ Q7 H- v
    trace 01.txt) F  Q2 B" M5 m
    跟踪当前CPU运行的所有代码, 输出至文件01.txt/ t6 ~) K8 p  }7 d2 x8 o; e8 B
2 i5 d6 [/ h6 [1 L7 O
    trace off
" h2 n7 m  r# a9 D% [    停止跟踪, 并且关闭文件' d& R, C# c- k! ^; r
, k1 z1 h2 ?: v' a& [
    trace 01.txt,0& B  b$ l: w; H* w
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; M. l) b# }' x! K9 w
1 h0 E' r4 q5 z9 L+ I, M% Z    trace off,0
) p/ P& ?5 I8 c+ _    停止跟踪编号为0的CPU, 并且关闭文件
* A) `, f' f) L0 ?! P2 @- }" Y& F5 P1 O
    trace 01.txt,0,{tracelog "A=%02X ",a}
6 m8 @- ?* D4 P, y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & F9 D, T/ d% e& r0 P& w
    并且在每一行的前面, 写上"A=a "6 w+ {7 L3 o- j( d& u7 L
    "A=%02X ",a为一个C语言printf函数常用的输出格式1 ]4 Y& r1 w8 j
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 h" F% h5 Z, Z: ], o8 w    X表示为大写十六进制数$ i1 k0 ~$ ]4 e9 i# z1 k8 q

7 b' ?5 {' f. C3 R9 _( j. G  G( b7 |0 H* o  I% l& d. P
2 E: J4 Y& t$ g8 M/ a6 j
内存直接写入指令: maincpu9 F& l& ?+ I% N# W
    格式为 maincpu.[][]@地址=数据# L& k" Y( ~, I# q) R! E
    第一个[]:$ @8 V& i( e7 D$ a. q( n
    o 表示ROM地址
2 M/ t) u* S" E% d" H, J  ^9 X6 y    p 表示RAM地址, T& o- M  j# n- Z

3 V- @: K8 I: i) ?    第二个[]:
4 R, y2 Z! q$ d    d 表示4字节: w; E2 [% e& ]3 y
    w 表示2字节
) s% T$ O" d, G, F: k, Y! j; ?+ y    b 表示1字节
& j0 ?3 h+ L5 P( {3 c' s* V' T! E+ I) ~0 n9 M0 k
    例子:
% C- R2 h3 ]* {/ R5 a2 F) B6 U    maincpu.ob@1234=FF
8 O/ i4 ~  [7 I' N; H  u    在ROM地址1234处, 写入FF一个字节+ z9 h- f  B* j  R

* G9 ^' }8 d( M5 t0 A( M* _0 N    maincpu.ow@1234=4E71
0 J: ~# Y' ]0 P+ U1 z    在ROM地址1234处, 写入4E 71两个字节+ h; E. q* _% ~
0 d, C5 u1 f( ^
    maincpu.od@1234=600A4E71
4 ^* B% A3 D8 y7 U; h    在ROM地址1234处, 写入60 0A 4E 71四个字节. m, ]) U  P0 ?" a* X- [( A# G, M

8 p  A" ^- F2 n    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写  Y- b, h! b, u
    4 \' G  y0 k' \$ R

  ?& ^4 r( a2 [1 B, \! ~* ?, g7 m; m3 B4 U其他:
) P! M+ P8 \4 m7 X: G    dasm 输出档案名,地址,长度
$ d, g" c: |6 _6 }4 c# T4 }    输出程序的反汇编代码1 U. H) t* X) k( q& a9 U0 I
    例子:3 f+ H* N4 M7 q: v! W4 o& @( R
    dasm 01.txt,0,100000
/ m3 {# I2 K8 v! r0 d* U& l; N    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
7 B: z5 J4 L: v& J, X
9 @. |- X1 R5 N9 I3 e% w    softreset
8 P$ S. [# l  h* l; G    游戏重启, 但不重新载入ROM
1 d2 T. d9 E3 o7 V4 J2 a. r1 t# S5 T" k/ |" ]' P3 D
    hardreset% Z9 i2 u3 C, I/ o0 b4 }! f4 u
    游戏重启, 且重新载入ROM
: N! I" A4 ^3 Q( N9 w5 T) t: |3 I9 R, R3 a3 O+ S
    snap xxx.png
; j; |: U5 _) O$ l: E+ A+ m    截图为xxx.png
. ]: H1 l2 e4 i$ o' o2 ]4 V: p0 S9 Q* t" v% h
  
+ S( `3 K" X) f- {  3 c, v  w" c* |5 |9 M& N, i
  
/ e; D: m: r( H8 `. C热键:
" u; P, N& R+ b    ~ 中断游戏
0 l% a" C2 l+ ]$ t    F5 运行游戏* c$ P4 D- \6 y0 _1 y
    F12 运行游戏且隐藏调试窗口
3 [7 W% y7 d" X/ a- J# X    F11 步入, 单步执行, 会进入子程序3 q6 u5 Z0 p' A% V! K5 u' a
    F10 步过, 单步执行, 不会进入子程序
# N! A6 y+ j3 D7 K/ |( ^  P2 }    Shift+F11 执行到子程序返回
' l/ V7 F0 u2 V. Q# E0 N    Ctrl+M 内存浏览窗口  w9 q$ q) Y6 ]. ?5 }- o% K4 r
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; x7 s/ y. i6 A3 V6 E

; g, ]0 d. c9 `0 L& [{:4_94:} % [1 x! ?1 L: d7 {
! T8 \5 p3 f7 z% @

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。5 s) {3 [& x, O- r4 E' _0 \! L: b

: V) M0 D0 O& ZPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
& E# ^( `6 f) z2 i4 k: ~11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-8 00:49 , Processed in 1.083984 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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