|
|
$ m5 B8 U8 h$ Y+ A) Z, ^1 H9 ]4 ~* |很快速的整理我自己常用的指令
; J; o" S {* D9 ~* f4 |/ @9 s4 w& w' s* n' [5 L& s! }* A
{:4_112:} : Q5 o" _( C4 b4 G/ @7 c/ y$ t, D
4 S& |4 D7 Y8 m7 AMAME DEBUG常用指令" |% W! {: s0 d7 v
) ^. C( V. T7 e8 o. f& g0 d: {" V
内存搜寻: ci, cn, cl" I( J1 p/ N% q H9 o
& ^; H' D8 R8 j; k1 p& R
ci! A+ j, U. [5 \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令, A( I0 R) Y) h, t: J
' a% \; G) b. F
cn; o4 u/ i& u {- \
搜寻指令$ g. ~0 G- m; {4 L2 I5 o$ F
例子:( R% }9 n# D% i
cn eq,60: j. ]& ~2 R# a2 f2 y f
搜寻目标等于60 (十六进制)8 }3 i6 P# ]* }! Y3 u
3 u7 K% y7 o h9 U. J/ x
cn eq,#96
# ^, x. U4 \. T! V; h3 U) E' w$ N 搜寻目标等于96 (十进制)
" j# C9 ? |; y4 C( g* x9 v: O3 a, S, Y" c- i
cn eq" y' t) U7 O. |" y" f* f9 j
搜寻目标的数值没有变化
- O3 s0 D) _! ?# k& `/ C b2 y2 \; ^' i* y7 s, y, n* W
cn ne
; d% S; x d. ]4 f( c, q G; z7 Q 搜寻目标的数值有变化* Q/ U A, V- N5 {8 ]
" l: S$ E$ i1 u d8 G6 X
cn +- Y9 Z* [0 y6 i( |7 S G
搜寻目标的数值增加9 y1 e5 }4 X% Q; y$ `' V# _
' q% T9 O; V5 J+ I cn -
) k1 Z Z) v% F 搜寻目标的数值减少" p( N Y4 B4 b4 X4 [ K
" W& u8 S9 E' Z" b" m
cn +,3
. B2 P1 D1 q8 r 搜寻目标的数值增加3 (十六进制)
8 C5 ^2 c, ?$ |8 }9 \' Z" j$ u( j1 @/ w: _$ I* M3 }
cl: {2 Q, t: W0 |
列出所有搜寻结果5 o8 N, V! C" _. `
# I7 B8 P7 T! k% }; s cl xxx.txt1 M8 F' O; C; N) C: i3 L3 O( [ l0 u
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 e/ C8 J7 D/ i) m W
* }5 d2 R3 X3 F7 Q) E3 E5 \4 C h 4 Z) R3 G8 D- ~& S
内存监视点指令: wp, wplist, wpclear7 R2 l7 C( Z; ]5 R+ S
例子:
; _" C; R/ [# A5 f h wp 1234,1,r1 F1 K9 z4 ^% B! l* G' f. Z; y
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度13 C, A; d3 |1 `0 Q( W5 D' v6 C# l8 z
3 W- e [6 J( H. ~& D1 {+ a wp 1234,2,w5 Y( B& D% G1 H( W( F3 b
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2. R2 y) M! l% G, A8 s1 Y
/ B& o* S& N* n2 Q5 M1 I$ i% {$ j wp 1234,6,rw1 E+ _2 A& r! R; H n3 I p6 P
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
8 q: A2 z3 n& b9 A1 o/ r- @' N. N9 v, q; k3 `+ N
wp 23456,a,w,wpdata == 13 D6 y$ Q8 |1 c' g1 [9 ~9 i4 `
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. z; t: u N1 r$ \$ e* u, W
; ^! G' d) _9 N+ I+ \ wplist
7 D# b5 X+ O: [, V0 w, M 列出所有监视点
! n& M2 W0 H, J+ k% A4 P2 L4 g5 X/ @8 ?8 d3 U5 N" f0 n: a1 a' r
wpclear 3' M! t0 h0 M5 X8 n* C
删除编号3的监视点$ s' L( }, }; Z6 p& f9 m i: L
! I5 ^5 U* v& U0 }: C wpclear+ e- r* A: _% \- t
删除所有监视点
( x# d/ ^ @7 D. v) w1 n! v9 W& o2 S$ H0 s( ?' A) Z! H' g; c& r
6 _) m$ o% _! x: g& ~0 j: r
9 _% a1 U( T% ]) D; R" c, h0 z程序断点指令: bp, bplist, bpclear. |, d$ _2 J9 i4 D
例子:& U- A1 Y, y/ ]
bp 1234
" r b: C7 w1 V' W j: [+ j 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 N) b. A& t# o8 Y9 ~+ z# R, {5 d: ]
bp 23456,a0 == 0 && a1 == 06 y% h/ D8 n1 i9 J
在地址23456下断, 且中断条件为a0等于0以及a1等于05 c& s0 h' ?% k2 T6 }8 A
' o) I7 ~7 |) M e
bplist, s9 K+ x5 g( m( g' }
列出所有断点5 ~. E: O0 e- p- w+ Q
- ]4 [# c/ u5 Z# T) _9 M
bpclear 35 M4 B; g0 {1 g! Q5 b1 ^
删除编号3的断点) R$ ? I" w6 k7 o
1 d7 N- O$ ]* u bpclear5 ?1 q% i! g4 `: S: J
删除所有断点9 a) M% ~6 }0 o2 ^
5 }4 I. Q- R% x9 K& M7 ~
) B' A$ G6 t: p. | 9 ~- [% M F6 y
跟蹤紀錄指令: trace: T. J; t# R$ B6 k" ^% q
例子:" K) K3 s/ `$ a" \- J
trace 01.txt
( S* z9 F$ Z' Q' G: h# m( u0 ?7 }+ k 跟踪当前CPU运行的所有代码, 输出至文件01.txt
, _7 V7 y* y. Z
+ o. v+ s. w3 I6 M0 }( Z trace off7 `: T5 P" \( h1 l
停止跟踪, 并且关闭文件9 ?6 H5 J1 t3 Z4 N9 i2 a" J2 K- i
4 I; B* k/ ~# T3 w! \7 x k trace 01.txt,0
5 R6 M% S- `& {$ @' x i, n( A+ a 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) _, c* D% C9 F) K5 A; _! O6 G
! S) b; _. }, Q/ I4 Y
trace off,0
# o* q! y3 e, m# |4 u0 E- n 停止跟踪编号为0的CPU, 并且关闭文件4 q- J: ?0 }. j1 J# @6 J' C
$ H+ J$ F% v- x; f8 I* H
trace 01.txt,0,{tracelog "A=%02X ",a}
: a1 H. G+ H& \( m 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* `% b8 C% b/ Z0 @- F' |) T! S 并且在每一行的前面, 写上"A=a ", z V1 o; ~. m& n% d0 O
"A=%02X ",a为一个C语言printf函数常用的输出格式7 E% E/ E+ [1 E2 h
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入2 [7 m! A# w8 h O" N! I5 ?( }
X表示为大写十六进制数/ L; C$ B4 d _9 h* C% R
1 R& f% S) t; `2 Z# x% I x6 P: g; n. A1 J
9 `( |+ ?5 X+ {' s5 a# ^
内存直接写入指令: maincpu
Q; ~2 z9 E d6 B% y 格式为 maincpu.[][]@地址=数据
A8 M9 {6 G/ k; ^ 第一个[]:4 ^3 r4 J3 K8 k8 q
o 表示ROM地址
1 ?* w; L4 |& m8 G p 表示RAM地址
# C: |& o" K5 h0 \5 b' m
# d% \6 j2 X! w0 U8 } 第二个[]:
6 Z. D5 ^2 |/ f d 表示4字节
6 U, {% } b5 j1 l6 V w 表示2字节
- o5 Z* S" [) u) O' b b 表示1字节
8 s5 e& c# z0 Z3 l$ k9 v
1 V$ o8 o3 y f! K+ c 例子:
6 @( d' P, q. [/ r maincpu.ob@1234=FF2 c; B2 I; X9 j6 a& {8 A
在ROM地址1234处, 写入FF一个字节 V% H- \6 N3 R7 d
' y) b/ r9 I2 S% x0 @
maincpu.ow@1234=4E71
% K( E7 T! |" J. v* `% G 在ROM地址1234处, 写入4E 71两个字节
, ~. U( g5 F4 K& I4 A' X( ]/ E" x9 ^: u' w( [' }5 s- ?) x
maincpu.od@1234=600A4E717 H7 H/ c Z% g
在ROM地址1234处, 写入60 0A 4E 71四个字节0 o0 j( _- q/ R, V
+ q# t& b; C, q* Z 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写$ E) b! l! x* ]
- L3 s$ j' d- X( M( M9 K: m6 Q1 G) M
其他:1 W) n+ T3 E& C# q& R7 [) C' n
dasm 输出档案名,地址,长度
) J# B" W+ Q/ w$ R 输出程序的反汇编代码
, m2 H! u6 H. y% Q 例子:$ q G/ ^0 ]+ R
dasm 01.txt,0,100000
; Z; i( D7 e# o# C 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt: v" X! {' F1 [
" |% L& D6 n6 k/ O softreset
5 G: v# N" Q& c. z8 p+ } 游戏重启, 但不重新载入ROM
& R( X% Q) c4 B, J& U# h: ~; Z. [6 {0 O! `2 v, K/ |* }
hardreset+ ^/ l/ e0 I, x9 K
游戏重启, 且重新载入ROM( P8 R7 [3 j: F) t; I7 ~
, i# M# _5 N/ |3 v; [7 r5 o( @ snap xxx.png
8 e7 H" Z# o7 x 截图为xxx.png% Z4 A0 H( f4 _: h7 C3 `
& v# Z! c f2 ~
7 |+ P! v* I$ @6 f7 k
- W7 e0 u, F# j3 j+ }+ E0 X) F 3 o$ H( a. U4 v$ _2 x) \: s
热键:
V' @: ]. e \* \ \0 K3 V ~ 中断游戏
! v' `. @: o$ g0 I8 q7 F: P# `* } F5 运行游戏
) j5 r- [; [3 r& P4 d& F* S8 c F12 运行游戏且隐藏调试窗口
& H7 C$ {$ y4 b3 z% }$ f3 h" h F11 步入, 单步执行, 会进入子程序
% N7 z3 u$ r2 P/ w- ~* R F10 步过, 单步执行, 不会进入子程序: {* o+ w+ C# ^+ G
Shift+F11 执行到子程序返回
b5 E+ |+ ~- E1 f Ctrl+M 内存浏览窗口
: X- S+ k3 j0 S& _6 B5 l! j/ X% m F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
& Q4 m6 w" _. Q- ^
9 p y& {3 Y% E; `# B' U{:4_94:}
8 _2 H0 Z$ j1 x; c* y4 y n5 p
' P$ m. G( X( f2 a9 k$ A; g |
评分
-
1
查看全部评分
-
|