|
|
. k4 t* z3 G+ F# c0 E很快速的整理我自己常用的指令5 l1 i% j! _: o+ w( v: @8 q% U/ x
4 {2 i+ S# j; i [( [3 v{:4_112:}
& S; [* q4 C+ {8 C9 E" R
5 N8 Y( R, i' i( _. S0 D4 j6 EMAME DEBUG常用指令! t$ H, p) w3 |3 Q' }6 w8 W- p
/ q' c( Z- B; c4 P# S( G+ h4 O) M1 o内存搜寻: ci, cn, cl2 K& s8 C$ X8 p5 t, H) \ n
3 I/ w3 W" M: G) C8 b: M2 [- f
ci" N5 m5 U+ p7 P1 @
搜寻任务初始化, 每次搜寻一开始一定要输入这指令) ?) C$ `7 W+ @) Y
& @ c- |4 X0 }0 t1 N; t5 d$ V2 N
cn$ [2 K" [( M& y/ c" v) y; w( o
搜寻指令
- P6 ?. Y- D) t i 例子:# U) G3 c2 H) I, w% M) h+ F$ \* a
cn eq,60' ?' w9 W# D; A) k0 W& C/ f8 d
搜寻目标等于60 (十六进制)
) p: r1 J. r- m8 o& k7 X8 F
2 {9 V6 }& Z( T( e# K cn eq,#96
2 s$ M \* Y# L( k& F4 B 搜寻目标等于96 (十进制)
( b. ]( ~! ?9 W& D9 t% j5 Q! I$ V; k: M% H2 S5 {
cn eq$ h5 ]4 w# X E9 d1 A
搜寻目标的数值没有变化
* ~( [% N6 j3 K' l1 f. o( Y4 J8 C+ X f' Y
cn ne$ q7 T- M2 ? n- C
搜寻目标的数值有变化
/ N/ {& [5 e, E4 P6 J; v/ p . t$ D3 v' h) A+ P0 M
cn +
" S# j( E4 K3 j- C6 T1 D! t( n/ z 搜寻目标的数值增加
4 F! Y1 P6 V. R0 @& L* L4 G 2 |; D5 d8 v+ l! d
cn -" x0 p( ]/ H( v8 |9 k- Q/ \
搜寻目标的数值减少6 Y, `+ R! z, h5 G/ V
! f0 _5 l; C- j: u+ d" y cn +,33 Z" z; d; q& Y S4 Q
搜寻目标的数值增加3 (十六进制)0 k* E5 e# \( k" U( V! M
; [/ K, U' y' q1 G* _, S4 Y9 F$ U
cl
6 x9 }5 N0 f- L- ^7 k6 v8 Y6 ] 列出所有搜寻结果* J) E: V' C3 k2 N/ ?' `4 H+ N
+ c# m( `6 K, Z
cl xxx.txt0 T9 N4 z+ T1 W3 e y# x' g+ \
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
. k* G' c+ V' g+ H2 X" i5 o$ M9 k( m/ @0 s
7 u2 u( l" ^" h5 n- n$ m% ]内存监视点指令: wp, wplist, wpclear ]; A2 _! g( F! E- ?% m2 D. I7 v
例子:
+ @. X1 b- }6 L wp 1234,1,r
( l$ H8 A2 L* W# z: q! R- z 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' L' `; o0 ~; G# I" C( I3 u8 y" i
: E2 V$ o0 v8 l! m; ~ wp 1234,2,w
2 G0 K) D5 F/ e U 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 K ^8 L6 {& F9 I1 L% S+ L 2 `( F* s, b) }! E+ { M
wp 1234,6,rw8 T! r* q1 M) {; q2 F1 H9 c( V' r
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 }( G# T8 B( m D# F3 @
) i, O/ o1 ]3 `' Z
wp 23456,a,w,wpdata == 1
3 q; e8 V3 o& O 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" @/ c* E, T- p; u
5 O2 o5 F$ k4 {& P, K5 ` wplist
3 V" e' D, D# b* q3 Y2 s0 I 列出所有监视点+ M. G, V6 P1 |3 J/ b
" {) X* ^! f$ x5 [" B
wpclear 36 N! o! z& B9 O( r
删除编号3的监视点) x, e8 w2 h% I9 Z
; [3 C8 Q" @' [2 d
wpclear
. z9 f8 g0 p7 L 删除所有监视点0 w! D0 r6 i% F; m9 R# x7 m( v
7 Y$ W2 h4 b" d3 a2 F
# t3 {/ F- Q: g& a2 k
3 r9 N4 ] D% e& @3 V1 W/ t/ K8 @程序断点指令: bp, bplist, bpclear
. A# E& V& G! D2 o% S 例子:
+ r# }/ ]& Q! o# u; O! g bp 1234
+ @- _4 B0 m+ A( r0 O2 ` 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- q& y* a' O0 V" U2 f2 d; w3 i7 `
( Q% t* K7 Y* U$ H, r. o bp 23456,a0 == 0 && a1 == 0
, F: @ _" v3 [* F" L8 q/ ?$ ^$ m 在地址23456下断, 且中断条件为a0等于0以及a1等于0
' W: h: u& O, m3 _" `3 m3 i+ s/ O7 T ^: `; S Q0 E$ x: Q0 g
bplist" V/ N6 A. i2 R* l
列出所有断点& \& z' B, n& `2 v% ^& ]9 H
3 l& U1 Y; w, @) a* s& i bpclear 3
# K! H4 j1 c# c# |7 Q8 P 删除编号3的断点3 l! \5 g% m# Q K* c b* w
4 s7 s1 p5 C$ p1 U4 v7 o bpclear
( J6 J% |( X( i2 [8 G 删除所有断点0 ^" `% N+ v/ V" A
2 F% m8 ~! P4 n7 N3 d
* D& b, C' o' g9 s9 @( M
! P. `2 A Y5 e5 }) D4 e
跟蹤紀錄指令: trace$ R z' m: b# Z; S s. ~8 E; l& }
例子:
! D, ?/ j! R$ a ~7 Y% G8 y trace 01.txt
o8 E! F+ s9 o8 ?1 U' B 跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ ^1 J9 w* s; o0 b6 N
# }# d' C5 n! W6 H& y& @, k- X2 g trace off8 y* g" d- M/ T/ h+ r
停止跟踪, 并且关闭文件4 j( E$ E! C9 {. X W+ ]
4 H2 @" k0 E. V) i) Y$ Y
trace 01.txt,0. j5 ?( l. G' r( z# |6 L
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 w' ], e& \3 Q4 E( S, h1 p9 c* X) J: e- ^+ V, a, o
trace off,00 t6 o6 d( j3 J! h7 K
停止跟踪编号为0的CPU, 并且关闭文件
1 ^4 z' k1 q U5 A$ z) K* H4 H5 b
trace 01.txt,0,{tracelog "A=%02X ",a}, |2 [; m6 o# V0 | S. B( E
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & W. x/ b' ?2 i, z, j3 L
并且在每一行的前面, 写上"A=a "( U. H# W3 S, O4 @+ Q
"A=%02X ",a为一个C语言printf函数常用的输出格式
4 ]+ |0 o1 s7 G& S/ u& f+ P! S( m! m 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ c& R6 s/ B0 y% e6 ^" | X表示为大写十六进制数
5 h* x* R8 ^. J1 Z" a) P& w/ M' B* N2 T4 A
' ]' ~8 Z/ C& ^' R$ ]
3 o3 ]3 k# N5 r* T- H3 b9 u" i3 Y内存直接写入指令: maincpu X' n' I! W. e- B
格式为 maincpu.[][]@地址=数据, l8 {7 w% Q1 i! i
第一个[]:
u" d: a, |7 s& y o 表示ROM地址
# R8 F+ I* S& T% D. k: t$ a p 表示RAM地址
3 d& Y( w4 V$ j& J& t
1 _0 p. D& K4 H3 |- i* ` 第二个[]:
& i+ _" h- y. d1 x( ] d 表示4字节/ P) O% K! }0 n" T# ?
w 表示2字节) _: v/ I7 e+ l) {4 n( R; W& L: j
b 表示1字节
3 s! b/ d9 L: N& C) r6 U. T/ F$ W$ x1 M7 ?
例子:
" \5 N" h( l( \' U/ e maincpu.ob@1234=FF
% O3 R& N# O! o4 S- Z* L0 u( _2 U 在ROM地址1234处, 写入FF一个字节
8 t& K* p: P4 h: @ I6 Z- `# U! [
maincpu.ow@1234=4E716 n/ H! q5 u* r
在ROM地址1234处, 写入4E 71两个字节
+ V% o0 F# b, A
6 Q3 x$ A% f9 C* R8 J: k0 N maincpu.od@1234=600A4E71
! z! |7 i( g3 u 在ROM地址1234处, 写入60 0A 4E 71四个字节* l( _9 \' f9 G9 \' t. d- [) O A
* ]* q8 a4 u/ i( h$ U7 F, a 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* S* u4 }& `5 K) H1 B& A
3 x. b8 H$ b: K+ l/ z x4 h4 u4 P- @+ u8 u+ s! l/ H) X
其他:6 D$ o* r% ]+ g5 S2 Q0 W$ l( P1 n0 v
dasm 输出档案名,地址,长度
7 f$ L; e' \; ^& E* P 输出程序的反汇编代码. Y! D8 g1 W3 X6 W7 e
例子:
8 h* B6 O- r4 \0 W dasm 01.txt,0,100000
& F: |0 G7 \8 r- J3 b 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: N9 E: A6 [9 E7 Q
# [" Q& I( M1 }8 U8 t softreset3 u* i3 I/ c* q( M5 k, i9 K/ t
游戏重启, 但不重新载入ROM/ D0 k6 Z8 |7 I- H
( i/ P* l4 v X9 V$ l$ {
hardreset! m; o t& p* `0 ^9 l
游戏重启, 且重新载入ROM
: N* [5 w: x) l( v# {! B) P* B: {
7 N) S) o3 S$ L2 Q! u snap xxx.png
4 W- q v: T. l( L0 o3 y 截图为xxx.png
+ W8 E# i6 {# D! P/ ?8 D7 ?1 X! F# Q, _+ C9 `6 L0 B ~
) E$ y* u) E5 E. V! d+ w6 M' Z: S/ ^
; |$ U/ \ F( @: y/ b) M& i ! o1 {+ ]5 Q2 q i# q% w# O. |8 Q
热键:
0 U. m h2 T) r9 f1 J ~ 中断游戏& g0 D7 S- d+ |; A; m8 c. P7 r9 S% D
F5 运行游戏% M" L6 K% l) Y _0 Z, I# _ n
F12 运行游戏且隐藏调试窗口$ V9 q1 w! o1 N
F11 步入, 单步执行, 会进入子程序( t: o) v3 m: m/ p3 o
F10 步过, 单步执行, 不会进入子程序5 O3 i: D! m" r2 T1 _ B% z
Shift+F11 执行到子程序返回4 S g2 M2 L3 R
Ctrl+M 内存浏览窗口) k8 U$ j, |2 v. v; J
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
1 Q0 j9 }9 @: w& V- [% l
; E4 f3 y! `$ u) F" |{:4_94:}
; ?( T2 x# L% C7 \; j4 L, Q6 R( e& G6 j6 D; b
|
评分
-
1
查看全部评分
-
|