EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

3 q3 f5 G5 G. l/ _! j5 a很快速的整理我自己常用的指令
. l* s% ~. v/ m+ k# f. U% M" L' T: b% O* E7 K
{:4_112:} ( Q+ n5 [8 f" \3 |6 A
8 O( M6 f7 C  G$ o) j! O$ a
MAME DEBUG常用指令
( @3 f1 R) F0 ?: M: |0 W, H& k( N2 m% t! y4 Z* o6 g
内存搜寻: ci, cn, cl7 q5 v$ q- O& `) e6 Z
  F7 G' ?( j, X6 K7 N% J( n# t0 O
    ci
& h2 E& F( Q4 C' m2 U8 f4 \, }4 M    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, k- C1 ^8 i$ k$ }7 w7 b- o/ \$ \/ f9 V% m* }$ C
    cn, H" O/ j0 h% g+ c9 I8 }" E1 q
    搜寻指令
9 a4 `+ m" u+ h; i4 Y    例子:
4 w- x, j7 l! b2 x. M' J    cn eq,602 x0 Z" t5 l, T5 ]
    搜寻目标等于60 (十六进制)9 G4 V5 H& ]0 f* a" X
        2 _: J  s: W7 ?
    cn eq,#96% s3 q- \; l% E3 B+ n4 l+ E5 D) [2 {
    搜寻目标等于96 (十进制)
. r. k$ u- h6 U; y* r
, j0 n6 K  D, ~9 m, n. b    cn eq9 C# _" J- u4 F. k  C2 i
    搜寻目标的数值没有变化# J2 r$ C; B) L2 l% x: m$ ~$ x

$ j- b; U6 t$ N& q    cn ne
+ S) P1 D  \! ?9 G; \$ ?    搜寻目标的数值有变化( X" v/ z. o! h; p  \7 H
        
- U2 c# U! X0 I' J0 Y    cn +9 k* A# T+ K. y
    搜寻目标的数值增加: C; f3 L) v7 K1 K# K" u$ E
    - z9 N. h4 Z3 S: [1 B
    cn -
* {9 d$ I( u# o5 N4 q$ ?3 z6 Z    搜寻目标的数值减少# V9 W% ]7 j/ Q- o
        
$ B! |! D# T+ _: O- O& s2 a    cn +,3
" J1 g1 [& q; ^# i: i    搜寻目标的数值增加3 (十六进制)% e, p/ H* k9 G8 `1 c% o% z4 E

2 n) w7 E) V4 K6 n8 ^/ Z" z* J7 P    cl
* D9 D8 N# A0 x3 N  t* h) e9 p    列出所有搜寻结果. U( _7 t$ V! _7 x4 E

9 p9 d. x( Z5 U; `    cl xxx.txt" ]% o( Z% E1 V! X9 w2 Z4 K
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% t, C9 i" Q, T; W8 j; ~, K

- o8 N0 J) E2 b, s3 n9 D8 W   
0 a, C# J  ~4 T. g+ j* _( u内存监视点指令: wp, wplist, wpclear
6 g+ T# A3 q+ @  U! i; N2 A    例子:
2 z$ o1 s% b1 b- S4 g- k4 R0 H    wp 1234,1,r
3 ?% b0 i$ X( Q5 h$ o: T; Z" `      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 [/ ~& e" B% a2 G0 p4 k0 }. ^# `
' d! }, r5 W. z3 k1 V    wp 1234,2,w7 o$ M) ^8 a7 O0 R+ E- u# e+ N5 v
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ w% I4 g( O, x% u4 _" {/ V     
  O& y: X, G: j' u# M7 B3 B9 l    wp 1234,6,rw/ U* U, l6 c  o3 S9 B$ ?
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: q* R, _& `4 {8 S# |3 N  w: \: Z  a( A2 G% y2 _
    wp 23456,a,w,wpdata == 1
1 l/ m2 x' l3 V  d/ R1 x      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 n  L  y9 ]) @9 E6 d; G9 k5 T( ~" h3 y5 j4 c# ]/ }
    wplist
/ a( }2 @! J# w% S! T      列出所有监视点/ `6 b: [/ j6 \) f
: L  ?- m2 B& f8 `$ D5 A4 ^  F
    wpclear 36 T  f* ?2 ~7 ~7 a) P+ ], c
      删除编号3的监视点0 v3 f" y3 a. x% d2 v& F# t

; t% {6 V( L, P6 N    wpclear
" ?+ M5 }6 D$ j% y( P      删除所有监视点4 i8 O4 ?& w# A) e: _4 q3 B

9 W5 t0 ?" R( ^: r! ^; e      
) d( x$ l0 T7 X' e
" j' J8 c; S  Q, b& g1 s程序断点指令: bp, bplist, bpclear
0 u2 Z4 V+ [: N1 N: Y1 W5 E    例子:. q8 x+ \9 i4 W1 t, q
    bp 12346 R( |- _3 ^  t/ T! q. O* {
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 Z* L+ A' P3 y: _
6 M4 ~2 P% u  o% i+ `    bp 23456,a0 == 0 && a1 == 09 o% M; b; `9 ?7 m% A& ^* E. J0 R' r
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
6 c0 x" }$ A+ k/ ~( z+ G8 W
/ z/ R6 z" P& K! q3 o    bplist. Q! y( R$ H6 S7 O
      列出所有断点& \& \' ]) g, `1 `& S" G

+ ]$ p/ ]* b. F1 W- v0 a9 S    bpclear 3/ J4 p. W+ k! V9 M# z5 `8 i% t
      删除编号3的断点& N( A- n  X6 {

6 m/ M0 K/ t& P3 \8 h' x, q    bpclear+ x8 C+ b3 K3 s6 H: o& m. A
      删除所有断点- m/ N- g6 _  q4 A3 a5 |
/ C8 X4 y% M! d
      
! `) j( ], v$ k- _- W      
3 h* r; {# G) N# p+ X' D; h$ j6 e跟蹤紀錄指令: trace  t" a5 f( C+ p: O& c
    例子:- I% @, M4 ^# Z2 `* H/ M/ M. N+ j
    trace 01.txt' h+ X( y2 H6 D) {" L
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
* X( r& Q/ }  e6 i& l0 _
5 w7 ]9 W, k* P2 @& u. x% j    trace off* J; v& U' h; d7 D2 b
    停止跟踪, 并且关闭文件
$ M, V  j* [, h; }) q
9 A& d- \4 A2 z+ Q    trace 01.txt,0
8 X7 Z' m/ P) D& u( y5 ]    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
  F2 C) S7 t2 s) N9 ?" U+ t; b) I* g) l  Z4 i3 c* L: e& W
    trace off,0# D' P0 M8 G) e* ^. H. V) z
    停止跟踪编号为0的CPU, 并且关闭文件' t4 y9 p. Z4 K( Y) z

' X! F: |* A9 `7 ~. r) d: `    trace 01.txt,0,{tracelog "A=%02X ",a}
5 O) W. m7 V1 `" W    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 8 n( [4 W% a9 `2 o, `) k2 P6 Q
    并且在每一行的前面, 写上"A=a "8 a6 I7 w) i8 W2 Z7 T8 Z
    "A=%02X ",a为一个C语言printf函数常用的输出格式
* o' j1 }  ?9 ]- k2 v; Y" A$ l    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- ~3 i3 {( Y+ A; d9 b
    X表示为大写十六进制数+ r+ k0 \( V8 _+ f( k
- E5 w. b) _0 G9 g
$ G! r7 U) ~8 {1 u2 T0 |" {: @
, K1 {: |2 X' N2 o: T
内存直接写入指令: maincpu
$ R1 R% {" h+ x8 Z    格式为 maincpu.[][]@地址=数据5 k8 |. S0 K& _3 O. ^: k
    第一个[]:
$ b1 J  x+ B. n9 y- o: P    o 表示ROM地址1 i  o. \* l2 O2 Z% ^+ ~+ n
    p 表示RAM地址0 E; I% s! p0 e7 Q1 j/ n% b- A' E
' a. O: v- }+ a) Y' f4 ?# w" z9 O* m
    第二个[]:
. Q; o. H% v% S0 T. u8 @    d 表示4字节
0 h* B# C5 O" ?    w 表示2字节# N/ l9 W* v, e" x0 r
    b 表示1字节. I+ a4 U2 A0 a
/ l5 h0 h$ Y- W' G
    例子:
; y. H/ u) N% e6 [" W1 L* J/ ]* a    maincpu.ob@1234=FF% ?4 t8 b' t/ w- W" d' C
    在ROM地址1234处, 写入FF一个字节0 z1 M* K; ]$ |8 o6 W/ K: X
/ b1 e( h0 i& ~3 ?
    maincpu.ow@1234=4E71
8 F4 N7 ?* `* r" F1 w4 I" |    在ROM地址1234处, 写入4E 71两个字节2 }. J: @8 b( |: Z

6 S# m6 u3 N5 C0 `/ [% O    maincpu.od@1234=600A4E71
/ x" I1 n7 n) G% X$ D- T1 s    在ROM地址1234处, 写入60 0A 4E 71四个字节' `7 S: i9 B) U3 e# ^

5 ^4 l# ~5 c- c9 d$ _7 }    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. A- f* R& G$ k% F" ?    2 X& ~: N9 l' E. p

4 O& v0 {9 X# W其他:, X1 y! H& d/ ]  @
    dasm 输出档案名,地址,长度% X! q) t+ `" O. M2 W; f
    输出程序的反汇编代码
: _' u) p3 z7 Y0 J    例子:
3 E. t0 S6 t* K' C5 S* U& P    dasm 01.txt,0,100000
; |" V! n' R4 B. N0 ~) ^    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# t9 r" L( G( `' D: U4 z; v! }9 p

+ L1 F' `2 {6 D! {8 A+ k. p    softreset
+ i! p0 B; x5 o    游戏重启, 但不重新载入ROM
7 w7 f* d2 m' s7 h- G) ^. {$ E6 f! A2 Q
* `- z9 N; N0 l% T# \% Z    hardreset
+ Y. L9 j# ]* q. l& ~    游戏重启, 且重新载入ROM7 x9 R6 P- B, o

3 O9 T0 F# b: L, a    snap xxx.png! {) I# Q; `% ?! E# V
    截图为xxx.png
# `$ W0 D0 h: w9 {5 O# l* i  s0 X+ z3 g
  
2 @, N4 W" o4 j  5 n$ @! I$ s0 E6 X5 C/ u# q
  
. ^" @; Z/ U( g, ^# K+ o5 E1 v热键:# ^  \9 r3 X) Z9 R& y3 O: \
    ~ 中断游戏
* K/ x6 e- K" J- |/ E6 J4 |: @    F5 运行游戏1 M3 o1 v# H4 V! X5 e3 Q/ q' Q
    F12 运行游戏且隐藏调试窗口% s7 h. [; S3 M$ r+ _
    F11 步入, 单步执行, 会进入子程序
4 z# _/ i% J  T: |6 m. Z    F10 步过, 单步执行, 不会进入子程序1 N2 `* [; D3 W1 G' P$ }1 o
    Shift+F11 执行到子程序返回
/ @6 I" s: a# i    Ctrl+M 内存浏览窗口
: Q0 ]7 l) [- D6 ^( b4 l+ d    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 S: R& b# R* D3 d, U/ ]3 I2 n6 G9 p( e( g
{:4_94:} 9 _0 P8 t& V/ a

# z  P+ u! K) `5 X$ f+ X4 I+ o

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
6 d" m# t# I+ p, i3 A" `9 H+ m- [( \! N, Y$ ]
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 | 显示全部楼层
要详细些的东东2 u6 Y3 d. C6 Q$ n( J+ Z6 W& q' U
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-8 16:40 , Processed in 1.068359 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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