|
|
- t" E% E' E$ J4 Z0 Z) Y
很快速的整理我自己常用的指令
& Y/ r/ M! j6 q8 F, [/ a( u2 \0 \6 w
8 p$ m% Y, e/ `. h, d* Y& x$ S8 h- A" \{:4_112:}
( F, }0 u) u$ F. }- ^. L6 s6 T: L) E. V$ P1 O: g q
MAME DEBUG常用指令$ F; ?" M$ [( v8 D% P
' v% z0 y5 q' u' K' J内存搜寻: ci, cn, cl
2 g7 K5 e6 H. y
: B R! p/ w# `( D ci
3 x/ r( ]" x' b2 |5 e& {* X( T 搜寻任务初始化, 每次搜寻一开始一定要输入这指令% u4 J5 b G# Z- r" Y _
( q l" ]( W! P/ g cn, ^* {. X: W, w0 T" b6 k! c6 C
搜寻指令8 V8 O$ C O7 P/ z( W
例子:
$ L# r6 Z, V: o% f cn eq,60
# t7 U6 a& X/ j3 P 搜寻目标等于60 (十六进制)) t Y' E* k# \& ~* Q
" x; r; l* l6 y1 s: s* A4 a0 e3 b- Y0 x cn eq,#96
4 { m# G8 O( K _0 y# m' W 搜寻目标等于96 (十进制). A( A$ ]* k, F8 ~8 f, s- j2 n- l
# }+ }7 z; N; \, T6 R cn eq0 R6 R4 T- {! c
搜寻目标的数值没有变化# d+ J% u3 L" i5 C! a. \% V
9 w1 t3 s! r) m/ P8 j
cn ne" f- ~, F6 D* K; r3 a
搜寻目标的数值有变化/ J C+ X1 F! D, G4 t+ A0 k, a
* R# y5 N; v: W
cn +
" z* D8 I! Q% f. ]" _) x; E 搜寻目标的数值增加
* W s/ ?3 O0 C% K 3 u! [! G1 r8 G+ B1 E* _3 p& S' Z7 J
cn -
! ]. E5 a# _0 j3 O N5 h& z: [6 @ 搜寻目标的数值减少
/ D' m2 {. f( M + f5 n4 X; B( e2 ]1 S* |" l* O t
cn +,3+ k* Y. a: y+ f' j9 I
搜寻目标的数值增加3 (十六进制)
% R! ~0 n% t& M/ ?
* J4 e( p. ?& k: R& s, V( w8 o7 ^ cl* C' s: ?8 K" T+ `$ f% k% a
列出所有搜寻结果
7 j4 H: j/ f3 R3 ?" K" N. N; c/ Q/ D# ]# k
cl xxx.txt2 M; k; G% S0 t
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" h6 D: b; j4 h% x
* ^; V0 P2 N6 v' l5 @0 i/ Q4 P- u o$ d( H' J- ~& K# }! O i# e6 Z8 n" ?
内存监视点指令: wp, wplist, wpclear
p4 D! d) C. @1 x. Y 例子:
( H& Q) }1 T5 [' T* V wp 1234,1,r
/ l3 M" G- h* [% y6 O( j 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) D' u5 L1 u8 l7 d# b9 \% S8 F/ S, }
9 u; o3 n w) p8 {; K+ d8 M
wp 1234,2,w
$ J9 j$ z' d; @$ [ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 w1 i) L; {- L" g
2 S' ~1 u5 ^/ G! O4 k$ E' \ wp 1234,6,rw
8 T2 v" M% e% \* k7 v 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& ?! Y# w! l, W0 E6 i
A2 {6 Z$ J) `! z! I( v. K$ u
wp 23456,a,w,wpdata == 16 [: V2 D& b2 ?) E8 X* ^" i' z
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% `' n5 x+ p6 j$ W7 {- O7 [
+ M6 s3 E, c/ D$ [ wplist- Z! P: Y: X9 @1 }- i
列出所有监视点
& o) A1 k, v8 u8 g k, [; ^$ k+ ]7 w6 F( d: F9 c- x
wpclear 3
! ]' Z; m1 Y, ^& ]9 I: Q. @. q 删除编号3的监视点
9 ~/ V t* o% i' f' n/ z
; o! O0 l F. `, ]% w- t wpclear
* V) S. b& v) D% I1 y. i+ W 删除所有监视点' T' A$ J8 X2 E2 @. @% ?
& E/ [2 b% a- Q
$ p; L% U. u9 Y* N4 }7 N! o. B3 [; J6 E
程序断点指令: bp, bplist, bpclear4 V& s+ x9 R; ~4 G
例子:
9 X3 C+ ~6 V" ? bp 1234* p0 _, @( F- f+ a9 e; p. b
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
" Y0 ], t/ r5 R. E% m0 b2 u9 g
, Z7 i; r- [* V- S9 b bp 23456,a0 == 0 && a1 == 06 h$ d. j; K0 z- ^/ o3 f
在地址23456下断, 且中断条件为a0等于0以及a1等于0
& x x3 v1 U5 b5 X; @' O; g
3 z5 _. L- D4 n. F$ o bplist
}* ?6 ?8 K4 o/ p1 E! h 列出所有断点& h8 i2 s5 M) u9 }' a8 Z- F
( O9 \4 q. y" }8 {- R/ g& ]( v
bpclear 3
& A1 E: ^. v* N6 d6 s% ? 删除编号3的断点; p0 _" n. ?" M; x" B6 m+ n
2 q9 q5 h' A9 ]& @ bpclear* Q4 G; z# X; [( p* Y5 D8 E
删除所有断点4 @* `9 c# ?3 S! y7 Q
. f. y* c! e. v5 H! \" v
# B9 p, p9 v0 u" l
E: F1 }6 Q8 }3 T: W- ?0 |: p/ e跟蹤紀錄指令: trace
$ h! \/ {5 _; R' j! b 例子:
1 P9 Y9 A8 y1 d. n" R5 Y trace 01.txt; k$ }' A, H# m2 e. P. x* |1 \
跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 |: Y/ f$ m! Q0 B; K4 i8 l2 Y4 i5 j: p$ O9 D
trace off
J3 O1 H, Y, z- B 停止跟踪, 并且关闭文件3 v$ k* a8 ?- W" g( p# _+ p
9 I- K( C! o R7 w' D( L6 _
trace 01.txt,0
% H+ G5 O7 E8 R" T" H m, U 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) ^) C4 W2 G3 s) U- \. @* [7 ~6 }/ y- @/ Z4 ^& c* H5 ]/ Z8 i6 z
trace off,0
8 G$ Z1 ~) v5 Z* q- w' c3 Y 停止跟踪编号为0的CPU, 并且关闭文件
0 _! z( z0 `* {% m
! [" M7 T2 e& o. U trace 01.txt,0,{tracelog "A=%02X ",a}
2 E5 W2 ~7 f. s1 m 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 s6 V9 F* J& i* {1 u5 A
并且在每一行的前面, 写上"A=a ", U! } o' p" ?; _# w
"A=%02X ",a为一个C语言printf函数常用的输出格式5 H% H- B; G% k0 k
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 p( B1 S* i$ I* v% j7 f
X表示为大写十六进制数
8 k9 y# P: n. [3 z
& d- h) Z8 R2 X, p W; Q: ~0 w% L& t) ^2 o. [
( v* g' k$ {' D: P& r
内存直接写入指令: maincpu h6 V1 S `; C3 p
格式为 maincpu.[][]@地址=数据
$ a! I' D- L0 N 第一个[]:
9 C" @3 |" t( g6 ~ o 表示ROM地址
& P$ t: P5 w5 s p 表示RAM地址
2 Y! [0 i* b, v* M4 J9 H
& X0 T5 J- \% E9 q8 ?: l 第二个[]:
/ y/ c- t/ v9 l d 表示4字节
1 P K9 g/ S M' D! i% g w 表示2字节0 [: g2 ?) S$ g! b$ X, l
b 表示1字节( F' l8 W8 x4 L6 [+ r8 O) `
( v: A, t6 ?+ R/ Y# q5 [! ~3 Y 例子:9 \ w5 {) ?- \: p2 b
maincpu.ob@1234=FF9 W6 s, L) p8 f0 Q$ W7 K
在ROM地址1234处, 写入FF一个字节
! b8 n$ i! b, ~2 z! J# |/ D J. ~+ t( {4 e6 r
maincpu.ow@1234=4E716 M/ N+ O: F7 a) x/ y: o
在ROM地址1234处, 写入4E 71两个字节
7 F; b' X- G0 q$ M( f
- ]# C4 X: f- I( V- S5 O maincpu.od@1234=600A4E71
3 _$ Z% u' X) p- s% i5 t 在ROM地址1234处, 写入60 0A 4E 71四个字节
4 w* ^2 W( W7 @" F+ `& n' D) H* i" M1 n3 R" K, B: z8 l
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* R# R M$ B) m( W" G
$ E3 x$ m7 j9 c$ k* l& ^! d; C
0 s( r p$ [+ t, d其他:
' P( k1 r; M1 w" _: N dasm 输出档案名,地址,长度5 @+ I3 [/ W8 Z# B
输出程序的反汇编代码
! J, h& W0 l& m1 z 例子:3 Z' v/ y* R; E. K
dasm 01.txt,0,100000
- D( ^9 Y/ z8 y' x* O8 Q9 A 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
* g+ M" n( X/ Y& g7 l: ^+ `$ m3 A' e
5 b; k8 ?+ z5 F# B+ Q% N7 \, y softreset' d D' z$ c. G f$ A
游戏重启, 但不重新载入ROM
/ D5 g: _% d9 Y8 m" q
1 `5 ?& P, N. u$ N% _0 ? hardreset9 @2 g, ~* c1 s
游戏重启, 且重新载入ROM
2 \4 Y! {% s' M3 N, w1 V6 ^4 }( _; q. m
snap xxx.png3 [2 U6 f/ y+ j, {) f
截图为xxx.png" v* q9 P$ X; o" V$ K& Y V$ ~
- V% n7 R' r3 r5 W: Z: j
* t; H- G. u( N% |( W4 @
8 X" ]3 J% b: n# Q" F- ~" i , c) }# P: Z+ b
热键:- b8 G Q/ J2 X; x& [' l0 \ o3 R
~ 中断游戏9 Z# O8 K, D9 X
F5 运行游戏- ]2 m; ~7 R6 A3 |0 y& B
F12 运行游戏且隐藏调试窗口. p. e1 d$ t; h' n
F11 步入, 单步执行, 会进入子程序
. _1 J, i X6 [) f7 a( Z F10 步过, 单步执行, 不会进入子程序
0 p' Y0 I v' z3 N8 h. O! S Shift+F11 执行到子程序返回
6 f! D+ \# L6 y, }) a W Ctrl+M 内存浏览窗口 j4 r {5 L) I. p' S# T5 [: d
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' K4 N$ H- k) s' e8 A5 d! j1 A) w. A* u* t: h& {' A
{:4_94:} 8 Y) i/ b- X- t" k6 P1 y- ^7 d
$ H. {1 X6 g( m, [" ^! H, F8 |- w |
评分
-
1
查看全部评分
-
|