|
|
' ^4 L; g& x2 d! L+ T很快速的整理我自己常用的指令
Y% i; S. t" S7 d0 M' O0 @& T+ s1 h S& C
{:4_112:} , J( t9 g# X1 y4 A
: G+ H2 c& I+ h- B, z6 AMAME DEBUG常用指令% a$ e" [# P u, e' S* g9 I. ] }
! ^; d1 @4 R/ N. p内存搜寻: ci, cn, cl
' y( I; I1 x6 P% L! D1 e! C/ U0 s
ci: v) \9 N9 N' m0 h" Y/ E+ X
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' X, o6 t* X: [* ~' I+ o
8 t1 V8 c) b3 e cn
; I3 I4 b: ?6 R6 j g! D 搜寻指令0 |4 T$ G+ \$ J; o: I2 g
例子:
1 h( |8 h6 ^" u4 f4 L cn eq,60
) u: X# o! V9 ^% I1 E, i7 ` 搜寻目标等于60 (十六进制)( N5 |" \; R" d1 a
, E8 J5 G I$ M! i2 ?! j6 D; P# ~
cn eq,#96
0 R/ M/ D" U/ P7 I! f 搜寻目标等于96 (十进制)- L* b# b) ^/ c
3 p/ q9 m9 _ s. Q& \4 ]% w: J cn eq
% k, r: x, ^7 n: w: {7 X" Y, @2 K; ?( U 搜寻目标的数值没有变化
2 ~! o. R: u. s x& G7 [7 ~
. g) R B9 y( ~9 H6 v O cn ne; M5 h. f- m4 K$ Z) C
搜寻目标的数值有变化
4 ^, [- i# ~1 M
: Q1 s% Z# S% N6 W cn +
, @, A# T' i( F2 Y- X% w, J% f 搜寻目标的数值增加5 @: g+ k8 c& U' z4 z7 a& t
9 Y$ ^ o" R# a7 x( d: c! o8 c" i
cn -; ~ T# s- ^3 t2 l3 p
搜寻目标的数值减少
4 N$ m% K) {; |+ C. h
+ \& t* s" Y9 z: G" w) Z& p. { cn +,3
' a/ \6 }8 c+ H0 d7 f5 m2 u3 }9 U 搜寻目标的数值增加3 (十六进制)
! q$ o5 } k/ q5 X/ L
9 l! J9 r8 H4 S% G1 O$ p+ i! ?$ Z cl
7 p& E, u" g) X/ R6 u6 a 列出所有搜寻结果
% i3 g& ?6 W! H A! \' X R' v: g
cl xxx.txt2 ^- X5 W7 f o6 T
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
^) w2 y% z# X9 r5 t* L; Z/ x1 F4 A* P' L! _3 ^$ z2 q9 S: R
' ]0 K5 Q1 X% ^1 Y0 x- e: J2 F
内存监视点指令: wp, wplist, wpclear
: _: B8 n2 z! T8 m# g 例子:# {7 _: p9 J: [
wp 1234,1,r+ e2 F, I/ d ]) n
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- ~2 J* C& L) E v
8 h5 P5 M1 M" n+ j9 q wp 1234,2,w
- n/ K( s, M- A2 s Y! U, L; B 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* D9 F# [4 ?+ x- e6 T1 e3 n$ r
3 ^: |! r/ U- k1 m wp 1234,6,rw+ Z; A0 Y+ L9 G9 A3 s+ T$ k
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 ~* O1 Y, r- }$ ^) ?$ f# ?# L
/ N# P) x* k2 {4 E" O, L/ H wp 23456,a,w,wpdata == 1
" }- |3 ]# Q, E0 A; \. @: ` 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- u5 B; u* B! J8 m2 Q" Y
1 i( k1 x3 R" K1 N% `" ]
wplist
% l! m* ^+ v/ g9 j C4 e 列出所有监视点2 Q9 l* I+ ? v
, P- l% F! D9 s
wpclear 3
$ f% `+ d+ R" a3 ^8 @- D( b 删除编号3的监视点
8 B; c4 g ?) j3 d1 c3 O" k8 H0 E" N( G
wpclear
" ^2 I8 J7 e) S% t5 @6 B. b$ x 删除所有监视点
; V) W a8 W# z
. W& B3 e" Q4 C7 M) l ; w0 B1 w) k& [
1 Z8 ]) v; F; _# k1 a程序断点指令: bp, bplist, bpclear
- ?7 m; d6 P( m 例子:" Y' ~6 D1 V4 b5 z
bp 1234, v- C& v4 c0 z0 e
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 {6 o' ?; Z0 e L% A5 W7 V- j
+ P5 Y1 P% p1 k' t5 R4 h bp 23456,a0 == 0 && a1 == 0( _- k( G: V! P4 d3 |
在地址23456下断, 且中断条件为a0等于0以及a1等于0. P! K, s& V, h. `$ S& ^
/ j5 E+ a* o7 J* _4 A g
bplist
9 c+ j5 {" V3 y! S* O! X* x 列出所有断点# u* o8 ~: }0 E2 z9 y; Y
6 _, Q5 d, r" Z- C6 R" j9 B# Z% Z
bpclear 3
6 b8 P+ u; \: S } 删除编号3的断点4 J8 x* x) J- ]. H' U% |
/ H+ [2 a3 n- D$ c. J bpclear0 n, v- A4 _2 V$ T. t
删除所有断点
' n: c" C( C$ Y- D4 A- K3 L/ d; }$ y2 q5 L3 a
1 G5 `% K9 D: o1 Z7 Q2 l7 F! u2 a1 P
& V1 k4 A ^# _& n/ x% x
跟蹤紀錄指令: trace; G) F! _ D( Y# ?8 f% t
例子:
0 w" \3 a( h0 G: n9 x6 _# x trace 01.txt, t" s3 A5 _! x- n: Q
跟踪当前CPU运行的所有代码, 输出至文件01.txt
9 G, n* V; f+ D z4 ]* J/ f0 n' y' A, Z5 W, j% l0 a8 y
trace off
$ Z, a" h" M0 Z- j4 ]+ n 停止跟踪, 并且关闭文件8 Y8 r( H' i7 h0 D
4 o) J1 D r7 r
trace 01.txt,0
" W, n/ A$ `0 G+ {4 k- m 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) ^) S7 z" Y/ Y/ q. l5 s2 y
. ]& {& u/ f$ G8 Z% c trace off,0
8 @, J+ Y7 O- B: e2 r 停止跟踪编号为0的CPU, 并且关闭文件
1 ^6 m& M! n# G, X: m) O9 G H4 w5 g; ?* K1 l% I
trace 01.txt,0,{tracelog "A=%02X ",a}7 M1 r& T# J+ J) f4 v
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ H/ F& O& E u; f7 c x 并且在每一行的前面, 写上"A=a "
+ b+ D5 n4 C7 J. F" g" r "A=%02X ",a为一个C语言printf函数常用的输出格式
8 u: E+ s( N) p3 |# ^5 ^1 Y8 L! W 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 E" }' ^; o- D% M* ^. s- E; A X表示为大写十六进制数
: O" b# A3 i3 X6 N* l" G$ M n: E8 t; j& W7 U- P8 _* U W
! J1 t% Q0 s: I0 x. F: q$ j4 Q, Q5 e2 j0 O+ |
内存直接写入指令: maincpu5 X# u8 ]# e$ H
格式为 maincpu.[][]@地址=数据9 I# l0 u$ i2 ]. A
第一个[]:" h% ]- r, K/ P6 _
o 表示ROM地址
8 D2 D( r9 @1 ^( q3 W2 N4 |' Q p 表示RAM地址
. \2 B5 J9 J( O& P9 H
' O% L# J) P9 ?8 Q7 k: e 第二个[]:* \6 m2 R B$ L- E
d 表示4字节" s2 |8 z1 G. ~/ D
w 表示2字节
y2 Q) q0 f. D b 表示1字节
4 e! L S" {4 S5 D5 u' b9 a1 c* M3 l5 y/ y! s3 T% y" B
例子:4 s# b/ S, a5 f0 y
maincpu.ob@1234=FF
* q& r! N# m) L+ [ 在ROM地址1234处, 写入FF一个字节
: ?* J$ c9 q% h3 F5 U
# Z2 L" C" S4 N: O3 r0 M maincpu.ow@1234=4E71& L Q$ Q9 ?" A W
在ROM地址1234处, 写入4E 71两个字节& d4 w$ h$ |$ j) f, D) x: A
# o: s z9 _9 M% m maincpu.od@1234=600A4E71
; x4 l2 u v6 @/ \- d% q: }; | 在ROM地址1234处, 写入60 0A 4E 71四个字节
) g0 |8 B) F' j3 I% F/ {: M1 N$ v) v) n6 T5 t- c% y/ f
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 g2 L7 O6 M, s* l. w
: F3 ^. Y) e3 `
7 n' [; [# C' T6 P1 e% |其他:; Z& ~- O o* J9 ^( x/ u
dasm 输出档案名,地址,长度5 l! e& w% n6 q) q, E- ?
输出程序的反汇编代码
! C' q! c& S$ f8 _6 `8 k 例子:2 K7 q5 _4 B8 k* J6 h/ i
dasm 01.txt,0,100000$ R$ J. j+ r3 Z; a7 c
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
7 ^! }7 ^: B( r: U$ F6 N# C* X+ X) N; j6 ^+ {7 x
softreset
& ]& w0 t' m; Q" j/ B6 t0 f8 | 游戏重启, 但不重新载入ROM0 S% G. ?, q: B0 e
3 D. b k7 P+ w6 Z' P5 |: A; i5 j2 {
hardreset/ [+ g* H; j' O) U. ~* ^( ^. r
游戏重启, 且重新载入ROM
# I4 _) J9 x: h h
. A* D0 b! B/ p snap xxx.png
" _. h4 [" l: j3 L& _; O 截图为xxx.png6 M7 M4 z7 S" e5 E, H! y
+ v* j9 X x" \- h; T# x( M
$ z% v2 B. n. t0 `! J; m
: k q0 l0 F8 k9 V
$ A( ]) h* X+ p3 E. Z# d1 x热键:3 o# c5 M2 K2 V( Y
~ 中断游戏
! _- s$ W# g$ i/ Z F5 运行游戏% i N" y' t7 {- L t* S! \* k
F12 运行游戏且隐藏调试窗口; x$ a% Y) c* {: { d
F11 步入, 单步执行, 会进入子程序
@, F9 z# L" A; a" B F10 步过, 单步执行, 不会进入子程序
! }' k' ?9 z! q% p% O o Shift+F11 执行到子程序返回
' k/ S- Q! H/ Q) D9 i- Y8 J Ctrl+M 内存浏览窗口
+ l) n0 T2 B. Z F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( H" f% v |: P- t* |! B( z3 K
# { Q' S; f* p# J& a5 E+ e) k
{:4_94:}
a! H, v- J* ?8 u2 \
( b9 u& Y b7 x1 y* E- ~/ c) |" Q |
评分
-
1
查看全部评分
-
|