|
|
! y4 e$ A# j# k; i! R1 }
很快速的整理我自己常用的指令
' q m U5 e9 Y; r: E. f6 |; S2 d4 N6 L9 c p" o2 h4 x l5 f7 N" I3 `
{:4_112:} / o, Y. ~# k+ A6 X" ]6 i( ^
: V8 w: j: {2 c" o5 AMAME DEBUG常用指令" F# M( M& X* j$ U
0 F' U' _4 T# s; R8 Y
内存搜寻: ci, cn, cl& T7 m" h4 m; z. e. a H, L Y
: b9 S! h2 f0 f+ K. g/ F2 E% v4 m
ci! u& M: V. l0 ]3 U
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 A3 p0 E" R8 D/ ^5 E2 z+ j8 @1 n7 ]) R
cn$ ]& N, a8 r( Y! T
搜寻指令
, q+ W+ z% U4 \ 例子:5 t- H, e' s* M
cn eq,60' R9 P5 B# A8 V1 _
搜寻目标等于60 (十六进制)
% ^& ~% i [% m2 S2 k9 @# B% t
+ @8 U) ^4 \3 G4 W. w cn eq,#96
3 O4 c% Y( h2 n$ Y4 V, P- u$ b, N 搜寻目标等于96 (十进制)
j' K1 N7 W2 N H) i O" r0 I( ]( F! g0 }
cn eq2 O4 K# I# }1 {& u
搜寻目标的数值没有变化8 }0 L. R8 e, }
3 p. ~& W% M9 q, a cn ne
g; x* K/ [0 Z5 L 搜寻目标的数值有变化
1 K& R+ B3 L- _( }2 O1 ^$ n: O2 [2 [1 | " R( D' W$ ^; W2 Z& W ], C
cn +" I$ u4 w# \" \" C
搜寻目标的数值增加
* R7 X; k' {+ ]; L/ o* u: k* V9 M ( o, h4 Q$ u" }
cn -2 _. W- \: _( g/ X& c9 [
搜寻目标的数值减少/ t v+ B+ h! Z$ l9 C
, ` N% a Q) n' h
cn +,3
/ Y3 r- X. Z* A 搜寻目标的数值增加3 (十六进制)
! s5 A' O2 T9 `. h( h# C0 b6 X/ i6 M. g( r
cl6 t- i8 n4 K8 q+ _2 O
列出所有搜寻结果0 I3 F6 ]1 J7 K% C" e
! P* o9 _' B8 u7 r8 E2 S! K2 o
cl xxx.txt
% F3 y" J' X5 K4 ]- {# I8 g 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 r7 l& g. j2 b, P4 r) c
# f4 Q: d0 b) U' p 4 L: u% I2 u3 e
内存监视点指令: wp, wplist, wpclear
. m' c& J6 j1 H- F! u 例子:
9 O& S1 ~: N3 A# e! ]% K8 { wp 1234,1,r( ?/ v+ ^' L; [" `
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 i2 L. K- h+ u Y
1 U+ c; T4 T3 j& m8 E wp 1234,2,w
! w9 O( L; c. S$ J5 A$ G _ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' N7 _% S# T' f' M$ g, p+ h ; j$ s% N/ c5 Y# t5 W
wp 1234,6,rw
S! y* \5 q/ v( C N 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 P5 D4 P+ v& @* T, X; N3 h( d# y# m7 w4 t! H7 C
wp 23456,a,w,wpdata == 1
# W$ u' p& z" q. b" u [* z2 K 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ m- V8 A% p2 ^0 x t. _4 K( R8 `2 n: @+ W$ b. a9 _9 o q
wplist# |, K8 z; [1 W. }& }' Y8 N
列出所有监视点8 \' c P* F* Y1 C- V; p
2 R! V4 H. o. f' Q wpclear 3
0 M( i0 j0 @$ U" m& Q- q2 a: R3 | 删除编号3的监视点
" f. m4 o. K# x+ h) `$ O. B. f0 ]
# a8 ^; q4 h" m9 Y- W wpclear
" d+ Y5 }8 `- p- ~! u3 U3 _ 删除所有监视点
( O9 a- i9 `9 k: [1 v/ }: d
_! Q4 Y3 V# w& H- X; w0 h$ n$ I 9 C! g4 M; d/ G" x5 j5 o6 n% l
9 @4 Y2 H# n5 s1 u u程序断点指令: bp, bplist, bpclear
# Y; @7 g9 S" h! _! ~3 G 例子:* ^, w1 x2 G5 |# |$ U. b B
bp 1234
_. v1 T( T1 g8 v: D0 m6 Q8 q- B1 r 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断$ `4 f4 v/ U/ f+ C
* J; d% @* O& }1 `. b/ \
bp 23456,a0 == 0 && a1 == 00 ], z' X7 I0 j" f) _( a; B
在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 E2 J" n/ I/ ~& F x/ @+ c2 j- |: z0 f4 L' x4 t$ Z
bplist
9 d- t) I! f" L% b1 Z+ p: ~) O& ]! q 列出所有断点) ^ u: _; C3 M* W: ?- J
. o- v( A K8 d7 k* D7 k
bpclear 3
2 s, r7 a- R* `6 ~9 o1 Y 删除编号3的断点
' s! \/ J: b; M; U" w$ N3 M3 [. n
bpclear' g: M6 j5 x" V; C J
删除所有断点
! G/ ? U* T0 v9 ~' @
3 K, A; M7 Y3 J+ X/ t
8 K% F' W4 z" u2 J* I $ g H( e9 K: l8 R) f) U; u- P' j
跟蹤紀錄指令: trace9 ^# S; ^# |, u0 Q5 a# F
例子:
7 |8 ~% w/ O/ r3 A trace 01.txt
$ X F2 V: H4 Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt; q3 Z5 M5 e( b# J
1 c3 W; K5 v" \2 o trace off/ G! c2 r6 _" r' ~1 X
停止跟踪, 并且关闭文件; [% H, }: M y0 s" |
0 ~+ z& ^9 S/ V" R* Z trace 01.txt,01 a1 ]5 E5 S g4 Y6 u. ~
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
. V0 C. u" R. A4 j, I& L/ j. T8 s
$ N& I( A- z, @: y9 D6 g r trace off,03 K( C- F0 ^/ B, \8 Q+ D4 ^0 @( v5 U
停止跟踪编号为0的CPU, 并且关闭文件& I$ e/ z! @, E7 p6 }" q
# v/ c! U7 n$ C; ` trace 01.txt,0,{tracelog "A=%02X ",a}# E1 H; i x- L# K
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : {' ]3 ? @0 M+ H; K/ C9 K( F
并且在每一行的前面, 写上"A=a ". R" K+ k' l0 Z0 n# h7 j
"A=%02X ",a为一个C语言printf函数常用的输出格式. Z0 F- e" b+ ]2 ?. v( h3 H7 q
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ \0 \/ R9 F4 t: B3 U Y/ e r X表示为大写十六进制数8 H) \- T$ S0 | j+ T
4 u) p+ p. a: o* z/ M
! E3 Q; b7 J1 u$ P' s
1 Y/ _( N/ r! R内存直接写入指令: maincpu
5 q4 I% ^, Q5 a4 k* V 格式为 maincpu.[][]@地址=数据; R e2 q: K- V5 J
第一个[]:: s( M9 V5 e& F
o 表示ROM地址: s' \% l9 H1 H: S
p 表示RAM地址
. ~3 l6 w! f$ O. Y2 C) Y: E4 C, h7 [6 c
第二个[]:' S7 Q& Q7 _& [ Q2 P2 m
d 表示4字节
6 Y% E2 D- U* z& z w 表示2字节- N2 y8 p, ~) _0 r: O0 Y
b 表示1字节
; u/ P( }) [- L; c/ i k2 N7 C! ~
8 k/ Q7 J: Q% k 例子:
& _) g b% l- R4 k, O- E maincpu.ob@1234=FF
. |* O% Q' H7 S! `# X% w$ Z+ m$ ^ 在ROM地址1234处, 写入FF一个字节# \" |$ e( H) s/ u/ k# C
# M* Z% ~! k; p0 | maincpu.ow@1234=4E71
$ u% S# ~# b- y 在ROM地址1234处, 写入4E 71两个字节
" V8 h+ ?8 r( n" R1 {+ C9 [! c& ?
maincpu.od@1234=600A4E711 y8 W: a$ ^" e, K0 P2 d
在ROM地址1234处, 写入60 0A 4E 71四个字节9 [' d' n4 F4 H, [& A7 u
$ m5 Q: Z; _: r 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写- [4 O. `# R3 r) p& t1 J" g) ^
7 r" o1 I( k2 Z
' R; H) b2 {3 A( v3 }" v: x! H其他:
$ v O1 {0 }% d dasm 输出档案名,地址,长度
, ^% z: K8 V& Q* X! @7 E; N* H 输出程序的反汇编代码6 k3 |2 L1 U3 Q$ [
例子:) j: s% }, Z) S4 M1 k
dasm 01.txt,0,100000; t: N( N6 }' n5 @9 c
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
, S$ g9 o, x$ D2 L9 E2 O0 D3 U- J& M3 `! j
softreset
7 I+ |5 u o' S 游戏重启, 但不重新载入ROM3 C- [, ?) e; X* b) f( t: \2 G
' d) |% @( L: s, S+ m) | hardreset
/ V; s6 z% ]2 E3 y- Y+ }! p5 Q 游戏重启, 且重新载入ROM
3 v8 d3 u! l% X* N, L3 B# ~1 Y- _( D1 G, g' I+ L% f1 [* y2 N
snap xxx.png! V1 v; k x1 F) G
截图为xxx.png: x5 Z9 [. f3 a' f; c
) K1 R. G$ X7 a) k0 N/ w7 a
' _ O. S o4 V; ` + J3 V& n# D+ e" I" V& q
: [" g4 u$ p+ x4 Z4 R热键:
$ [* r( E2 i; p, n- M) ^( S6 h ~ 中断游戏
# d8 a0 T( v5 q7 _ F5 运行游戏$ c$ f0 A2 c6 t* D
F12 运行游戏且隐藏调试窗口: H1 l$ M9 C* b
F11 步入, 单步执行, 会进入子程序$ b6 w* A' u; H$ z H& M; x; ^( U
F10 步过, 单步执行, 不会进入子程序: {* a/ b( ?! W7 T
Shift+F11 执行到子程序返回. T& o5 D3 A( p8 ?
Ctrl+M 内存浏览窗口9 j) p4 }9 v4 P
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU* m% i. _6 p( y9 F( S* I7 N$ X
7 d8 [: U1 \: b8 ^( n7 G% n
{:4_94:}
. {+ k. t3 ?1 ]9 r4 o" h/ X
7 B5 J' G ~- `2 L |
评分
-
1
查看全部评分
-
|