EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
1 a& Z7 {" Z) t: a' A
很快速的整理我自己常用的指令
' c9 s- ^8 {* Y  ^2 e- ^' `
/ N; U0 j' z' Q: H{:4_112:}
4 U0 c" M3 k# j& k( l
; T9 w  u% l2 O0 t1 g/ xMAME DEBUG常用指令4 o6 M) J0 Z0 B/ D+ C3 u5 V

! K7 F6 K. j4 r- u" h内存搜寻: ci, cn, cl
# ?7 K$ r* h' j6 C3 u' d
! w0 J8 u9 i9 B, J    ci
/ o, o) B" K- W. L    搜寻任务初始化, 每次搜寻一开始一定要输入这指令, n! Q6 u% W5 h' U/ j- y/ |% f, I

0 W- ~7 A: G. `% p    cn
7 q# |% C% M% N    搜寻指令
8 f4 q1 @( ]' p1 W# l    例子:
! D: Z* q- O  g    cn eq,60
" L6 q' n5 O# P/ R, f- d7 P$ i. i    搜寻目标等于60 (十六进制)2 Y* x& O8 A( t
        0 h; v2 R5 I6 R% a/ H- x2 T# H/ ^9 N
    cn eq,#96/ F4 Q0 _9 E4 K9 q! n; {( K
    搜寻目标等于96 (十进制)
8 O( U, ^- L' W( x
$ E4 E% p4 r3 o! F2 t( E, U- S    cn eq/ h- z- P/ X7 }' |# P
    搜寻目标的数值没有变化
( E; u- _' h. ]4 `% n0 u
5 {" p: A" L- [+ R# k4 w6 m    cn ne! k$ z4 {, E9 k8 C
    搜寻目标的数值有变化$ n( G( G' l1 ?+ q3 c( }3 K+ G5 q
        
* I% B0 f- W+ y) v    cn +0 M) P- y9 r' C: P8 N
    搜寻目标的数值增加
2 I9 v4 I5 r. _' \  T    5 y/ n/ g+ ?* j/ T' X0 n
    cn -  `# p  c2 f' D$ U& ~8 w; f" t" |
    搜寻目标的数值减少# ?6 }( y9 d5 `5 N" B0 M; ~
        , W3 \5 A" W. D/ T% C9 h
    cn +,3
1 r6 \. y- y! J3 q5 M2 \* y" x# P    搜寻目标的数值增加3 (十六进制)
1 ^+ f  T7 I7 P8 f( O( L1 f. Q* \; U0 e% N* c4 T$ ~$ n2 d
    cl' ~  c" j7 O0 K' m3 W
    列出所有搜寻结果/ f" G' h7 A) W5 f

/ O4 ]- F! \4 M) ^- W3 w    cl xxx.txt1 X& y6 J1 m  ]( |9 A7 R
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) }+ V7 i" d. z- E( d' K  h; ^4 W
    : G/ Q0 n5 k9 L% h- F  C, _- n
内存监视点指令: wp, wplist, wpclear5 \  n$ q* s4 S8 _
    例子:
/ n# [  _, x$ @- I7 Z2 @( _    wp 1234,1,r
3 Y' t% Z2 }; y/ ?      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* X9 ~. ^3 R; h# a# W$ B( d4 \9 a) u8 X
    wp 1234,2,w& V$ O- Z" w! x4 _* Q# d
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
- {6 s- H0 q7 D$ O; R     8 i6 M4 K( L! z3 R
    wp 1234,6,rw
, |( ?+ m# G  [& q' Z. V# l3 `/ T      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( y) `2 @9 T% ^: [/ b8 b  }5 _
5 b* H5 i" g5 X. _, r" Y    wp 23456,a,w,wpdata == 17 u$ \7 ?* w3 f1 ]2 T5 e
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ {: X5 D  _: Z8 k/ G1 ^
& a9 G  B7 Z5 m! V    wplist, j8 ?9 K5 x/ a& l1 r
      列出所有监视点
) y# n4 J! P* S" q( p" J' G/ `
7 L: r5 d7 B& z& H9 |. H    wpclear 3
7 u% ~: `+ w0 ]8 [0 t      删除编号3的监视点
% z2 Y7 @7 z6 V6 Q, Z; ~' d* ^; B& ^/ h# a# w3 O
    wpclear
- K# f1 T& h, O  I5 m( V' R' ]      删除所有监视点/ V+ g9 ^8 o& [# n! Q

% E4 k: N. {- f% k* s1 ?  w      6 \) J3 [8 X) Y( C

" @- t4 i3 `% S9 U$ Q% K! {/ k+ a程序断点指令: bp, bplist, bpclear5 u# \. b; f$ @* M: Q9 T) l' z
    例子:
# l  v3 Q( J: h+ D2 F    bp 1234
% C7 v: f) N1 ^0 n' y      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 k$ U# `( q6 g& }
& ?% d) R$ S5 G& Y" Z    bp 23456,a0 == 0 && a1 == 0
/ y+ z4 O) y3 {& \      在地址23456下断, 且中断条件为a0等于0以及a1等于0: d3 ?/ J- `. H

, X4 n1 q  x3 ?* c    bplist
" c- x1 Z. k: A5 S) C* m; d& k      列出所有断点$ H8 T+ \" F9 N" C( w: v

& f& K5 p; v: z* T    bpclear 3
) n( |0 l$ ~6 B) F5 |) ?6 {9 v      删除编号3的断点
) h) i+ \1 z6 W5 @9 g) `, [% E% E8 Z/ X0 P4 \. s8 l
    bpclear
% _/ Y7 O1 u0 t/ C+ R      删除所有断点
$ a. g* F+ R- C7 m  {1 d0 A1 q0 N
      5 [/ j8 u( ?& T+ s+ z2 C
      
' U2 ~" P5 B3 j9 w跟蹤紀錄指令: trace
# _/ r% h4 U; R9 p    例子:
: f# x' ^  i; A) z( }6 u; D    trace 01.txt1 ?- L. P1 W2 I) _: v3 {0 a* r
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
% [2 P2 z7 E: {. c4 S" T0 c# R  U8 F5 S% L) e: f$ z; B
    trace off9 N" h7 E7 `6 W3 Z' i9 _/ ~
    停止跟踪, 并且关闭文件$ K, N. L+ C) E  U8 D

% H' {% J9 s) v. O    trace 01.txt,0
3 T7 K$ d  D, i7 U4 W    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) Q8 y: Y% f7 V0 r& ]2 A$ o: M, q7 H5 D5 a4 k
    trace off,0# E! S* K$ Z2 W0 F8 s1 ]  X1 Q
    停止跟踪编号为0的CPU, 并且关闭文件, v! E0 q: B, i2 m( u

' @+ ?, O; ~5 @' V# P    trace 01.txt,0,{tracelog "A=%02X ",a}
1 N4 V/ c. Z* D/ X    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : E4 k# _6 p9 _. {& P2 L$ O
    并且在每一行的前面, 写上"A=a "
/ z8 X; a/ `1 D( e/ p0 M  [' P    "A=%02X ",a为一个C语言printf函数常用的输出格式
8 ?5 X* A3 L- ^/ [& m    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入  v9 j( l/ |, P: Z$ t, @9 b  |
    X表示为大写十六进制数
! s! z7 ]7 w; \$ Z& X% t$ E" [3 }6 `0 _, Y) s; i1 E
" o" e# K0 c" N/ O7 @- b% P3 Z; y

: \% t) d. ~4 d内存直接写入指令: maincpu
. P, x6 e& f! F7 I    格式为 maincpu.[][]@地址=数据
. i/ P; H1 }- M7 V! O    第一个[]:
4 {' J7 D2 G( L  s" \. Y" ?5 |    o 表示ROM地址
# N. L; c4 E* J4 R    p 表示RAM地址# Q2 h" W7 b, @' |/ u; G2 S0 L
8 N( _8 }" J; v
    第二个[]:3 \  X$ B6 p% ~9 k
    d 表示4字节+ g, S& e: C+ n# ~
    w 表示2字节
. Y$ Z3 S# e+ a: D1 u9 l& W    b 表示1字节
1 t8 w8 x! i8 V& K- T
" y& d4 Y& Q* h, d( t    例子:6 [1 u1 A/ x3 P) K) }) ?! h
    maincpu.ob@1234=FF: |6 L0 X& `3 w3 \/ K  V( C
    在ROM地址1234处, 写入FF一个字节
1 J& d$ \4 k7 B( {2 f2 d
: w4 I- p* N/ D1 |: ?/ Y) A    maincpu.ow@1234=4E71
. ?1 l% f) k1 p2 o    在ROM地址1234处, 写入4E 71两个字节0 g' `  R* y( e( m1 T6 X+ B

) r3 \1 ?) {7 V2 F( Q& L: K    maincpu.od@1234=600A4E713 z$ a5 L* _  s
    在ROM地址1234处, 写入60 0A 4E 71四个字节* M4 w' y! i, J9 Q1 \3 d+ P

4 S; `; G. A: _* X    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
+ ^8 Y& k! T+ B+ j8 [    . d) h+ O2 k3 O* v! P9 m% O+ X

& R5 A+ V! D) Z! A. e. z# O& f4 u其他:
& m9 {$ b- |! E: {6 W0 o/ T, S5 N    dasm 输出档案名,地址,长度
9 M  P3 g: Z" b: y    输出程序的反汇编代码/ A4 i' \  ?" n, _
    例子:
  G, @7 @4 V. P# a0 s% Z2 B( K    dasm 01.txt,0,1000004 `. P: R) s- t1 x- Y3 V* x. |- o
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- ], B% ?2 B/ r2 x6 `' ?' V4 r; E
. l9 Z! T; M% b6 c8 j: A8 V
    softreset
8 L4 }4 c2 e+ H2 ~' y# _( i    游戏重启, 但不重新载入ROM# j' |& j& _+ i( J+ ]

) Q0 R8 l7 w& w: y  H8 v    hardreset
4 J2 }  ?- e1 e/ c. H2 U    游戏重启, 且重新载入ROM: B0 v/ l! A; o0 r9 t

2 L  s6 x/ l  J! z) V, H    snap xxx.png/ j6 T- m9 @: K- b
    截图为xxx.png% X' V- P( i7 c% d& t/ h9 @% t; e

  n. c8 k! o! j- u5 ^8 u  
( g5 ?+ s, `; l# B) T  & \" y/ m) H0 w8 u/ X
  
( W3 a0 j  ~) N热键:8 w0 }) @, \- `2 O
    ~ 中断游戏
1 A1 `% g' R$ D8 K  ^3 T7 |    F5 运行游戏/ q/ k7 C# {: j3 C9 B
    F12 运行游戏且隐藏调试窗口
3 U. D, I0 R7 _! G    F11 步入, 单步执行, 会进入子程序
: j9 ]& G$ j9 h$ w: W    F10 步过, 单步执行, 不会进入子程序
9 v6 k0 g$ Q" B2 {' z$ y    Shift+F11 执行到子程序返回8 ]+ B; Z9 {5 O7 X- v/ a1 f1 }: K. w
    Ctrl+M 内存浏览窗口
7 q' i+ q) z: M' `( @4 L    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; z' h  v. a$ i
. g5 z& \1 _. C1 n# \7 z, M5 N
{:4_94:}
; s# x& d6 O6 W+ L! j9 h- y% H4 V& U5 J

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
* m; k, Y* `0 o5 o8 p
2 `! I% @# `, G) E& x, ^4 f4 mPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
9 t# j6 s3 A8 Y. \$ e11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-31 19:18 , Processed in 1.130859 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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