|
|
; i# q' R2 _! \( S2 A很快速的整理我自己常用的指令
& Y9 u2 g8 x4 @( n9 `, T3 n! I5 o6 [, Z, W I
{:4_112:}
x1 E. F. Y% [- W6 F/ t8 a; R: n+ b# h- a/ Q" u
MAME DEBUG常用指令
0 ?0 M; q, h5 p9 k2 w7 U. |8 U0 ?' ?; o
内存搜寻: ci, cn, cl- O i: H3 ]( |; W9 R
$ z6 W" c w: ?$ f7 O- {7 C" X
ci$ v5 E8 _4 [3 `
搜寻任务初始化, 每次搜寻一开始一定要输入这指令. W' Q6 j. {# D. A9 ~
$ w" q9 s. B: Y' u2 z8 `& M
cn
0 c0 z% ^" J" x. B+ Z T 搜寻指令$ t( \) {' J6 o) u+ K9 `+ _
例子:. j7 c( H) i) i% h# F* j2 L6 D
cn eq,60
5 z% l b, }6 f 搜寻目标等于60 (十六进制)4 E* B+ Y/ O9 s( S
& E) l$ o/ p4 p( H
cn eq,#96
- b9 W8 s) L; e 搜寻目标等于96 (十进制)3 d0 C. b/ l5 |3 i Y! ~
$ I0 j" B7 | w. X6 ^
cn eq4 E$ o9 z8 }0 X$ Z" a, I3 g2 [9 J
搜寻目标的数值没有变化- X; u8 o9 u* f# K
! L6 L7 z) j9 H/ |2 O cn ne
: W% P4 Z. j3 Z* N 搜寻目标的数值有变化, x" B0 x+ v: e# q' G5 K
& L# D S7 M" B. Y1 @ cn +
( R! Q" b: n; A- J9 H h4 V! x 搜寻目标的数值增加( X5 C4 J, _ L3 p2 X
. O, s* m6 D. G8 ~/ S' K e cn -8 Y0 p6 v% u. n) R) Q9 f( _; i
搜寻目标的数值减少
& g0 O4 P2 q5 v, k% q4 d3 G 0 ]0 k3 I4 F$ P; {; h9 R: t
cn +,32 A2 z9 T4 v* \" @1 B( ~. g7 | \
搜寻目标的数值增加3 (十六进制)9 [& B; J) d! M" w# Q/ x0 C2 F
1 ^( Z" \1 N" [: c6 U' y" d cl. G E& d* L/ t# }5 L: x
列出所有搜寻结果5 X& r9 u6 m( p! T) Q
) p( ~. t0 ]) x' z$ T
cl xxx.txt) j7 H8 ~- Z" h4 P0 l. l2 S
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) J- ]/ o) d) }5 r+ l5 Z9 }7 a* E, z! \
1 U/ l- W, {1 Y内存监视点指令: wp, wplist, wpclear t, `, [/ T/ C3 |. T) |0 V: f
例子:
9 ? G, i" x4 K# g. g4 v wp 1234,1,r
5 \. X" o& m6 n1 ~. u0 w 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# A/ Q2 z5 q5 U1 m4 h/ }& j2 ^2 N; ~! p' x6 p7 l$ I+ Y8 M# Q# o6 K: e
wp 1234,2,w
" s. p X3 [) V a0 c" l 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度27 i2 u# A3 O7 Y! |
# ~- P5 V2 L9 U$ R5 z+ h0 | wp 1234,6,rw
2 |. M* n6 a: j2 Q 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 U& {/ s* h3 \* a1 {
0 ?& i. q# v9 c) E wp 23456,a,w,wpdata == 1- A1 \6 |. K" Q6 @5 k3 f: Z
在地址1234下写入监视点, 数据长度a, 且写入的数据等于19 S, h6 _1 ]0 y& W; S2 U
* M4 @; X& S5 P3 p wplist
9 m1 i o4 [3 i: K& G) ?- H& b 列出所有监视点
# w M# E8 R6 B j' O! v+ i' i" }& k
wpclear 36 d3 G2 z, l7 o v# H
删除编号3的监视点
3 N4 J( G1 c9 B4 b
& [1 B5 l* |8 N" s5 j) o wpclear
! o! o: ]* m( p8 h% x6 r8 B 删除所有监视点
* G: ?; T$ Q: S1 S: g1 T9 U; L% w& t9 E4 w2 s
4 A6 ?- h0 l; B- t
- W; {* X2 C# U, J% ?
程序断点指令: bp, bplist, bpclear
* \; d7 n' L4 Z; B 例子:
- r( _# s( j5 Y: q" i bp 1234
( z2 H3 j/ Y: Q$ U- G9 o9 Y 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断' b3 }! [ h$ C ^
" I' Z& E2 j# g3 w
bp 23456,a0 == 0 && a1 == 0
+ T7 `+ a3 t* }8 j/ G# ^6 O 在地址23456下断, 且中断条件为a0等于0以及a1等于09 k. {1 h% B0 i( D( K
* i# G4 _- B$ `) `7 T4 ~) M, n
bplist
}, b4 h2 p7 Q7 a- T3 S 列出所有断点
; r# ^, I* x+ E' r/ G- m1 ]' R* ^; V9 C8 k H/ A
bpclear 38 ?1 \- J3 D, G+ I, n1 c
删除编号3的断点
9 s2 x0 }$ |% q6 c
1 Z7 v _8 L8 k bpclear% _( ~5 k) j2 }9 k+ d- C! }; k& z
删除所有断点
4 B- u1 x+ q0 H& Z; p; f4 u
! z5 C' q' F5 e2 A: Z, ?3 f5 j
3 [& o2 V& b( Q' ^7 ~5 [' t
v/ R+ C5 F1 H+ }# g7 B跟蹤紀錄指令: trace
4 C, R5 K) d6 [/ D7 w5 j) E$ v 例子:
4 \0 ]% }( K' Z) Q4 M0 x! T trace 01.txt1 Q$ W! H6 c6 Q
跟踪当前CPU运行的所有代码, 输出至文件01.txt
( t) x$ G U* M( `
6 P) p' H" F* y. o" V1 c trace off
3 H1 L$ _$ K: p- K5 { 停止跟踪, 并且关闭文件
5 Q% O- g) V3 j; s& [+ L3 {
' {5 T% f7 ~/ S9 j trace 01.txt,02 a. m% l) D& l7 u4 S$ m4 K1 ~
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 |+ s0 ?6 u* Q0 _' B7 h( M0 B
9 ~( o: a8 u" R. U$ k0 \ trace off,0
s3 O. ^8 }) G% P- Y* \- q" d/ f 停止跟踪编号为0的CPU, 并且关闭文件
[& K, v; n7 ~# K6 L0 {" R
0 m; L7 m# I! h1 O trace 01.txt,0,{tracelog "A=%02X ",a}- g, A S6 A# E# ?3 u6 d; r
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 k( I* ^2 i: A; I+ h3 o 并且在每一行的前面, 写上"A=a "$ }3 ]. }7 l6 A
"A=%02X ",a为一个C语言printf函数常用的输出格式2 r0 G7 S1 e8 M0 `6 a# [" d
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 c6 E: G& |# t$ [& l X表示为大写十六进制数
3 X$ z/ H$ F8 Q! \# L
/ Q" S* T- W# b0 p
' F$ {# e* ?- G- U# v- F
7 O, ^" {- I' h; w0 m" r# O内存直接写入指令: maincpu
5 f6 }! [8 \; `8 C& p 格式为 maincpu.[][]@地址=数据3 s, O+ T# ~: L& H0 s! f1 j
第一个[]:2 K8 x5 i: A9 F2 c! }) E
o 表示ROM地址9 u$ D$ @. b) p+ c( ?
p 表示RAM地址
, l" a2 l. }7 a! g! n# \5 q5 E0 Z: w; @$ e: F" R
第二个[]:! \, ^/ x: H' j$ A* q( t
d 表示4字节
V9 c, |& ~4 k/ @9 C f w 表示2字节8 _* G0 E3 R2 N3 w m! S
b 表示1字节
/ J( B" I$ I8 A2 ~9 x& v: `5 H. I. a t% v! M0 `
例子:
4 M- M% |- a. E8 Z& j E maincpu.ob@1234=FF5 t, T2 V$ `0 J8 n9 `& Y
在ROM地址1234处, 写入FF一个字节, I% \( e P& k0 s( y
, M3 z3 V3 B2 d( w P maincpu.ow@1234=4E71% E" M5 u' Z& u) |& F8 ?
在ROM地址1234处, 写入4E 71两个字节/ S' J, O2 A; B
! t! I2 m8 ~; H, I/ J0 Z+ m
maincpu.od@1234=600A4E71
7 \) G+ O) \5 n+ f0 B/ ?$ R 在ROM地址1234处, 写入60 0A 4E 71四个字节
}/ X* I. r* }8 a3 m9 h( n
4 {2 y1 `- P5 U7 G; z% g% Y 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 H4 y; W* ^8 X1 ?
+ D& T9 G4 p$ ]: C
" d# p$ |- k0 W% [
其他:3 O2 @. ?1 @! C, L
dasm 输出档案名,地址,长度
( u! ]% R) b7 _ 输出程序的反汇编代码( L( P5 n. e1 u+ J) H& N [6 J
例子:
8 t# W5 ^5 ?" z `$ ?' h6 ~9 {' B/ k6 { dasm 01.txt,0,100000
1 l8 W( \& w' U$ F( X. v3 d8 L& @! X 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
~+ x) u. _; `# p9 d& K
+ @' o- z* |, R1 P2 a5 N" T softreset
{& ]! z$ |' p1 w 游戏重启, 但不重新载入ROM
* I( J3 A, N3 O n/ T5 [
1 P+ R, L% d% H" J+ S0 [ hardreset. Z3 f1 G- ^. o2 t- O( W
游戏重启, 且重新载入ROM
7 ?, G7 C! T5 M! i2 F& [4 Y/ K7 X# w; l4 Z0 R
snap xxx.png$ |& M/ E) C/ M5 y" ?+ `
截图为xxx.png
* V9 N/ G( z- S/ K# F2 M% }+ ~
) o3 l5 a+ b1 ^1 W1 P8 Z- x4 C" z
7 `; V, m/ V5 I$ x& b
" W& S% ?$ O$ [7 l8 J( u/ Z, i 4 l. k2 ]& Q% t8 D
热键:
! }7 |' R8 m3 f' t ~ 中断游戏
. x; C2 z+ N" n( n' ? F5 运行游戏
; X) ^. C. g7 L; E6 ]7 u1 ~6 l F12 运行游戏且隐藏调试窗口
3 Z5 z5 |3 @' @2 x! d% G F11 步入, 单步执行, 会进入子程序
( A, z4 s n r' @* O% y F10 步过, 单步执行, 不会进入子程序5 R! n: V) y+ D5 L6 n
Shift+F11 执行到子程序返回; M0 m' V: V* m- Q% N, q+ a" l
Ctrl+M 内存浏览窗口
5 z' ?/ [; k* j: {3 |; O4 G F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: X/ ~0 A: E( o5 R* ^9 g; n7 y
{:4_94:} 4 [2 {0 o8 m6 m( X) ~
. N$ q# j* n4 T# y! Q- [& R) k |
评分
-
1
查看全部评分
-
|