|
|
7 f' I* E3 ~' ]很快速的整理我自己常用的指令% X- B% k* g& }* f( `' ]9 S) M
8 \+ S0 g9 n% p9 D6 V
{:4_112:}
& ^" E) h- V, e" k* ^3 y
4 Z& z T% B3 Z. f0 zMAME DEBUG常用指令' P4 K$ l; g8 G& q
. L, O1 f! W! y* l6 I9 u- {- ~内存搜寻: ci, cn, cl! _7 d$ E. F6 R
: b& T; x" l( g/ D0 D ci2 q) i7 K9 M. o2 P1 N6 Y
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
9 C- J) \2 v2 R- c% u
, {# w2 Q1 |" c' y cn
' j2 i3 S9 K) B 搜寻指令! }. n ^7 i. [2 x& p
例子:
4 L2 R$ k: q( y0 X) l cn eq,60' L* {! i: A$ C
搜寻目标等于60 (十六进制)
+ S& d3 K- [' D: ^
3 i- Z% Y1 ^$ o5 z* S2 L cn eq,#96/ Z2 @5 N+ K# y6 C
搜寻目标等于96 (十进制)0 t! l! D/ d' ]. d/ t0 y& g
5 b0 U9 t9 T# {. B e cn eq
. i' ~$ y3 `% l; Y 搜寻目标的数值没有变化$ e. E: d9 e) |+ k: Q- `
# ?1 u' {$ h) ?3 h; u& T$ m7 y) J cn ne0 W J" _$ S$ R' ~; s
搜寻目标的数值有变化! g. I0 a1 B) f9 H' t* c) R r. Z5 V
9 c. ~6 A: E/ z7 ]; P L# z0 I cn +& ^- ^( v' F. {* L: @+ K
搜寻目标的数值增加
1 w$ n% z& o: A ) }5 u, x4 g7 X) Y" ^
cn -. \* b. q% a' y
搜寻目标的数值减少
" T3 B6 `1 g/ s
! h/ k4 ?( z; i9 I: p2 W, B cn +,3
, w! K t1 u5 c' F/ L 搜寻目标的数值增加3 (十六进制)
/ B2 B& O, d) ], a
_0 R4 E9 v3 ]3 B D+ l cl
7 f1 G4 ^4 Z5 ^; W" X9 s& z 列出所有搜寻结果' y y3 {/ Z2 ]
3 v: {' F7 l1 y0 W cl xxx.txt
3 A( T8 W5 e+ f( `4 a 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 e/ U& b6 v; }; x
' p$ o( p' [" f/ `1 d3 G 5 \6 I2 ^- [( P8 e+ z h
内存监视点指令: wp, wplist, wpclear
$ L* F3 {( X" Z# ~5 a+ x' P 例子:2 F; F) g$ Y% X! ^! Y! h8 \
wp 1234,1,r
1 V# k( d$ C4 k" l$ G 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ K+ b- s j* k6 Q$ }1 N
5 e) Q6 B" o9 C P6 U
wp 1234,2,w
h Z/ y% Z5 b: X9 E# G 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 J0 p) _" F' |( z
0 K4 h% n! q$ q! A6 c' |7 Z7 c2 t% c wp 1234,6,rw
8 I ]( U' s% @# ^ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
5 o" z6 q s/ r' @: _( v3 u, m8 s$ F2 z: I8 [, T: F( F1 N
wp 23456,a,w,wpdata == 1; H2 S0 O) a: J$ H0 [: i5 v
在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 r$ t" `- ~+ w2 y
: i% D2 s2 A' Z. R
wplist n1 L4 d* X9 h! y2 U
列出所有监视点7 q" q, o2 E% b: e$ B
$ [$ A1 Q& h, B/ }7 j7 J" } wpclear 3# [0 H& y+ `5 s M- e d
删除编号3的监视点& y8 Q2 b7 @( H7 n" l+ \$ [+ p
5 i' ]* k4 H+ I" v" D wpclear: Y; k, N! b- d3 ^* s
删除所有监视点" i4 c; m0 E H# E0 t* P
% ?/ f( o- U X( c0 _' }6 x$ P ! l. M0 P i- ^/ D. A; Q
& k/ ?2 r! Y+ H# C程序断点指令: bp, bplist, bpclear
& W; c/ ~% ?9 K1 Y V 例子:
/ N; V( [1 t$ \! u G( B) S bp 1234* {/ D8 r" k# l4 |
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
5 ^2 S/ u b0 d
5 o) K: E) k# X7 P# z/ N bp 23456,a0 == 0 && a1 == 0
. [# \' ^# _. b. ~" U9 W$ R8 N 在地址23456下断, 且中断条件为a0等于0以及a1等于0
* m. ?3 c2 k- M
- a7 q$ ]2 N- W' B& r bplist5 E% n2 y5 N8 x; w, f' O F* z2 I
列出所有断点" r, D* t2 ~5 L- s, {; K% A
' D# h$ X) b& B4 P% t# `
bpclear 39 b" P& ~7 F1 K6 O1 Z
删除编号3的断点/ Z+ Q0 Y4 u1 R" V" h2 R# O `+ ~8 c
. a8 j3 G$ `4 x0 A& b bpclear+ W! x" `! n2 n
删除所有断点4 d1 @4 Z+ k- x+ ~ [! c" S
: i$ ?/ J) Y" \9 D/ |" i
5 Z3 O" |* @7 z; a) X # r! s. ^& z: J2 k6 Y5 v
跟蹤紀錄指令: trace+ ^, p! {1 d) M( {
例子:
2 O9 U; y! ]9 R5 E2 ^9 s% _ trace 01.txt! ]0 V8 _) p9 D
跟踪当前CPU运行的所有代码, 输出至文件01.txt
: t. V( x& q5 B' h
7 u& Q' T; \# T1 {! d+ h trace off
: G( C& d5 L0 L: D 停止跟踪, 并且关闭文件& G5 n$ k2 d! Y2 y# }% j
6 y. c7 U4 Z6 ? trace 01.txt,0
5 z; P+ J3 Z; r- n; g5 i- r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- z* y4 G4 z: I; D- l+ @9 |+ F6 B3 p, n. t, p# w5 D6 c5 {. h1 y
trace off,0; S, {8 m; ?7 s
停止跟踪编号为0的CPU, 并且关闭文件
% k6 n k6 c n8 U% D+ ~9 `$ X! T, w$ F+ q" Q
trace 01.txt,0,{tracelog "A=%02X ",a}
* ]5 _' Z1 t+ B* S2 u3 l! H z, | 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 p3 ]% }% j: X* P4 K, i" U 并且在每一行的前面, 写上"A=a "
- T1 C1 Y0 P/ ~, A "A=%02X ",a为一个C语言printf函数常用的输出格式
8 @. H9 l9 p+ E) b# V 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入+ r+ H2 h/ n3 ?! y6 R' t
X表示为大写十六进制数# q! P5 P, P$ U9 i; e- y) J! @
5 L3 _; F! E1 R; `) u9 Q- D* ?4 [7 ~3 o8 Y" U. t% N. |3 g9 e
% r5 K; C6 l" A
内存直接写入指令: maincpu
1 Q. g( D% i7 n: ~, w 格式为 maincpu.[][]@地址=数据
0 n6 N: _2 Q) S1 W 第一个[]:
, p: {; f5 ?( d k* C4 J, w o 表示ROM地址
& L; C0 w% B4 h+ t+ i6 J5 n8 V/ h0 h/ e p 表示RAM地址9 w& E( g/ j$ \
) ~" l; A5 L, Q
第二个[]:1 z: N! n0 ~/ G, y+ _" @
d 表示4字节 x1 s0 h: D9 l8 W: ~
w 表示2字节% P- n1 V- {/ h* S, E+ C' [' q
b 表示1字节
" E) x& x; ~- \' _! ?7 D4 `# q$ s4 }4 K3 u- V4 h A2 }% w
例子:
& C5 ^" L, D" N! K& l' e maincpu.ob@1234=FF% W. G5 v0 l2 e0 E
在ROM地址1234处, 写入FF一个字节
) t" j, \* V Y8 j' V3 X) J1 u* d, b& [5 i
maincpu.ow@1234=4E71
* D+ Q7 n/ d2 [1 [* x3 W D- I 在ROM地址1234处, 写入4E 71两个字节! q* G" K8 L# l4 j% F& Y
) z" b5 s" L1 c2 ~8 y7 O maincpu.od@1234=600A4E71
7 N+ r& C/ C D& m. Q 在ROM地址1234处, 写入60 0A 4E 71四个字节
. g" M6 K: \' L% B% \9 \( g- {0 w9 W) O" o8 i2 R3 u
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 N; ]6 Y3 F: P$ `0 h5 I; f! e
$ M; d' ^# b6 F- o! L2 t
3 O/ i7 m1 D( d) T其他:& @( e W" F5 y9 ]7 l
dasm 输出档案名,地址,长度
% c# S, ^1 B" B/ @3 Y/ k 输出程序的反汇编代码
8 |5 C6 o1 Z- k1 o3 @, ` 例子:$ U' E" k* ~& a0 Y2 a3 g$ C
dasm 01.txt,0,100000' s& \4 {: M( v! O9 {5 t0 G
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( }( e$ o% ]- B; {$ d0 `
' s& s2 ]3 U9 s. q softreset
1 v: q" Z+ y R8 c) m( d 游戏重启, 但不重新载入ROM1 m9 e% S8 ?+ n3 g0 b
) F/ @. s! Q# s3 y6 ] hardreset
% g# w4 v+ [+ T3 |0 A0 R; u 游戏重启, 且重新载入ROM8 ^+ e% n) j* D, U/ |
& q8 v$ L; k& Q% s7 j+ d
snap xxx.png
" {( r6 e V2 u0 b/ w/ s* J9 G) | 截图为xxx.png$ p- o. n8 P6 Y: ?6 J
. T* q& f0 i5 b% T
/ w3 L9 S; ^$ j- P6 i ; K0 @7 c" u0 m5 I/ N
$ M0 u7 c5 T1 S3 m热键:
$ ? F' I6 a0 Z: O1 \ ~ 中断游戏- _1 R1 _" \$ b
F5 运行游戏
. K1 G- u- v2 v+ j9 ?+ D6 _3 K F12 运行游戏且隐藏调试窗口+ N7 u* E R* r
F11 步入, 单步执行, 会进入子程序7 V, Z) W1 i1 U8 F) p% ]
F10 步过, 单步执行, 不会进入子程序
$ W" d4 Q$ `0 Z) R" ~3 o7 S6 G- L6 e+ Z Shift+F11 执行到子程序返回
$ k9 ?3 q9 j1 I" e4 I7 x- Q0 M Ctrl+M 内存浏览窗口
+ y G; x" ^6 X( a) d% r. h- Y+ z F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU0 N7 U) [3 x/ }, J
& }; x/ y- U; G Q9 W/ c3 L
{:4_94:} h8 h3 p7 Q/ A
" d0 G, K- @) G
|
评分
-
1
查看全部评分
-
|