EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

. k4 t* z3 G+ F# c0 E很快速的整理我自己常用的指令5 l1 i% j! _: o+ w( v: @8 q% U/ x

4 {2 i+ S# j; i  [( [3 v{:4_112:}
& S; [* q4 C+ {8 C9 E" R
5 N8 Y( R, i' i( _. S0 D4 j6 EMAME DEBUG常用指令! t$ H, p) w3 |3 Q' }6 w8 W- p

/ q' c( Z- B; c4 P# S( G+ h4 O) M1 o内存搜寻: ci, cn, cl2 K& s8 C$ X8 p5 t, H) \  n
3 I/ w3 W" M: G) C8 b: M2 [- f
    ci" N5 m5 U+ p7 P1 @
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令) ?) C$ `7 W+ @) Y
& @  c- |4 X0 }0 t1 N; t5 d$ V2 N
    cn$ [2 K" [( M& y/ c" v) y; w( o
    搜寻指令
- P6 ?. Y- D) t  i    例子:# U) G3 c2 H) I, w% M) h+ F$ \* a
    cn eq,60' ?' w9 W# D; A) k0 W& C/ f8 d
    搜寻目标等于60 (十六进制)
) p: r1 J. r- m8 o& k7 X8 F        
2 {9 V6 }& Z( T( e# K    cn eq,#96
2 s$ M  \* Y# L( k& F4 B    搜寻目标等于96 (十进制)
( b. ]( ~! ?9 W& D9 t% j5 Q! I$ V; k: M% H2 S5 {
    cn eq$ h5 ]4 w# X  E9 d1 A
    搜寻目标的数值没有变化
* ~( [% N6 j3 K' l1 f. o( Y4 J8 C+ X  f' Y
    cn ne$ q7 T- M2 ?  n- C
    搜寻目标的数值有变化
/ N/ {& [5 e, E4 P6 J; v/ p        . t$ D3 v' h) A+ P0 M
    cn +
" S# j( E4 K3 j- C6 T1 D! t( n/ z    搜寻目标的数值增加
4 F! Y1 P6 V. R0 @& L* L4 G    2 |; D5 d8 v+ l! d
    cn -" x0 p( ]/ H( v8 |9 k- Q/ \
    搜寻目标的数值减少6 Y, `+ R! z, h5 G/ V
        
! f0 _5 l; C- j: u+ d" y    cn +,33 Z" z; d; q& Y  S4 Q
    搜寻目标的数值增加3 (十六进制)0 k* E5 e# \( k" U( V! M
; [/ K, U' y' q1 G* _, S4 Y9 F$ U
    cl
6 x9 }5 N0 f- L- ^7 k6 v8 Y6 ]    列出所有搜寻结果* J) E: V' C3 k2 N/ ?' `4 H+ N
+ c# m( `6 K, Z
    cl xxx.txt0 T9 N4 z+ T1 W3 e  y# x' g+ \
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
. k* G' c+ V' g+ H2 X" i5 o$ M9 k( m/ @0 s
   
7 u2 u( l" ^" h5 n- n$ m% ]内存监视点指令: wp, wplist, wpclear  ]; A2 _! g( F! E- ?% m2 D. I7 v
    例子:
+ @. X1 b- }6 L    wp 1234,1,r
( l$ H8 A2 L* W# z: q! R- z      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' L' `; o0 ~; G# I" C( I3 u8 y" i

: E2 V$ o0 v8 l! m; ~    wp 1234,2,w
2 G0 K) D5 F/ e  U      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 K  ^8 L6 {& F9 I1 L% S+ L     2 `( F* s, b) }! E+ {  M
    wp 1234,6,rw8 T! r* q1 M) {; q2 F1 H9 c( V' r
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 }( G# T8 B( m  D# F3 @
) i, O/ o1 ]3 `' Z
    wp 23456,a,w,wpdata == 1
3 q; e8 V3 o& O      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" @/ c* E, T- p; u

5 O2 o5 F$ k4 {& P, K5 `    wplist
3 V" e' D, D# b* q3 Y2 s0 I      列出所有监视点+ M. G, V6 P1 |3 J/ b
" {) X* ^! f$ x5 [" B
    wpclear 36 N! o! z& B9 O( r
      删除编号3的监视点) x, e8 w2 h% I9 Z
; [3 C8 Q" @' [2 d
    wpclear
. z9 f8 g0 p7 L      删除所有监视点0 w! D0 r6 i% F; m9 R# x7 m( v
7 Y$ W2 h4 b" d3 a2 F
      # t3 {/ F- Q: g& a2 k

3 r9 N4 ]  D% e& @3 V1 W/ t/ K8 @程序断点指令: bp, bplist, bpclear
. A# E& V& G! D2 o% S    例子:
+ r# }/ ]& Q! o# u; O! g    bp 1234
+ @- _4 B0 m+ A( r0 O2 `      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- q& y* a' O0 V" U2 f2 d; w3 i7 `
( Q% t* K7 Y* U$ H, r. o    bp 23456,a0 == 0 && a1 == 0
, F: @  _" v3 [* F" L8 q/ ?$ ^$ m      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' W: h: u& O, m3 _" `3 m3 i+ s/ O7 T  ^: `; S  Q0 E$ x: Q0 g
    bplist" V/ N6 A. i2 R* l
      列出所有断点& \& z' B, n& `2 v% ^& ]9 H

3 l& U1 Y; w, @) a* s& i    bpclear 3
# K! H4 j1 c# c# |7 Q8 P      删除编号3的断点3 l! \5 g% m# Q  K* c  b* w

4 s7 s1 p5 C$ p1 U4 v7 o    bpclear
( J6 J% |( X( i2 [8 G      删除所有断点0 ^" `% N+ v/ V" A
2 F% m8 ~! P4 n7 N3 d
      * D& b, C' o' g9 s9 @( M
      ! P. `2 A  Y5 e5 }) D4 e
跟蹤紀錄指令: trace$ R  z' m: b# Z; S  s. ~8 E; l& }
    例子:
! D, ?/ j! R$ a  ~7 Y% G8 y    trace 01.txt
  o8 E! F+ s9 o8 ?1 U' B    跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ ^1 J9 w* s; o0 b6 N
# }# d' C5 n! W6 H& y& @, k- X2 g    trace off8 y* g" d- M/ T/ h+ r
    停止跟踪, 并且关闭文件4 j( E$ E! C9 {. X  W+ ]
4 H2 @" k0 E. V) i) Y$ Y
    trace 01.txt,0. j5 ?( l. G' r( z# |6 L
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 w' ], e& \3 Q4 E( S, h1 p9 c* X) J: e- ^+ V, a, o
    trace off,00 t6 o6 d( j3 J! h7 K
    停止跟踪编号为0的CPU, 并且关闭文件
1 ^4 z' k1 q  U5 A$ z) K* H4 H5 b
    trace 01.txt,0,{tracelog "A=%02X ",a}, |2 [; m6 o# V0 |  S. B( E
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & W. x/ b' ?2 i, z, j3 L
    并且在每一行的前面, 写上"A=a "( U. H# W3 S, O4 @+ Q
    "A=%02X ",a为一个C语言printf函数常用的输出格式
4 ]+ |0 o1 s7 G& S/ u& f+ P! S( m! m    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ c& R6 s/ B0 y% e6 ^" |    X表示为大写十六进制数
5 h* x* R8 ^. J1 Z" a) P& w/ M' B* N2 T4 A

' ]' ~8 Z/ C& ^' R$ ]
3 o3 ]3 k# N5 r* T- H3 b9 u" i3 Y内存直接写入指令: maincpu  X' n' I! W. e- B
    格式为 maincpu.[][]@地址=数据, l8 {7 w% Q1 i! i
    第一个[]:
  u" d: a, |7 s& y    o 表示ROM地址
# R8 F+ I* S& T% D. k: t$ a    p 表示RAM地址
3 d& Y( w4 V$ j& J& t
1 _0 p. D& K4 H3 |- i* `    第二个[]:
& i+ _" h- y. d1 x( ]    d 表示4字节/ P) O% K! }0 n" T# ?
    w 表示2字节) _: v/ I7 e+ l) {4 n( R; W& L: j
    b 表示1字节
3 s! b/ d9 L: N& C) r6 U. T/ F$ W$ x1 M7 ?
    例子:
" \5 N" h( l( \' U/ e    maincpu.ob@1234=FF
% O3 R& N# O! o4 S- Z* L0 u( _2 U    在ROM地址1234处, 写入FF一个字节
8 t& K* p: P4 h: @  I6 Z- `# U! [
    maincpu.ow@1234=4E716 n/ H! q5 u* r
    在ROM地址1234处, 写入4E 71两个字节
+ V% o0 F# b, A
6 Q3 x$ A% f9 C* R8 J: k0 N    maincpu.od@1234=600A4E71
! z! |7 i( g3 u    在ROM地址1234处, 写入60 0A 4E 71四个字节* l( _9 \' f9 G9 \' t. d- [) O  A

* ]* q8 a4 u/ i( h$ U7 F, a    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* S* u4 }& `5 K) H1 B& A
   
3 x. b8 H$ b: K+ l/ z  x4 h4 u4 P- @+ u8 u+ s! l/ H) X
其他:6 D$ o* r% ]+ g5 S2 Q0 W$ l( P1 n0 v
    dasm 输出档案名,地址,长度
7 f$ L; e' \; ^& E* P    输出程序的反汇编代码. Y! D8 g1 W3 X6 W7 e
    例子:
8 h* B6 O- r4 \0 W    dasm 01.txt,0,100000
& F: |0 G7 \8 r- J3 b    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: N9 E: A6 [9 E7 Q
# [" Q& I( M1 }8 U8 t    softreset3 u* i3 I/ c* q( M5 k, i9 K/ t
    游戏重启, 但不重新载入ROM/ D0 k6 Z8 |7 I- H
( i/ P* l4 v  X9 V$ l$ {
    hardreset! m; o  t& p* `0 ^9 l
    游戏重启, 且重新载入ROM
: N* [5 w: x) l( v# {! B) P* B: {
7 N) S) o3 S$ L2 Q! u    snap xxx.png
4 W- q  v: T. l( L0 o3 y    截图为xxx.png
+ W8 E# i6 {# D! P/ ?8 D7 ?1 X! F# Q, _+ C9 `6 L0 B  ~
  ) E$ y* u) E5 E. V! d+ w6 M' Z: S/ ^
  
; |$ U/ \  F( @: y/ b) M& i  ! o1 {+ ]5 Q2 q  i# q% w# O. |8 Q
热键:
0 U. m  h2 T) r9 f1 J    ~ 中断游戏& g0 D7 S- d+ |; A; m8 c. P7 r9 S% D
    F5 运行游戏% M" L6 K% l) Y  _0 Z, I# _  n
    F12 运行游戏且隐藏调试窗口$ V9 q1 w! o1 N
    F11 步入, 单步执行, 会进入子程序( t: o) v3 m: m/ p3 o
    F10 步过, 单步执行, 不会进入子程序5 O3 i: D! m" r2 T1 _  B% z
    Shift+F11 执行到子程序返回4 S  g2 M2 L3 R
    Ctrl+M 内存浏览窗口) k8 U$ j, |2 v. v; J
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
1 Q0 j9 }9 @: w& V- [% l
; E4 f3 y! `$ u) F" |{:4_94:}
; ?( T2 x# L% C7 \; j4 L, Q6 R( e& G6 j6 D; b

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
/ f. X& g* ~6 @- }! h3 `6 ^% h1 \* P8 ?7 C( v8 c+ S: m) R
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 | 显示全部楼层
要详细些的东东
3 u  |' P% \" O) S" i11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-10 16:28 , Processed in 1.068360 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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