EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

  A' t6 Z; A' f4 _很快速的整理我自己常用的指令9 g6 V# \" F* Y* C) E& a

, p: o" s4 G* r& `- L{:4_112:} % W0 @% G4 N4 u; h( U% Q0 W5 {

% H* H4 A7 v$ h- IMAME DEBUG常用指令, X# H) z: r+ ?" x* l! w
& b: H1 p6 O- F
内存搜寻: ci, cn, cl) ?6 }% Z3 ^( d/ o2 _

3 F+ O! U$ m  O* }8 U- i6 b    ci
) y+ @/ i- m, V2 I! R    搜寻任务初始化, 每次搜寻一开始一定要输入这指令# z2 P: \* B* w  a& r# s; }

" F* K% _4 r: w, z  ?4 v    cn
3 m* t7 v; F$ W    搜寻指令
0 n6 _! g5 t9 Y. a9 G  k    例子:
' K, d$ O% I4 V8 R1 T    cn eq,60! p5 }" @7 m' j# m& b/ ?! c  B
    搜寻目标等于60 (十六进制)
  j) P* F, U; z4 y, {3 O        
& P: r: {! ]1 i7 V+ p, s5 L) G( ^4 y2 n    cn eq,#96- }; T! L' P5 P% }5 E; N
    搜寻目标等于96 (十进制)  B7 F: d( M# c; [. z

/ D7 i- k, ]0 I! T3 p    cn eq
$ `  s% \1 c# Z, E0 Q; Z3 l9 m, U    搜寻目标的数值没有变化
* [3 i+ [' E- d# _3 _9 ~- _2 m# T+ E3 V/ C1 A5 z' z0 F8 B  |5 y
    cn ne
) t3 U+ b7 _/ F  g( b5 B    搜寻目标的数值有变化) `. n" \9 o. G" ^* W
        # K4 w0 W. O" u: ]6 f" c
    cn ++ W: K6 `6 @; j( `* O1 R  d. g7 P
    搜寻目标的数值增加+ L/ L( Y4 h  C) m/ y
   
) P7 n( ?+ y# f8 f6 @    cn -
$ j% L. O# o  H8 Z    搜寻目标的数值减少
, A0 e0 Q9 o! q5 n, Y        
4 H7 X& p  S' ~$ a0 K) G  _    cn +,3
+ E/ g0 p$ C3 Q$ V, g( u8 j) K9 B    搜寻目标的数值增加3 (十六进制): ^# m* g* h1 n, ]

$ G" z7 e3 j* e    cl
: F, A& T  r4 Q& j6 w. s    列出所有搜寻结果" x! o3 R: }! l

; N) Z' L( P. h$ _    cl xxx.txt) O, X, R, E7 C& s8 o
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* L+ c6 w' D4 ~, c3 l8 I

# e" Z8 T( K* o  c7 z4 S. {/ J   
- e; S- ]% C" x3 A内存监视点指令: wp, wplist, wpclear
/ X! s$ F- W& x3 x    例子:
' y4 E) a" T. w) }    wp 1234,1,r
. J1 b* |! H! l  A% p" L      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: q" j! _9 I7 B0 O) j7 S
# F& K; V; |' |
    wp 1234,2,w$ ~7 t. Z1 r1 s; Q. v+ D, ]
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
% Y) a* M& R! z! h/ d: f+ {4 L, N     & G# ~2 k5 n# P9 v7 U! I
    wp 1234,6,rw9 j  R0 H6 c, u/ Y9 }, |, m* G
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
! \) E: ^; _7 f7 s. A, _8 l5 J9 x) q
    wp 23456,a,w,wpdata == 1
9 T. m- W5 d/ d/ k. C& H      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
, R5 D. k& b  t) o7 O' e7 G' L; d9 S  @) d8 ?3 a7 p+ f
    wplist3 b  ]5 ?1 d! u
      列出所有监视点
- }( F! p0 G- @: f9 C% m( Y' Q) U6 @% p& M! K
    wpclear 3
" X2 H7 O* _8 E* N0 ?$ Z( r      删除编号3的监视点, l& i' [/ w8 Q% O6 e3 p0 _8 V0 t

) z( ]- p5 @9 V- f7 b6 |& R    wpclear2 @  N# O4 x4 P7 z7 N* Q% G
      删除所有监视点2 [/ s' g; Z1 p; u- a  b; U

' V1 i4 B1 |. ^3 U      5 O$ P8 e" y- C8 G  H
8 @0 {! x5 N  X' d* b2 S
程序断点指令: bp, bplist, bpclear0 p6 w# Y% |( t" q# k$ r+ _
    例子:
2 \$ r: W. c; E7 p    bp 1234" T2 F9 p5 l! R
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) q) J3 l  r* }. J8 {. D  O6 e. U
: L/ }# X# v4 u    bp 23456,a0 == 0 && a1 == 0
0 ~/ ]$ a! \& Y      在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 g" j  K# K% L0 q& z7 w1 Z# G- v! u4 ?% J) q3 b
    bplist' d. @: j1 f0 X" P( s8 K
      列出所有断点
' N. B% e) i6 L( s1 U: d, q& J
+ S9 c, f4 t) `0 r" c5 U/ r! v    bpclear 30 y& i0 n4 m" Y! l! ?
      删除编号3的断点& B& Q' D% ^& V5 p  a" S% V

# ~7 W. Z% t6 p% F7 j1 }) [    bpclear
$ `, k& W* |- q' W2 ^# {      删除所有断点
9 @( o  o3 a' b- [, h1 |- x& k1 V% S9 B* Z
      $ l. A6 ], c4 _% Z- \0 [+ z
      
  \7 u' t; o; ?- D跟蹤紀錄指令: trace, ^! c6 j1 J- {; u
    例子:
& n5 S, {# h. I# b/ y    trace 01.txt3 s+ Q% c0 g( \
    跟踪当前CPU运行的所有代码, 输出至文件01.txt5 z! `- y% [5 v, w8 [; i9 f

; Z; D. k. N, c, n    trace off0 G5 B* G2 U5 g% }" L: @7 Y
    停止跟踪, 并且关闭文件
% q0 Q) S2 r& ~: x2 c' j6 k
: |! s# c$ C# B" ]! i  |    trace 01.txt,02 i" @( x3 {' W# k
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) J/ n1 B1 q% p. Q) g6 e
8 ~& u. i, p. B# r1 n9 v5 M1 c
    trace off,0
9 a' a3 ]: {' H- k    停止跟踪编号为0的CPU, 并且关闭文件
* L. y7 X; T; E1 v( o3 G+ D' O
/ r0 N9 l1 P9 _) S1 c/ r' _) P6 \    trace 01.txt,0,{tracelog "A=%02X ",a}% G" |: {) M8 A# q; |& g
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 ~( `7 Q8 C+ z/ O    并且在每一行的前面, 写上"A=a "  B5 o3 g& B2 F+ D
    "A=%02X ",a为一个C语言printf函数常用的输出格式
, n" `3 D% B7 K3 s    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入; D' ~; `/ g% T7 F+ g( |. O
    X表示为大写十六进制数, M4 P, q2 ^. `; u

% \& k/ I, M' p; ^
( ^. ?# C2 X+ \$ s1 m: @: B9 {& t  y4 w
内存直接写入指令: maincpu
' [+ Y8 r& s% O/ o/ D# \    格式为 maincpu.[][]@地址=数据2 q( ], p! c% a2 h: D1 {) k
    第一个[]:7 v7 D# W% K; a" N
    o 表示ROM地址  a$ w8 K+ M% w
    p 表示RAM地址7 W% X! U# x, W/ o
- {6 L' n8 H- Q- n% {
    第二个[]:
& l0 a6 o! D, i* h9 m    d 表示4字节
- Z$ X: T' c# M  g1 O4 }( L    w 表示2字节
0 V& S) ]) z0 _$ b7 r    b 表示1字节& L& M! s# m0 u

! Y' r! e) c- R- V' V: }3 ~5 M    例子:% s: k6 k1 l% R, J$ I) u4 T& q' }3 g
    maincpu.ob@1234=FF
8 h  a: w/ k% E* d2 G% `9 J' k/ I    在ROM地址1234处, 写入FF一个字节
! v4 e4 _, n+ _. Y' Y( J# P' `7 G. s8 a1 y
    maincpu.ow@1234=4E71
2 r2 y5 x( h5 P" V# k) u    在ROM地址1234处, 写入4E 71两个字节
# Y* F! l( B0 i9 _9 _6 |! K5 t9 `" u8 v+ [$ J8 s+ `* L* w9 V
    maincpu.od@1234=600A4E718 m+ [) \. e# Y& _3 h- {' Z
    在ROM地址1234处, 写入60 0A 4E 71四个字节; d. O7 e' s/ M  }! d# E
9 @. o- g. M. z( m! r4 P
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写! w) T! Q7 A0 B) J
   
# }+ J* S! v  G7 A: [6 N# a' F
2 w* \) \7 S% R! ]' ?/ ]其他:0 N' l7 r, b% C9 H6 R; v
    dasm 输出档案名,地址,长度5 h( [' ~- O+ ?/ Q% J5 j4 B
    输出程序的反汇编代码
% x* D; B4 x+ [! Q    例子:+ }4 b+ @$ ]% L: x' d
    dasm 01.txt,0,100000
; ~; p* m- @) @3 `- w+ \2 S' c    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt2 u" I* ]& [: b9 v

) M2 b; j8 z) z  S; M    softreset3 D( Y+ }4 h5 r, t" i$ `) v" i
    游戏重启, 但不重新载入ROM
1 I+ Q5 A- Q/ w8 P6 m* Q: f) _5 G% @! y% F3 C3 B# D
    hardreset
& }' e; J% m( r9 k    游戏重启, 且重新载入ROM
# K5 a4 ^5 g( l. g0 w4 }& M( Y. d# ~0 k" S( u) i
    snap xxx.png6 S9 f6 a" q! I( M
    截图为xxx.png7 G6 Z! U; z. x8 `; q+ n/ Z' x7 z- Q
# d5 e8 ]5 O) Z' x! `8 r
  
% q4 n+ a* ~8 f2 t& c2 ^  : }" M" V( z% v0 n3 ^! F
  
% E0 h! S: t: ^. {热键:
0 `+ e! c2 J6 \6 ]/ p    ~ 中断游戏
: r3 I) Q* X5 _7 S: o, O    F5 运行游戏6 }+ N- H2 E9 z8 B$ H  b, ^3 ~
    F12 运行游戏且隐藏调试窗口
$ e3 @3 s: I- Z, A) Y$ v7 Q    F11 步入, 单步执行, 会进入子程序  b1 q1 w* T% m6 L
    F10 步过, 单步执行, 不会进入子程序
. d( `9 U  J# H    Shift+F11 执行到子程序返回  q6 K& {6 k0 M/ ]4 I7 Y$ a
    Ctrl+M 内存浏览窗口
3 I; p3 c! ]7 o9 Q! u" w    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 _* x$ O  T/ E0 N, J" d& B

% B) G# i7 y% I8 J# U% \2 D$ ]: P{:4_94:} : j3 O, c3 g7 L* Y; P
" K  \) I. O4 h

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。9 B: x0 N6 s6 O% k9 c

4 l' {( R( D* j5 u: g$ s9 T; aPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
" C4 ^: H; l7 ?7 r11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-11 06:34 , Processed in 1.065430 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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