|
9 h0 x# E) ?" _4 U+ { l1 j很快速的整理我自己常用的指令2 l% ?4 g3 _7 E# Y3 N; k
. \- d* B' S( ?{:4_112:}
! o$ G, s( D& i Q9 G I4 N1 @) G
& D# y' E& L/ A* [& ~7 I! ~; Z' w8 LMAME DEBUG常用指令7 ^( {3 r0 r# F7 d7 i$ l
8 x8 Y0 o6 Z6 ~0 D9 a内存搜寻: ci, cn, cl; U5 M G3 f6 U' |8 K F
, C! @) a# w" z5 j) f7 I ci
* ]: ?8 y! R0 k3 s) C) s; C 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) O' \: V1 c9 W( w
4 m" P5 h' D+ k! k, t) g* j cn2 J9 s; N F( [( q% {# @
搜寻指令" B6 y. }: O; u& e* C& B
例子:
+ r9 M9 {5 r( o0 A& R cn eq,60
( m$ m8 }3 g' z4 |/ u1 y- J8 Z 搜寻目标等于60 (十六进制)
) n8 q9 y4 H7 d4 c/ L7 r$ @
8 l; t, z, B6 Z- e) ^; q1 Q cn eq,#96
' \* b: W( k: p$ P, W+ x2 T4 y 搜寻目标等于96 (十进制)
1 L; ]3 `0 W0 T% ~5 f: f7 i7 M( F5 J! R/ \$ M
cn eq2 \- \& e2 K! k7 c- S& B% [
搜寻目标的数值没有变化
. e( {( V; }# i1 t6 r( U( Q1 E: l
' |6 v8 h4 K7 }* E }1 i9 s cn ne5 p2 b3 @ X5 u3 B* M! {8 n
搜寻目标的数值有变化
' h8 \7 K! O/ _2 @ , j' b7 n4 m9 U+ @% L3 `
cn +, I3 C. K7 h4 H4 X1 \: R" v; Q9 T
搜寻目标的数值增加
& Z: ?% z3 m9 ~# ~4 ? . f4 K+ C5 \8 W0 q0 O
cn -
6 ~$ H ~& P3 `0 b o0 d0 q/ e 搜寻目标的数值减少" ^; R" A0 K- h, ~; r# k: g! @+ a
0 G' h1 {6 G: C, f2 p) \( c cn +,3( @+ ?: ?& a. T3 r
搜寻目标的数值增加3 (十六进制)/ x; m) \+ E: V( s& M3 D4 D
( C# j* A+ E/ W# G+ t7 t, r2 p M) W
cl
0 S0 ?+ W3 A3 d. _+ r: i 列出所有搜寻结果# s) G2 q6 u; ^
h" p1 a( o" }. ] cl xxx.txt7 W' g6 d) n) |* J( m
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 P7 K B, u1 w6 }7 Y/ R
7 q6 z% {) C8 a# o7 E
7 u' N$ Q( _% F9 T* H& V内存监视点指令: wp, wplist, wpclear; P' \0 i( a, `- O8 P( V/ l) {/ Z
例子:7 `/ p0 p$ |& A* ~1 V5 Y
wp 1234,1,r
$ F5 j& d* i/ z( K 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度16 }$ D( f8 M9 m) \# C" }0 c
2 V7 q8 g [# o. W wp 1234,2,w
8 N5 ?) E4 G9 O( }2 Y5 Z 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 u( B1 G5 ~2 d# q $ C0 j+ J* w2 T
wp 1234,6,rw( f- t0 z- j7 K- y
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
' r' j9 z7 }) |. k) i; m2 k8 F
0 T0 s* B7 k! F F' t wp 23456,a,w,wpdata == 1' y1 v6 E3 f" m% }
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ k" Y: P/ y8 G8 r; w
0 ^& _& `0 `# v: _ W7 @ wplist- Z9 f1 D2 ]7 [# O9 |4 W4 |
列出所有监视点- V. ~* A1 s \+ j4 h
/ y; m* ~8 w) G wpclear 3
2 O6 M' t1 ?5 P' l+ ^ 删除编号3的监视点
& T) C+ `( P( Z0 J5 y7 G/ {) J! `$ ~7 a" @+ O: l0 d" R
wpclear
M' r2 `, \$ ]0 Z 删除所有监视点
: g9 Q& Z8 D' b2 F2 ]
% q8 P- m8 @8 u, { t
% j4 |9 j- t i
" E1 a! r5 `" r+ C( B7 P6 u# m程序断点指令: bp, bplist, bpclear0 ^4 G3 B1 Y( ~8 }$ U
例子:: A ~6 ~0 D/ z) Z, J/ R) S
bp 1234
. ~4 Q/ j- F3 N8 s" d2 v8 L 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 h2 d4 j% A* ?7 a) U
; _; t. O$ J- {/ p8 M
bp 23456,a0 == 0 && a1 == 0
" V a1 K/ }5 ]8 a* v& E# [! u 在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 J: n8 k" E4 A! s5 x
* A0 ]5 X$ x4 u9 \8 G: Y `8 M7 J bplist
9 V" q: s6 d$ U/ K, _5 j- s, x 列出所有断点
- z! S% r2 e. Z3 P! q! K
) Y. x9 L( F: Q0 H/ ~/ r bpclear 3. Y& D" l$ ]2 X1 J6 E
删除编号3的断点
; m$ }0 A. p# G' b0 U; T. r8 i4 _3 y) e1 i# d7 ?7 l3 s- W* }
bpclear' v2 z; u1 d3 ~3 k) J3 V! \, T- x
删除所有断点
A3 C' H- h2 G4 ^- H
* |0 n6 r; I# k( o
; N! o) j( ?0 k' o6 l& x
- P) p$ k, j9 M y" x跟蹤紀錄指令: trace
4 Q' n# f. v7 O; y) _ 例子:* M* y, f3 R% e9 T/ o: i% W
trace 01.txt O. ?3 P* q, h$ f
跟踪当前CPU运行的所有代码, 输出至文件01.txt
# ] e" H7 ]1 |, |0 m2 O. I
/ m3 a: f3 F2 T8 E* m trace off9 B, q ^$ G& _2 B, Y9 U
停止跟踪, 并且关闭文件3 c: [& c8 X0 R% R
& q k- S8 t8 S: Z
trace 01.txt,0
( I1 t9 N* U+ @! G 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt4 o ?+ v3 l; q
" q) g8 E" M2 i9 m, L
trace off,0
/ e7 M) K( x# f5 W 停止跟踪编号为0的CPU, 并且关闭文件, ]9 U% r, [3 ^. H/ m
! M, u* m% f2 @# Z. O
trace 01.txt,0,{tracelog "A=%02X ",a}/ V' `# e/ k P- p7 ^( P" U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 D5 X1 L6 F6 T6 {" A2 z5 H
并且在每一行的前面, 写上"A=a ": e2 j5 B4 q8 x8 E
"A=%02X ",a为一个C语言printf函数常用的输出格式
* C$ x4 _1 v0 q; h) T 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 i, K& O( X& t3 _2 }
X表示为大写十六进制数) J1 z# k& X# r, ]' D1 {+ e6 k
+ S5 b; Z4 P6 w; {" \5 B
1 Z! K% {! A: Q9 x0 @, Z! _" X+ z. F* E) t$ b; B1 y1 O' B
内存直接写入指令: maincpu$ n: F8 B3 @6 c# R0 c
格式为 maincpu.[][]@地址=数据8 J+ v& w, J5 s% q
第一个[]:) B' M1 p' T! H9 E
o 表示ROM地址/ o7 ~4 l. y# G( h7 J' ~- q
p 表示RAM地址
# }, q% J4 ^5 r! C7 g9 w
/ P, b0 u7 h6 s5 f0 N: p8 v" M$ o 第二个[]:
" r; P9 Q( u! v5 K$ O9 A1 G d 表示4字节 D) G, \6 m, p. ^4 H
w 表示2字节
- I0 `! V0 H# Y/ P b 表示1字节
3 l- |- r8 F# Z* `3 {( g, S3 N- s: l8 @: |( u( J
例子:/ O) c2 S8 H4 k" h; i9 l3 a
maincpu.ob@1234=FF& L$ v' a! z; m# F2 l1 @
在ROM地址1234处, 写入FF一个字节$ O$ b+ {- W/ p1 }$ s" [* p( N
) n6 i& D' D7 R* {( V maincpu.ow@1234=4E71
- f' Z: G: S1 `% m3 k+ d5 [ 在ROM地址1234处, 写入4E 71两个字节
, N5 ^. f" U- s9 s) b; v* d% `- n
! U. M, K" K! z% P/ ^* J9 q! j& W maincpu.od@1234=600A4E71
?& y2 d! l7 K; ~" n4 k 在ROM地址1234处, 写入60 0A 4E 71四个字节, A5 m. g" N Z s+ [3 W# ^$ H6 \
+ O2 n! {& ]3 V/ `9 s
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. k% I. G+ Q8 Y
. Q; a: {& G( h1 \% i6 f! \' [1 [" r* S; c/ Z2 k+ i. z2 N v6 X. @
其他:
/ j5 ]1 z' j; }9 A. \7 ]8 B dasm 输出档案名,地址,长度
' a( Z h: ]& O, @7 j 输出程序的反汇编代码
, x8 I( l1 s' u' z1 F/ c 例子:8 `1 J% A( Z7 M4 K
dasm 01.txt,0,100000/ |3 H& X T3 C5 ^; k* N1 x' j
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 k& k5 q: E8 b' M0 _5 Y( h z$ B; N3 ^! `
softreset- ?) \, r) P+ P* R
游戏重启, 但不重新载入ROM
4 e+ z8 ?* s8 V) I, O$ I. e9 w. W4 x# w% Q( C2 \7 c6 _
hardreset$ a. C7 v: l+ e& N
游戏重启, 且重新载入ROM
8 ^! P" q1 f* @" f. U6 \" K7 l! Y% @- G- \0 s3 ]8 w# f( B3 F+ Z
snap xxx.png+ z' w: Z5 q; c7 L8 f. g$ N
截图为xxx.png
4 `2 g) I( i3 l6 F9 U( V* h4 L9 j9 m
4 E$ O7 S6 b1 w# g
! @7 v6 X) i, f$ s( G, G
+ @# ^& D$ q, V: j1 i2 }! @热键:
# y) @, H0 R! {5 I; C( f( b ~ 中断游戏
1 I0 h) }) C; N9 M8 A7 q5 @ F5 运行游戏
- S( g1 w7 z# F" d, O C8 v$ c3 i F12 运行游戏且隐藏调试窗口
' K1 T7 X- j. L: P: ~ F11 步入, 单步执行, 会进入子程序
a8 H- K+ r- e% w7 w% n F10 步过, 单步执行, 不会进入子程序
3 \# ^9 O: I( Y Shift+F11 执行到子程序返回
7 c7 x% C% f' j E Ctrl+M 内存浏览窗口5 I0 M: j9 \' j s4 f* s3 S
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ d$ r: n! z) u$ M5 A
* w* Q% @. y- x; n9 {' ?" P0 e% @7 m{:4_94:}
; `6 }1 V8 z/ W
4 _* [) N" ]6 b9 Q& _ |
评分
-
1
查看全部评分
-
|