EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

8 B. \* u% F; N+ K很快速的整理我自己常用的指令% n  D$ \! o2 _4 R  I! a9 Q
: E1 o$ w: M% M
{:4_112:} & M3 m. ~* r9 R
! x8 K; z6 [8 h
MAME DEBUG常用指令' M! ^! C3 G& L9 ~- {7 p! M

  j1 A& r  {: P3 @  T! {内存搜寻: ci, cn, cl
- O0 t4 E+ U! b! I1 q2 Y0 ?
+ N' U( J  x& R( ~4 i# b    ci
( w3 m( L/ j$ [7 n    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# Y/ r7 W2 f" ^$ z5 z& v- K' \  R! Q+ H0 ]; [7 a3 g
    cn: [) W- ], z! q7 E6 V! D, I! Q- q
    搜寻指令
$ Z4 d$ m- R8 N8 L9 ?* e" ]$ f    例子:
" S# g2 _+ Q5 v- s6 p8 Y! Y    cn eq,60
! ^: J: f$ b1 w& u1 T1 w8 x$ W    搜寻目标等于60 (十六进制)
$ m3 G1 V. Q9 `, [; }* M        6 x' H: x5 J6 |& [
    cn eq,#96
' Y6 E. ~& W9 ^6 ]. q    搜寻目标等于96 (十进制)
6 D& n8 y1 U" d: F
; b3 _( q1 T1 ~5 ~  R% S6 u) X    cn eq
6 N" G$ w2 Y" M0 h& L3 f9 ?    搜寻目标的数值没有变化
% ]7 D" E' h. P
2 s% W4 H) h5 |+ Y1 h    cn ne& q' V. q1 s: r" P' l% T1 U
    搜寻目标的数值有变化
8 G) X  h" q! g1 h: k) M% r/ z        - q6 q% e/ e" M: r* o; B
    cn +" x  M1 T. R( {# s* L6 f
    搜寻目标的数值增加
4 g1 ?" P& y, G. ^$ f4 u   
* m1 C  {+ |7 u* Z6 `8 C0 Q    cn -9 }( K( E( u: K5 i! a, ?, m
    搜寻目标的数值减少; n) W5 I6 e( K9 @
        / }% L. ^0 g  ?& q
    cn +,3
2 j9 t: F/ l$ ?. K# O    搜寻目标的数值增加3 (十六进制)
4 \+ F2 T' [/ O) d, g, g
: ]' h9 N: G6 {& N, c    cl: k$ u# P8 K) N% A8 \1 l
    列出所有搜寻结果6 s) ]6 s7 V9 _2 W+ }
3 x. @7 o) y+ W4 M
    cl xxx.txt
4 J5 p+ s  t- P/ k8 I# J    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" v% p; I- W+ i- @
: I: a. P3 t! d4 M9 a! k0 V
   
5 g# X4 \9 P& H5 }& Z* E' v% Z内存监视点指令: wp, wplist, wpclear+ ?7 ]* P- d7 Q
    例子:
$ z+ ~6 y9 Z* \/ u    wp 1234,1,r6 ^6 [/ A" }5 M5 J
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* \9 w  j- k. N* K1 u8 R. C
0 w0 i) O0 d2 ^# i/ T9 z. P* ~0 I5 U
    wp 1234,2,w6 i* ~/ T( J$ }/ j; m4 G3 m7 q
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2/ X' p7 L5 a# S1 R
     
% g# C4 Z, T+ z; W8 [- j2 t    wp 1234,6,rw' E/ v* @: V# E4 _4 w
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( n: h- V4 A: H8 ?: {
0 b6 ^. O: V" K$ ^; Z* T
    wp 23456,a,w,wpdata == 1/ y$ ?4 P" T* X4 }2 t2 X6 \
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1  W* Y! F/ ^- M) W; R3 Y# y

" H& ]+ F1 L7 V! K, m0 @: ]. q    wplist
2 q$ n2 P! F4 e% y& Y      列出所有监视点& C9 l% U. P& ?, q5 ^2 ^  L# m

" e) P0 l; L  T* C+ ]    wpclear 3
8 M* ?# @" T' y7 k& n) G: ]; I  \      删除编号3的监视点
4 z5 x& h; Y) w" i2 C) N. ], E9 y( u7 c' q
    wpclear/ ?, ?& c3 j$ x/ v
      删除所有监视点/ S. R7 K7 @; n" W+ `
$ X+ y- `- D$ ]3 l
      0 R- j$ O9 Y8 m4 r  Q

/ d8 G8 r. x) h0 ~" `1 N- N! y程序断点指令: bp, bplist, bpclear# X% G5 a& ^8 I
    例子:
# k8 Y7 m9 J  ^$ W. W* Q; G    bp 1234
: q. D* o4 T4 p. i6 w) X      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断3 d3 l$ D8 w  M
9 A0 {% @1 Z: \' ^; ?4 e% w% x9 D
    bp 23456,a0 == 0 && a1 == 0
- m1 W/ w: U8 O      在地址23456下断, 且中断条件为a0等于0以及a1等于0
9 R5 Y% A  N2 h/ z
! @, D6 ?1 ~5 T- s2 c1 o    bplist
' E  Q* J* |# h* R& s      列出所有断点
" M6 m, X# F) K/ P9 K2 Y2 R  a. [* V# Z
    bpclear 3: ^/ m" B4 h( W7 [8 `
      删除编号3的断点4 K" l) O: E2 k4 H
3 A1 {, i0 f* u
    bpclear  ^  ?3 c2 m" v7 N9 U
      删除所有断点
% p8 k) p3 i5 a1 ^8 o% r
* g- P7 A' F4 i2 c) O      ! N8 E) Z( d! f& i1 P7 Q! [2 A8 j: d
      
- v# N* x9 d$ H/ s0 `  @- @6 B跟蹤紀錄指令: trace# q; E5 y- @& u: r
    例子:  u+ H; L0 h8 B* v6 ^
    trace 01.txt
* S7 u, C  ~3 g3 N3 u2 r) H    跟踪当前CPU运行的所有代码, 输出至文件01.txt
" Y3 N9 ?$ i" ~+ [% n$ {4 D, l- P- l6 @  J
    trace off3 }* O9 I: y# F( G
    停止跟踪, 并且关闭文件
: P8 q* v+ E6 Z7 o% ?8 ?
1 j+ W( R3 l  a3 l    trace 01.txt,0
4 i1 E) r; }8 {* `    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( R  O& u( I# K; Z$ o; V# s8 p( x3 s" v$ W& ~) Z
    trace off,0
0 p/ s( {& b( D5 h  b8 a& T    停止跟踪编号为0的CPU, 并且关闭文件
3 B- Z- ^2 c/ n% t* @% J, U' Z% X: _! A+ [
    trace 01.txt,0,{tracelog "A=%02X ",a}! b% u6 E$ k$ A6 u/ x0 H0 f' P
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ; O0 l) s7 P& T! Z0 B5 X! T' i
    并且在每一行的前面, 写上"A=a "# t' N& I/ n4 t0 D% z
    "A=%02X ",a为一个C语言printf函数常用的输出格式
7 B% D( ^/ @  o2 {7 Z    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入& N  i8 a! v2 ]5 m' }
    X表示为大写十六进制数8 ~. O8 ?- U4 p8 r( @1 K3 B0 B
8 `9 s: l1 }) a& o; B2 X
/ l5 N& ~: K# ]4 w# p+ `

2 S8 T" l# h# z7 U+ ~; T4 O" B内存直接写入指令: maincpu
" a2 j/ J5 ^" u    格式为 maincpu.[][]@地址=数据$ Z$ U$ F& D: t% B8 @
    第一个[]:
% r% `& m5 w5 c5 }% m    o 表示ROM地址& O1 G) F1 B4 E. r
    p 表示RAM地址, z! R+ q4 W5 [/ X, w  n

, q/ Z( {( o& F  h4 K7 \/ ?    第二个[]:- o# F7 a* `7 D& V% z( ^
    d 表示4字节9 @) V: w& E( k& U$ q
    w 表示2字节! j6 Q. i0 E+ H  n8 O5 R7 H
    b 表示1字节6 M% b; _9 m( d0 \9 m& E/ E" _; U
7 l3 n6 c3 F! I
    例子:4 d, h  R3 A: B6 S4 D- Q; |; B
    maincpu.ob@1234=FF# \0 e% U% t0 Q2 s+ H8 X2 z
    在ROM地址1234处, 写入FF一个字节
! |; m7 i4 C0 A. d7 T
8 l, E  @& N+ y    maincpu.ow@1234=4E71
4 D8 b  L# B6 |( n" o' d  z/ x    在ROM地址1234处, 写入4E 71两个字节
5 d7 ]+ d$ I( c/ x. b3 J2 }- c* o2 \9 \( D
    maincpu.od@1234=600A4E71
' L8 t/ [" M2 l, z9 \; ]7 x; v1 u' _' O    在ROM地址1234处, 写入60 0A 4E 71四个字节
* D; R* @5 I( ~- c( ]) _
/ i/ G/ x' I3 m    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' w, l+ H4 j8 \   
& Y1 K4 i- s( d# k2 x3 w
4 C. i# F5 b4 H$ C  Z其他:
  ?: M- ^+ O' s/ X" Z& y    dasm 输出档案名,地址,长度4 }3 t9 Z. S3 ], k# f' \# o
    输出程序的反汇编代码
- V6 ?9 E- r% b0 i! A2 s    例子:& H5 ]" z+ J) K- x9 }/ \
    dasm 01.txt,0,1000007 v+ w7 O1 k9 \) w: j+ N" f0 n
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 y+ z  k& F. c- j+ x; Y: s
; q# @" c0 c8 [- G# {' l4 @    softreset5 Y7 K- n, z$ o
    游戏重启, 但不重新载入ROM
' N$ k* N; r2 [$ L' ?7 C2 ?" e. l4 e1 l2 F6 T
    hardreset& B, {( _8 T! m2 S  Q' x
    游戏重启, 且重新载入ROM9 g) u6 y. s2 m( l
  u9 H( r2 |1 T, F
    snap xxx.png
% x( g, f* V' G5 ]8 f% ?    截图为xxx.png. {, t7 L9 m6 |) A3 f
3 R2 `1 k) F: N: ?& x
  3 ~8 C; r7 n0 h7 \. i+ T: x
  
( k5 O; f# C: N' e0 s  
: I- @, G) t& A4 G' J4 X. Y/ m2 F热键:; M, s! X" b+ K, |
    ~ 中断游戏: Q2 j8 V, S$ e* E0 L/ ~" x& x( B% }
    F5 运行游戏7 k( x2 O# O5 Y" W+ V
    F12 运行游戏且隐藏调试窗口
# w2 z0 e0 F/ ~- S    F11 步入, 单步执行, 会进入子程序
$ G( E! n) U2 t! O  m! p    F10 步过, 单步执行, 不会进入子程序
5 t3 G% }& J. V8 T9 L    Shift+F11 执行到子程序返回
* K' e9 a* _- A4 \7 t1 ]    Ctrl+M 内存浏览窗口
5 n6 x# F8 Z$ q$ Z( R+ l' a8 H' _    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: t1 K0 C6 e# G' b, s4 }" A% R$ q

! F4 c1 f! e# ~+ m{:4_94:} * ?9 e) ?  R$ _1 q3 ~9 P, }$ t

; f' B" X2 j" O) z% B! F

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。  Q( E' F* g6 r3 F
" z0 v( b  h: @. M$ A8 ]9 a
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 | 显示全部楼层
要详细些的东东
4 e. z% _# B3 N6 x$ g11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-16 10:36 , Processed in 1.080078 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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