EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
  x8 o. i8 U! p" J
很快速的整理我自己常用的指令
: q3 H2 u2 j( \9 |* I% V
+ B" v0 C! f* ?  \" w& M1 X{:4_112:}
5 y4 w2 V/ V7 I$ }
. O. u3 t3 q- z. C2 [1 B6 X2 ^( b$ {MAME DEBUG常用指令
- D6 {/ d& j! K8 Z/ B% K9 ~  w# @1 V8 ^- M5 f) I; g7 e
内存搜寻: ci, cn, cl. O& V0 r' x. c5 m/ [( N: f- b

3 j  d4 A5 [8 r* r    ci6 }) O3 I& ?0 F
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* B7 c- [5 ]" E& ?% a. Q# M* Q: S! o: i& O: e5 \5 P, j
    cn
! b4 Z( I' O6 v- U, H    搜寻指令
! b" R# r3 T. K: q- ^( |3 K    例子:
/ P: o, L8 R+ G4 _, a+ h; D  b# r2 t    cn eq,60& B4 X, m7 W5 J8 r$ R8 J+ Z. T1 R
    搜寻目标等于60 (十六进制)8 r% t% j6 `+ G# A) e
        6 t2 j1 M- `# O4 Y& V2 Y
    cn eq,#96
9 U5 w: B7 r6 ]    搜寻目标等于96 (十进制)
* c  L  T" H; x( _& k# e3 u3 M/ L( m: C4 q+ z/ v7 }/ a; W. h4 l
    cn eq
% l) X6 ~) W4 \9 U$ I    搜寻目标的数值没有变化& m  q3 _2 V3 R3 V3 }

" B: B' I" q8 v3 V, v% V    cn ne
" g% \5 j7 Q, m# ]9 z" Z, n2 m    搜寻目标的数值有变化) @8 ?. P0 s# b
        
' d9 P8 w1 f- I; \    cn +
! ~: D- O8 D/ i) A5 J  D    搜寻目标的数值增加& N' u1 w6 I& o$ N6 \" T
   
* ^7 D3 \( |8 S    cn -
; Z. ^/ {# ~. E' D2 y' S    搜寻目标的数值减少
; @* D4 ~: d. }0 N. D+ F        
, |) q( A  \* J( S' Q" Q. P! V" `  |    cn +,3
$ {6 s/ [$ p7 @    搜寻目标的数值增加3 (十六进制)% [5 J( K2 N) `! H& e8 e) |

% t, p# ~) x! n- ]5 O    cl# K3 e5 W# v5 J5 p) V$ I/ a
    列出所有搜寻结果
4 y. k$ V+ N3 M+ ]8 u: K/ @+ N* n9 S1 S/ R; q/ M! n
    cl xxx.txt
' D2 @4 ^+ \8 s4 Z    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
2 l& _& K, v/ G- y, o  h* D. K1 p; X5 L7 G
   
$ L4 e% n1 ^+ p4 d+ B4 `! Z! v内存监视点指令: wp, wplist, wpclear
; R2 U5 w" N7 O! V    例子:
) [, n% ~, }( A0 B    wp 1234,1,r1 W0 h& k6 P0 a5 [' u
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; u2 u& T1 O# |% z0 P) M' @
& B* e+ M. @: l+ e4 U" }% P
    wp 1234,2,w
- u1 ?! x9 O. w      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& s+ S! w) l. H     # l  p( \1 H0 x, C
    wp 1234,6,rw& z. V, ~' @: r/ u
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度65 `" d5 P8 h- I! n' i- R

0 e5 g, r8 w% g/ r8 i    wp 23456,a,w,wpdata == 1% f0 [( n, r+ |' |
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" B+ w% d2 J- \  t4 s: ]0 I9 q) [! N& W- a/ T# q) }
    wplist
; X0 T- J  J7 W/ s( E      列出所有监视点: ?) g0 X; p, {

( J6 p- r( J' G. v    wpclear 33 E# t/ ~& l4 u1 ~% D
      删除编号3的监视点
& }" w$ `: C; G4 {5 L) l" A. v! R
    wpclear' o6 \! B8 j6 u
      删除所有监视点3 P3 y& y, w5 s7 y. F+ G( k

! x! F! c- `  U; {+ O6 M5 ]      
- i! ]' C8 q  k* `/ B! x3 a
' O8 `. ], C9 ?& H& v0 f5 |3 E程序断点指令: bp, bplist, bpclear9 Y" M( @  U" U% [9 t2 E8 |
    例子:  |. h" C/ j( b8 [6 S- s1 Q( H
    bp 1234; W1 S. K% o6 ?9 s
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) ~0 d4 E1 b" u0 z& d0 Y6 R- d! l' ?  [- u0 d. k
    bp 23456,a0 == 0 && a1 == 09 X$ V! Z% \2 R4 P8 u* M4 j
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
6 N; Q! g; y8 Y/ r0 r- Y
! a# U  i9 s- I. N' a; T( z; r    bplist4 G' O- x3 L; @+ t: D: V
      列出所有断点6 n) Z+ z+ ]- K* }6 n; A

! y" ]! b7 Z* C4 C* ~- g- v$ n    bpclear 39 Y. F' J8 K' p8 ?6 c6 a; M. F
      删除编号3的断点
6 S1 S) `0 s( _) u6 V5 f$ P5 Z; E1 M+ k6 \( [* j* o. b  Z4 K
    bpclear8 X% H7 R9 o/ A" e# F0 `. a/ A  S
      删除所有断点
" [6 b, j5 j0 {4 I2 O
1 p0 ?+ p* P5 [0 W      2 w! G. @, P4 g0 s. L
      
% n) }2 }: n/ \跟蹤紀錄指令: trace
8 v+ x# |& b$ E6 M/ z4 L$ o    例子:- ^* W9 {( y+ S  z$ |
    trace 01.txt& F" e; e+ D7 S) T
    跟踪当前CPU运行的所有代码, 输出至文件01.txt: n4 L+ Z2 A9 O# W4 f/ w& A2 q: K

2 [3 b$ B+ ?- T, ~    trace off# j6 A2 C. j. w2 A
    停止跟踪, 并且关闭文件" r. `3 B. o- W( ?* v8 }- r7 c) y" G

5 N9 z5 D5 @7 ]1 k. H+ E  Z. t    trace 01.txt,04 D/ \! u  J4 `1 S5 I' S
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; J% z: d, I: s
3 c! Q+ a& B/ Y0 W    trace off,0! d, y3 @/ r& ]9 t* p
    停止跟踪编号为0的CPU, 并且关闭文件2 l. v9 H; L0 \( ~

' a$ U2 @! s5 k    trace 01.txt,0,{tracelog "A=%02X ",a}5 v( ~+ s0 x& M/ w3 I$ h7 ]
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ' A$ \% d+ R9 ]- w/ X. T  f0 Z; _5 D
    并且在每一行的前面, 写上"A=a "% n1 F% }: _0 |/ s
    "A=%02X ",a为一个C语言printf函数常用的输出格式% W1 i- {/ o% A
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 Z9 e( o) F, c/ X8 {
    X表示为大写十六进制数0 _( I0 a' `* V2 x, A, G: v3 S
0 B8 y+ [, z1 q' I2 x# N+ ?6 K

9 r1 @; n/ e& F1 M' U- L; m" D2 D3 y; m  L& p: n. y3 }
内存直接写入指令: maincpu( L9 {0 \2 V- J* v8 A' @
    格式为 maincpu.[][]@地址=数据
" s& ]) b" O7 z8 }. J  h) M4 A0 j    第一个[]:+ [. E3 H; N- Q4 u3 \
    o 表示ROM地址
  ]. N- J9 V+ U4 l, ]    p 表示RAM地址9 k. ?* b# `8 G% R
1 s6 F! t$ H) w9 b: e* ]/ f
    第二个[]:3 q7 j0 G, v; i# m% T
    d 表示4字节. O1 ]2 S8 U  \) @
    w 表示2字节
: u1 e* N5 D- R  o5 d  ?5 t! U2 E    b 表示1字节7 r) T3 l" B. g5 d. L
4 K; l5 T0 {, u9 R& @" D
    例子:  X8 A% _6 F- u. k+ l; G
    maincpu.ob@1234=FF
+ H& ?( i, k5 E. V! N0 N7 U    在ROM地址1234处, 写入FF一个字节
) n& P' O* a7 S$ S1 c1 {+ l. X& _
# ]) q7 o" U- }% U    maincpu.ow@1234=4E71, y( l- P8 h' [3 N8 g
    在ROM地址1234处, 写入4E 71两个字节) U( N* w  |/ }; V( E  s3 q" A: e
7 L& Y  J4 C9 l7 o0 h# f, n( V9 }
    maincpu.od@1234=600A4E71
7 Y7 y, ]) w+ x% V* l3 @4 j* J    在ROM地址1234处, 写入60 0A 4E 71四个字节9 K1 S# S( l- [: o1 {) s

4 g% K  L* z0 Q( y' ~, }) W$ V. d3 ]    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 k; d6 t. Z* n6 f
   
, C3 }8 X* f3 ^. u$ ~
& _$ [0 |* i7 p4 G: l6 v6 c其他:
" V# L& Q/ L) C# w/ y; H3 t6 N* L% J2 c    dasm 输出档案名,地址,长度
5 H- o6 s/ T, h9 U2 V8 I5 ^: h    输出程序的反汇编代码, c+ |3 F7 @2 R% {) A4 N
    例子:  H( N; g% E5 X( h6 u$ a
    dasm 01.txt,0,100000
+ B8 \3 e4 g  @$ U    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) U' h9 x1 ]6 f4 k6 L* Z; X" H) v! H7 W( Y) H3 _  v
    softreset
" y* G  D" m, t# w    游戏重启, 但不重新载入ROM
6 K$ _/ i* J" f0 n4 K" E  ~% u$ {! u$ L; f) S7 }9 Q+ n9 k' h
    hardreset
+ D0 m' f# F6 Z% T8 U    游戏重启, 且重新载入ROM
- H# {: v, s. g2 x1 `3 ~! Y( N8 ]1 `3 ^" m  w
    snap xxx.png
+ L8 E+ ~. S4 Q& z4 f    截图为xxx.png# p: ]: v" L  d' B; P8 ]; G. V

6 |' U7 n1 ]- [* Y: K- v* j* \  , f4 C; i9 T7 O1 J  t/ M
  5 V, V& y/ }! Z, Z- U3 I
  
; P! c' {6 l+ \5 x0 l4 M热键:* c' G5 ~, N; F* b+ B
    ~ 中断游戏0 z" m) [9 f: l$ {) w  O
    F5 运行游戏0 y# a& ^# d, `
    F12 运行游戏且隐藏调试窗口
/ ]2 F( J3 x, z& ^6 }, P    F11 步入, 单步执行, 会进入子程序
$ p2 S+ P; o; i4 N% A    F10 步过, 单步执行, 不会进入子程序; q1 i; N) [+ O  _! S
    Shift+F11 执行到子程序返回
( R. B( a" k0 W! U# A$ {: p    Ctrl+M 内存浏览窗口5 v+ _! u# F, N4 X8 {% }$ h
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) P; a5 G$ @1 D2 _* B& w; b: L
# F* Y: o: F0 x" G* C{:4_94:}
$ U4 \' q1 v, R. t# Y. W. C3 I' `7 I/ G8 |

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。8 x0 o/ s6 f/ E9 f" O1 X0 i
: t5 V1 j' v  I- s! i5 w. V
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 | 显示全部楼层
要详细些的东东7 R) m3 T4 U2 [
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-14 03:24 , Processed in 1.090820 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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