|
|
/ ]& }: [$ `0 k; b' [很快速的整理我自己常用的指令 ?# W% L, g) c* R: p6 {7 b; Q
: \% ?" m+ @; x! x{:4_112:}
* l, ?% ]: }, \- M3 H' h) |# H: T- ?6 X
MAME DEBUG常用指令3 q4 M. w) a( f* B
3 [ y6 o& _3 p6 f内存搜寻: ci, cn, cl4 N6 o8 G& d/ _4 H7 w
- `' ?. }# M# f) X4 n D, ? ci
% R, k$ U+ ~( x# V* I T 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. t! h; d& x! b1 v; M* v0 f; r/ U+ C; e- x7 n/ E$ j& K
cn( u: g5 h, H( \; M2 A
搜寻指令
! i5 Q a0 [/ D: U$ N& K 例子:
& B. z6 c& j) ]5 }/ |7 T cn eq,60
) n9 a/ c4 K, f# b 搜寻目标等于60 (十六进制)% N2 I U Q$ H2 r
$ c+ V5 q7 q0 S- s5 w: I. F7 x cn eq,#96& l' {% O) ~4 {5 z
搜寻目标等于96 (十进制)
" Y' o/ @+ T4 | U) m6 m& k2 j2 ^
+ K, r8 j4 j; N0 Y cn eq
, M: Y. _0 O$ A0 I4 L9 H 搜寻目标的数值没有变化
. x c% L2 v4 v" o$ }
* r w7 d0 O+ {( o+ M cn ne
: E$ j3 S% B% K0 Y- x# H' p 搜寻目标的数值有变化
2 X& \& h# f. q$ \/ m- V0 g ! I2 e- }" u6 ^& w" U# n. {
cn +- n$ v) `% m* Q: f* x# U: M* `) f
搜寻目标的数值增加
# s; G L% u" |0 O( |2 B! o+ p1 U ' u N# k6 {6 V) Y' D5 R
cn -
* U9 l% C: C# ^: B& x$ e2 E 搜寻目标的数值减少
( H" Y, \2 m9 Y
) ]1 v0 `4 k$ p! e! A cn +,3
: ~6 e6 Y" g9 I, l5 B 搜寻目标的数值增加3 (十六进制)
+ Q1 G8 g: e; i' V8 \& J& ?! }- b- C8 |. X
cl/ G4 [. S6 r- H( ~% q
列出所有搜寻结果/ A* f1 ~/ E9 ^4 s( e5 n2 ]
' V) S6 l; z8 }! T9 z
cl xxx.txt
; W. n3 ~" H4 d2 S& O! I/ i- u6 C 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% v: T4 {& K) [/ q9 m) ?
& ^% [, B% {+ c- k% C, ~8 j4 A
% T; l! I7 j8 y- N内存监视点指令: wp, wplist, wpclear
+ m/ A/ ~8 o5 a* P; s E 例子:5 v ~* a& l0 c- k$ Y
wp 1234,1,r5 W3 C4 W% }# j. M
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' q1 c7 f1 }8 F. S2 k* J
; V3 H7 q! \$ f/ j& v) z' [/ b
wp 1234,2,w
* C& D) E! }+ V2 g! R 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度24 ?3 @* \3 U# j9 `4 _. O
. q4 d7 |5 x/ B wp 1234,6,rw5 G. `* X2 V8 |) k5 z( D/ X
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
! K m, Z( a, E& a" o' w2 n7 K; o; Z3 O
wp 23456,a,w,wpdata == 1
7 D- o! ^; u6 D) y2 H+ }/ \ 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 o2 A3 y( E$ ^
- i4 f0 N. n; e wplist4 `+ Q* q) t) l
列出所有监视点
" y: t; z. M1 _: N1 C0 t1 S& Y7 o V( S% P9 D$ F
wpclear 36 G( O% A# V3 W0 K/ }, s# \# l/ J0 ]
删除编号3的监视点1 [; E4 A9 M: j5 U1 ]; W
6 i4 s+ S$ X3 ~$ ~5 ` wpclear% `* J) Q# H9 ? B. ^9 a* U
删除所有监视点8 t7 D% J) T! f8 S
8 x6 S C+ x- L! ~" {4 X 4 O I6 S, F% O' z" G2 @$ P
4 D( J- O w, @# n& [
程序断点指令: bp, bplist, bpclear
$ K4 Z2 p. D B/ j. O. Q* C* g1 x 例子:
0 L7 F- _8 V" i- C. W) } bp 1234
$ x" p4 I" I: w8 u 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! ?3 b/ Q5 @; n5 \6 z
" K5 k) X) c0 x) Q( v) R bp 23456,a0 == 0 && a1 == 0 g: B% @2 W/ g: V6 _4 \
在地址23456下断, 且中断条件为a0等于0以及a1等于0
& Y5 ~1 D$ P. y0 F3 [ \6 e
& p: T& y w. m8 x bplist
" w9 l- X% s& i* i" G$ j( J* ?7 t0 P 列出所有断点
; q/ s9 |% W& K* M. b/ B" h( k8 x, a G3 _6 ~
bpclear 39 J+ |3 e% S8 L0 ?
删除编号3的断点
7 K3 z% u' s& G
# [; A0 C" F6 k2 t" c bpclear& n# o. ?* n* Q3 c
删除所有断点
' r' n7 W6 x2 P( b- n' G; M h, H( Y" s. p
$ Z9 N/ V5 l7 W8 k9 z. H
0 n" [ y" [5 y- e. Q' e
跟蹤紀錄指令: trace
0 L' a+ p5 \$ b& c8 ^3 K5 E 例子:- \$ v+ e/ x m# }9 s6 o
trace 01.txt
+ Z4 a' S/ o3 V1 J& S1 Z 跟踪当前CPU运行的所有代码, 输出至文件01.txt$ M9 l7 ~8 {9 @' g) n
; H/ T4 Y. Q1 m
trace off1 S5 d3 _; f# C
停止跟踪, 并且关闭文件3 _( D) u. U/ ?: f. z
! ?5 C! P0 }+ [% [% \/ }+ v; r
trace 01.txt,0/ K+ h" f' ~' @
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ Y5 }$ K( p6 j; u, C( Z( p$ o) a$ Z: X( P, m
trace off,0
- W8 P: T* M0 M# E 停止跟踪编号为0的CPU, 并且关闭文件" {7 k! I* q9 t* o5 ~$ x
; ] j8 h; E' ]7 m
trace 01.txt,0,{tracelog "A=%02X ",a}
2 w! W: A: m, \5 O 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 V. D: R9 w. h0 E6 ~ 并且在每一行的前面, 写上"A=a "
/ B( J m4 h/ Z. K' ^6 J "A=%02X ",a为一个C语言printf函数常用的输出格式$ L+ ]# W9 m4 s. v: l
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
- W* d) M* ~! E X表示为大写十六进制数- S1 B2 D4 R$ |7 Q
. F, U6 _3 N+ I; L, l! r b" D" W6 K5 v
4 }- {+ ]% G) _' {4 P
内存直接写入指令: maincpu
4 w7 L. v* F ^# }4 j+ R 格式为 maincpu.[][]@地址=数据
; U+ E$ P8 s' g% i2 D7 V 第一个[]:
; U) P) L+ Y$ X& ]9 o3 W+ \ o 表示ROM地址, @; Z6 r$ U& _, a1 T
p 表示RAM地址2 O( ]9 E6 q$ \ _0 \& h
* D' n7 b$ Z/ ]! g! S 第二个[]:
( s0 p0 W) \4 r; S d 表示4字节. _5 W9 H2 c: f6 b- E% d% u% b
w 表示2字节/ b q7 b0 v8 `' \+ ]
b 表示1字节
; }) j& H `3 E0 d$ D6 c* L$ Z' D5 `% q
例子:
3 _# r4 c+ U5 y$ h) a; C maincpu.ob@1234=FF( T3 q' N- f3 z. b6 b
在ROM地址1234处, 写入FF一个字节# X" A6 a" L& Q4 h$ k4 ?7 M/ ]
$ L# J0 b1 C# W* d/ E! k& g% h. b maincpu.ow@1234=4E71
8 V$ l$ p1 E, }, r 在ROM地址1234处, 写入4E 71两个字节, C$ k9 E: ^( Z/ R3 r
2 ?9 v! V2 f9 S maincpu.od@1234=600A4E71& b+ A9 P/ J0 J5 z5 F
在ROM地址1234处, 写入60 0A 4E 71四个字节
4 P9 _# @. @. M: R+ {/ \7 |: [
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; s5 K+ W7 \ c7 i , f: n$ w1 v# |: X
H$ Q4 x) g7 V w( p2 F( k
其他:
# [$ v' E& k9 V( ` dasm 输出档案名,地址,长度
- X; X1 W: G1 `: A3 j 输出程序的反汇编代码& K1 W6 D1 ?# R; m5 J
例子:
3 X, _7 I$ _( w dasm 01.txt,0,100000
' [$ b+ ] v- R t0 _& O 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- Z- _# R! g/ Z6 @) P3 T
8 Y p8 L& y4 Y6 j$ g+ W
softreset
* d4 y" t- T. j. i& r- m 游戏重启, 但不重新载入ROM8 x) b+ e; g1 X, m4 Q
! S* h# e1 E) z) D H) {' K- k: j5 c hardreset
1 v8 Y6 } }" v- q( d 游戏重启, 且重新载入ROM
5 |& v( n" I# d0 H k5 a/ s A" j2 ?
snap xxx.png& l. G' N Q+ s7 R" q- \, s
截图为xxx.png1 ]% k$ I. T! W4 R# W- T' b
/ \$ x9 d- E( h% K
- p2 `# j& n7 V) @
, ~; X0 w& ~2 i- j
8 b* I$ R; F) z, G* w q6 N热键:
) D* O- S* X' y, f. F$ T ~ 中断游戏2 ]+ b4 A0 ~/ x
F5 运行游戏
4 i4 M) k. q5 \5 V0 L# ]' { F12 运行游戏且隐藏调试窗口
7 ? J7 h+ {$ i! X& W F11 步入, 单步执行, 会进入子程序8 t* M/ J* @2 F' p% T8 y' c7 t8 m, F
F10 步过, 单步执行, 不会进入子程序
" _/ `% a j4 `% |+ q* w Shift+F11 执行到子程序返回
' N0 G( ? d8 g1 p) w( k: _ Ctrl+M 内存浏览窗口
3 r" `( @/ X0 K" H$ M- l6 ] F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 z9 q' d: G n+ z
9 k6 R) P: d7 |; u& @8 l( D' K: [$ x/ |{:4_94:} + U6 ]& o7 y3 A m$ m9 R4 \
& ^6 @& N. m N3 I+ p( [$ k |
评分
-
1
查看全部评分
-
|