EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
! D! q6 d3 n1 U2 K; Q; a
很快速的整理我自己常用的指令$ ]6 f, l* L! U1 ]$ |

6 O+ N& c% g8 w9 o{:4_112:}
! h3 L- O2 G* H$ M' l/ C  D, F5 N# l' u+ G, ^
MAME DEBUG常用指令
6 V4 `! z2 f1 W' r6 U* n: ^% P( q/ I
& t) v+ q- f! {内存搜寻: ci, cn, cl1 O% l& F$ }) z& }

7 u- J1 G# c. a: t/ h( \    ci
! c( r4 E; h- `9 |. H    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
; G+ z& a5 Z5 M% {
. t  z; A+ Z" \, Z  Z    cn
: s: _3 j8 k4 G: V8 p6 x5 u    搜寻指令
6 [" c" H$ B/ {  u6 ]: ]7 i1 V    例子:
# U, k" }  B( g- ?    cn eq,60
, E5 o2 c* ?# Q! y1 t9 @5 a    搜寻目标等于60 (十六进制)5 ^/ `3 b! G8 _# b- n
        
" M. p: u* a) f9 |    cn eq,#96
8 M2 B5 F/ |/ J1 m9 P) f    搜寻目标等于96 (十进制)
) Z  L( l* e* Z; \* H+ {" {
9 B$ a1 T5 D) t9 x4 L: L    cn eq
+ L9 V" m. I' ]( _    搜寻目标的数值没有变化& Q3 }2 w$ W* x4 Q# ^: G% c0 j
; q* h. A4 k2 V0 m8 Y) C
    cn ne+ S- D# y" Z" H0 E  K
    搜寻目标的数值有变化: E' ]1 B5 k' l  @
        + }- x' s& D' g, _2 H7 n7 E
    cn +
1 ^' D" m# j( {1 K  d    搜寻目标的数值增加$ g+ o3 k. b* F6 ?, u( |* p* n
   
( }1 M. O8 K: Z# D) H- g    cn -
; I9 ^4 O! Q6 {* a    搜寻目标的数值减少1 R! l0 h; I: G! A% Y0 k# @
        $ ]+ v+ G) [! b* ?7 X0 q
    cn +,3, T: J! Z  |" X  Z* K  y. v: M
    搜寻目标的数值增加3 (十六进制)( G6 @4 U5 Q' ]: A9 b5 `7 K9 p
# ^2 b$ Q6 Y- k( }2 u
    cl
: h; m3 I( J& `' i9 I% m! e    列出所有搜寻结果
2 e/ C* Z6 }$ {4 H
' L' p9 H* U+ _* L. Q) u2 J    cl xxx.txt
' b% r) V7 w/ y) O    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式. V+ u& h; W9 G/ k) \  Q
6 p5 j" P5 Y& `& Z. K' t
    0 Z  W# S( u, z* L0 u+ G  c0 a
内存监视点指令: wp, wplist, wpclear* z( m5 E/ m: v
    例子:
8 o7 Q. i4 G. g6 ?& [! {    wp 1234,1,r: \; H! s. E9 R  J' x4 ]
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ r2 I' n* x' E2 S; I9 o5 U9 w5 y
    wp 1234,2,w
5 Z& S% U5 X1 l% k      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ t/ z3 a( h& Y* r9 w$ [" {% w  D     * }& U& B( [( f% b& ]: Q. {, r
    wp 1234,6,rw6 y" z# D5 V% a0 h2 u
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 f7 e7 I  p' ?3 v
" }& E% e1 @* T* x( z9 k
    wp 23456,a,w,wpdata == 1( b" x0 Y" [" [- Y1 [
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1) z( |7 j: e6 g: s4 m' [
: y; |  f$ S& N! r; ]* N
    wplist! k& z3 {5 y% i7 K9 ?! R- \
      列出所有监视点2 {4 a# M& w3 S0 w+ H

- K) H$ ?  u/ [    wpclear 3% ?% m' D1 A( k+ c" J" B
      删除编号3的监视点) V8 T. x) M' T( i$ j/ E! Y6 c

  i; a8 D9 y2 g! S    wpclear
7 r: Z% O& G, Y3 K      删除所有监视点
0 l# U% T+ ^6 d; ]% F6 K% G5 O0 R: C% C6 _" x( M
      * ]# R  O& U1 }# d! t
+ Y" ?0 h' h  c1 L( I, r7 I
程序断点指令: bp, bplist, bpclear8 c# H4 F* _, h3 y+ `8 J7 A* o
    例子:
" H% @# q" H! T% D1 b) ^% J    bp 12341 O3 U0 m7 Z0 H, r
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, h6 M$ s, s4 s. `
7 d& x; C9 E5 y5 _
    bp 23456,a0 == 0 && a1 == 0' w5 C& y" E7 z$ |
      在地址23456下断, 且中断条件为a0等于0以及a1等于0  ~3 @% d* V, W) t

  M4 [' N, y. U    bplist
0 h( r( I2 ^! c5 S      列出所有断点
" @7 i2 W  o9 d5 S5 s
1 F6 {' P* U6 `, N* a    bpclear 31 b4 F5 p  Y+ l# a* r0 l
      删除编号3的断点
3 ], T, _/ C7 X' Z+ o
% q" n  N" z7 |* k    bpclear! d, A& ~' x- q9 k6 q$ ~
      删除所有断点; u3 ^  o4 A9 Y3 B! x7 z

0 V$ D, K- o, E6 _- t+ `      
& d' O0 ^" K9 l      
" B: i# m5 e5 f6 _- [跟蹤紀錄指令: trace. {/ m4 T& R! J0 e6 z: K
    例子:0 \! H+ b3 G1 S" v! |2 }
    trace 01.txt
5 O3 A: s. R; k" O) q; M    跟踪当前CPU运行的所有代码, 输出至文件01.txt/ y6 Q9 `8 U! s! F1 m

( f! `7 r) y. }% a4 ^    trace off, `0 K) l4 ~7 R" F) V+ ~0 _& _
    停止跟踪, 并且关闭文件* W: a1 m( T/ R8 ~: l; t$ {* _0 @

3 r% s5 e3 j* ]7 b* ^/ d    trace 01.txt,0( E3 E3 T8 w1 o% U, W4 ^# r
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( @5 ]* ]/ l* H3 h

; i7 [- t3 g+ s    trace off,0, X( P- H7 a1 o1 T
    停止跟踪编号为0的CPU, 并且关闭文件
9 q/ Y/ z; s2 E2 t
$ x2 q& p' c/ X    trace 01.txt,0,{tracelog "A=%02X ",a}
9 y6 F) r' }* i, `4 u5 ]! A    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: Q: e2 s9 W, d* c! c% i1 w    并且在每一行的前面, 写上"A=a "# K% Z0 J  f0 S- w0 x4 i8 y1 k
    "A=%02X ",a为一个C语言printf函数常用的输出格式% g' `6 x2 I& B; j* j; \
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入& _. |* ~5 y3 g: A; v
    X表示为大写十六进制数
6 w0 X) _$ ]# E5 U% m: R3 ~& f8 Y& O& i: [/ ^

5 V& F+ B9 r* Y. ]+ S( i) m
7 j0 r) ?9 ?' Q2 T, Q& V4 G6 E内存直接写入指令: maincpu
3 S# J5 r$ V# b* B; v( z! e& h    格式为 maincpu.[][]@地址=数据( Z' R3 t8 h5 S* {& I" y
    第一个[]:/ w! S' [+ }/ B1 {/ |1 S
    o 表示ROM地址9 @6 F7 [* H4 D8 B( W) b
    p 表示RAM地址
: S' P$ `) \6 W! G/ j, p  y" |  y, T% Y, |1 a% E
    第二个[]:
8 f) B8 {1 M$ J' \6 E5 [" S    d 表示4字节
: z& c4 j2 B9 H3 i  t8 q    w 表示2字节
7 l" Y3 T$ l- @: Z- z# R/ i3 k    b 表示1字节
( D8 W8 ?! T1 F/ m7 o9 r; B8 I4 \# M  w" [, g) _5 M$ M
    例子:
/ ?8 e5 o* f$ s    maincpu.ob@1234=FF5 J7 @5 a# x" C* U* h/ ~
    在ROM地址1234处, 写入FF一个字节- b0 r7 o3 t4 L2 M
& S; B& ?. h) f6 o- j/ B  W+ m
    maincpu.ow@1234=4E71
5 `" `% b# r4 l3 a5 h1 D. ~    在ROM地址1234处, 写入4E 71两个字节
" p" S. e" Z$ j! s+ D5 U5 o3 B6 Z. H8 u9 C, W
    maincpu.od@1234=600A4E71  P  e4 H7 q3 u5 d) |
    在ROM地址1234处, 写入60 0A 4E 71四个字节" F4 j' u: U- @/ o7 t6 N  T7 o2 N
+ w) ?( _* h/ F( U, E4 o
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 D! m: \8 q" b  }
    + `8 l3 O1 q( h

+ W  K: d; @5 C7 f* F其他:! S# t9 K( e. U* ~  ]
    dasm 输出档案名,地址,长度& f6 l0 a) z7 ?, N
    输出程序的反汇编代码! M4 A; k: E& ?0 A; G6 o% b
    例子:! R8 A+ ^5 N) }7 f8 k
    dasm 01.txt,0,100000
# ^, O7 G4 B$ \4 J- B- k+ X' n    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt) X; s, R% {- Q2 h4 ~
: N% J' ?+ _. V- x4 z1 T. S/ {* F
    softreset" ~1 K" k$ e9 E, A6 K5 n9 g8 W8 O
    游戏重启, 但不重新载入ROM
2 q, ]0 B2 h' F5 L
0 P" S/ R/ g; [5 q    hardreset
! G, K9 z4 Z( ]1 K    游戏重启, 且重新载入ROM0 p$ K. X- e' `5 D& e* y9 W) B

. Y+ w2 s% _) e5 D    snap xxx.png# P3 M% E7 \9 X8 f6 i# @
    截图为xxx.png
# z! U0 s0 m% I. p. \$ q6 o0 n. L- b3 n* I* I6 O
  
% o$ V  @; u* _+ O- x  ( T9 T+ m9 u; t2 v" H0 z
  
8 O& y0 p) @& F  _# L) R. q0 l热键:
) I6 D* C1 e6 W" {$ D# |    ~ 中断游戏8 g) l+ b! \$ ]* d* k! g2 z
    F5 运行游戏/ q- ?: ?. E" d; e& n, b; U
    F12 运行游戏且隐藏调试窗口
1 Y- H+ m0 n7 {1 n    F11 步入, 单步执行, 会进入子程序
3 |- F4 i/ B4 o! b, J* j$ H    F10 步过, 单步执行, 不会进入子程序
9 k' M" O( ^) S    Shift+F11 执行到子程序返回
* C0 }4 L/ i2 U    Ctrl+M 内存浏览窗口5 g# ]( ~9 c: a* q0 r
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
; b  G( u5 B% }+ B9 d# U% s8 l
8 T, |3 D3 }& F7 y{:4_94:} ; F, n% c' c7 K

; s/ Q: E/ x0 q3 r8 k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, V: ]1 i. [0 Z1 P

5 I4 D" ^* ]# ^- L; E+ gPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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* y8 E; |1 N  q. z
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-9 12:30 , Processed in 1.073242 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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