|
|
' `+ r1 T2 [' T% A0 K; r
很快速的整理我自己常用的指令
6 U) h9 p7 w4 k" z/ y4 P. _; R: k1 q% p8 P& K5 Z# C+ p% H9 u
{:4_112:}
9 K0 X; U8 j0 d9 W/ F. p. K
* m8 m! K3 Q: W+ E: X, _5 L: FMAME DEBUG常用指令1 b+ v* v9 B: d# F& [6 b# s
# s9 J8 i+ V, {+ Q6 W1 ~; s4 G
内存搜寻: ci, cn, cl4 s3 U4 M4 T. C
' d: X3 \ W6 i; E9 z
ci. A$ w% k1 u; u/ S/ i# h' L! i
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
$ Y/ Y) O) x1 b) |( Q; k- N3 b+ p# m8 s" O
cn
! S. X* s2 Y9 B7 n 搜寻指令& V- f1 r0 `7 Q
例子:0 z2 @' @+ @7 T& D
cn eq,608 r$ V8 [7 K) u5 E
搜寻目标等于60 (十六进制)
# P1 A0 Q: H" F, ]" g
2 n( W/ N, T! }4 z4 c cn eq,#96
: @0 U- ?1 e9 L5 T' x; K y 搜寻目标等于96 (十进制)
u# h: d# y% b% Y
( K6 C0 ?6 e7 P% |7 z; a7 T8 T cn eq
+ g% Q; h0 i) G5 Q# `/ s8 y+ } 搜寻目标的数值没有变化
# c0 h0 |/ p! T/ l$ S2 d/ W8 \: v9 w) e. Q6 k3 a
cn ne- m& d3 Z3 S4 A. P7 \9 F, z
搜寻目标的数值有变化
. A5 _& h) j1 y D) d6 ~ # }! Z9 u& E1 M, b' J2 Y3 r2 y' B
cn + H/ b, X/ G) E6 x
搜寻目标的数值增加
+ o- ]2 F- @ l* ^# w ! m8 B/ E$ H* q: Q1 ]8 k7 Q
cn -, p& h6 A+ \4 h6 r" E
搜寻目标的数值减少
: c+ F* h) U8 z# l2 [- i+ d
0 u _' e2 o" ~( E cn +,3" g8 P/ P' j. k6 K5 d
搜寻目标的数值增加3 (十六进制)" w7 x+ U5 n- P7 |" m* Y3 L
' h# R0 D+ Y, q5 z5 H
cl. ~7 P% \1 k+ G! a3 P) p b
列出所有搜寻结果
6 n9 b8 |* [; D0 b: o7 @) P# r( ], d. d0 w) ~0 d8 r
cl xxx.txt4 s5 o: J7 L( M& L" }: |& S9 V
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式- S; Q0 j/ E, x* h9 D% J$ Z
3 `) ?2 o2 ^- z9 q4 p: Q
/ M* e& D, R' g2 u) l$ E4 T内存监视点指令: wp, wplist, wpclear9 \( }/ D. P, _5 q
例子:
- K' e! a& t' r7 O3 ~ wp 1234,1,r. X4 e) i2 S* W- Q
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ g4 F1 X1 B0 u4 w3 ^! S9 p
2 y/ B6 ?: J: g
wp 1234,2,w
. C6 S/ ^7 }% {, f0 V" |0 {1 G 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 N A: w$ [6 h6 R
' Y; G: J1 j3 e- V+ F# t C wp 1234,6,rw2 C: u/ W$ c' q6 W; h
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 G: f; w$ R6 H, L! y
" Y! D3 F- S+ D4 N; ^. z% _ wp 23456,a,w,wpdata == 1; W4 l) [% F1 Q) M: Z- K$ B4 o; G: O
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
6 T( ]) O) k! g
' f: l# u: _: r4 P" b* ]" P wplist0 x, w) P) D. M# b6 s: [6 P% O
列出所有监视点
- q" Q! V4 H0 k2 ?4 E
1 B! O" k3 l' c wpclear 3
6 c$ ^& Y N8 `) D2 ^% Y. B 删除编号3的监视点
h) `& P1 D' Q9 G9 P
2 {- l% a" d8 n1 R; i- |; @ wpclear
' a" t. g# K( n* K4 X0 t- ` 删除所有监视点* B# L0 g- Y7 U7 g1 o; q9 L
8 A7 Q# W( ?9 |$ h4 J g; J
; O4 Q4 Q( }3 H1 t; W
% T+ }3 B, a3 `& [" p
程序断点指令: bp, bplist, bpclear
9 l( u1 N8 [& a" F 例子:
! D! d/ D: z, i8 @2 m bp 12348 |$ I# v2 U' ^! s% C' J
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
' L! W6 i& T; {2 B( @% M% u O5 h* F+ G H- Z/ ?$ U$ n8 @! H6 x
bp 23456,a0 == 0 && a1 == 0
! ~6 f$ \) S% g6 z$ L: {0 H 在地址23456下断, 且中断条件为a0等于0以及a1等于0; a6 n+ R) V( K5 p0 V, ~* n
6 y, M. j7 c' \: m bplist
) L* u; t) f) d. f5 o1 D 列出所有断点' A8 p, Q8 K0 Y- c {
* G t, D+ m0 C u2 p1 l8 V+ W* ^+ S
bpclear 3
# x3 `2 d9 y+ ] 删除编号3的断点
+ L- O5 _/ | n, x' s& Q l
4 `2 a! |) U0 K: D% A# Q& n1 U6 ` bpclear
' }/ v7 m7 R4 ^% T: z, K! e+ F 删除所有断点
+ |- B `( _" v( y' j# a; u+ t; N& i/ Y" i8 d, q( Q% v" v
3 k* H% c; K8 r0 C6 ~7 I
& N6 c; j' D8 T0 ]& q2 {# s跟蹤紀錄指令: trace$ `: Y" q4 p2 a# z }6 @: }
例子:
) |. d1 L) |" e" ]3 g+ ^$ @ trace 01.txt9 ] X X5 H' U
跟踪当前CPU运行的所有代码, 输出至文件01.txt' s) N" R# f( e3 B- \; R/ z
, C+ p+ k) }4 D
trace off
7 v) b1 y) q& c2 F+ h 停止跟踪, 并且关闭文件
5 s/ X; M0 ^7 y7 Z: q: h5 Z- S) [5 Q& ?" f( N+ [$ j0 i6 n
trace 01.txt,0) F& G4 ]$ A+ J3 K# E
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) q9 |0 W/ ?& I7 A1 U" d
. ^& _6 L" m' x# I trace off,0
1 i& ~# I; S/ }4 ^* p- a" m 停止跟踪编号为0的CPU, 并且关闭文件
: k* z3 w e' B2 u% e8 h c" Y3 U% O* u2 D* Y3 E O7 Z* l' h8 o! x, v* D
trace 01.txt,0,{tracelog "A=%02X ",a}6 P8 C0 a1 x# I+ H
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 O3 a h: J7 v+ g& v ]
并且在每一行的前面, 写上"A=a "1 o7 m; L7 M& }+ {
"A=%02X ",a为一个C语言printf函数常用的输出格式
9 e3 V! x: }8 ` Y' y6 ] 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
Q( z7 j7 r7 c' A# Z- l8 D X表示为大写十六进制数
$ w" u$ X0 N5 m8 V! I: e2 K' Y5 L/ o' E1 [- ^% d [
3 S% L( y/ @. a7 C3 X, r+ C3 Z
# k# H$ w# }; E$ M" {
内存直接写入指令: maincpu
4 S+ }2 l% F0 I0 Q. y 格式为 maincpu.[][]@地址=数据
& p/ A1 l9 f; z) N, L 第一个[]:; V; `' d4 M3 V6 L X8 a4 G8 I K, K) M
o 表示ROM地址
7 ~6 X/ w; F6 W" N p 表示RAM地址
3 Q$ u% e/ `+ `# y# I Z: I0 u' a1 H4 W: m, U( \
第二个[]:
! \0 e5 i3 {- ] Q9 U2 m; x0 P4 z d 表示4字节9 @' H, F0 w7 c. F! W- p( u
w 表示2字节# M6 M# U3 U2 i' I0 l+ i
b 表示1字节& E- }* I: L' Q4 k" Z S8 f/ d6 ]' B
0 O* h: ^: T* V2 q4 Q; Q 例子:
) U+ C) D( M! ` maincpu.ob@1234=FF
5 Y( t: x9 G2 L 在ROM地址1234处, 写入FF一个字节
9 ~, ^: r! D1 s1 O, S
+ v' z: [# \3 j/ }3 f- n maincpu.ow@1234=4E71! _0 m B- e- G; U, q
在ROM地址1234处, 写入4E 71两个字节: i7 D3 s: n! B0 S& W: L
0 f# r' { G0 {4 `5 i" e6 T
maincpu.od@1234=600A4E715 a* W+ u2 g9 n/ v
在ROM地址1234处, 写入60 0A 4E 71四个字节
! s8 M& U* K/ }: W
" p* n8 ~: H, k z. U X 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
0 D0 F# g9 l7 S' r; o; }* L$ |
, a( d0 g4 S) m) d: z! G8 Y' p5 O: c" O# \- \1 ?& N9 {; _5 J7 q
其他:
% O8 b7 l4 W0 t& @) Q dasm 输出档案名,地址,长度* b" e& n& Y/ {9 y+ G
输出程序的反汇编代码" Q7 y2 R" ~3 \( x1 }
例子:& s9 K2 X5 ?" B' ^# D
dasm 01.txt,0,1000009 j0 ~+ X. Y& d) Y. m
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 F+ \7 F& W5 r+ }
+ E; \6 {1 P+ q# Q0 b
softreset8 a% F2 y8 z4 G5 n/ _; L4 k* z
游戏重启, 但不重新载入ROM/ D3 W' W$ ~% o; h; Z
0 e1 y: j3 M; h1 w7 y hardreset. k4 h F9 C5 M p C% e, o/ f
游戏重启, 且重新载入ROM
2 l( p P; L0 E9 Q A5 s- Z8 U$ h
snap xxx.png! e) I, P z* e4 A
截图为xxx.png* K1 X8 u; e7 p# y0 ]1 X0 b9 }# t* H
6 Z; P) ]3 Q# q8 o
# J) w- Q& h# x* B; C
" w) @4 l& g$ k* ~- | 1 f& X( P) `8 }1 ~7 j9 m: I
热键:
3 ?$ P. D5 I+ B ~ 中断游戏
6 q, X0 [- L% ~" r F5 运行游戏$ |/ \ W- u$ R* b- R+ u
F12 运行游戏且隐藏调试窗口. X$ v P# m' S* W% s
F11 步入, 单步执行, 会进入子程序
' ~+ G7 ?6 D" d( ]6 H+ O F10 步过, 单步执行, 不会进入子程序
6 f! O$ m! L) p$ g. P Shift+F11 执行到子程序返回, U& D( M2 U0 O( s4 q
Ctrl+M 内存浏览窗口( G, G7 g' |5 \$ b5 |
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. @% N, a" a, ^* c
: J+ }6 a# O* J$ v{:4_94:}
: c+ ` i& ]" [4 Q+ j( n: d( G' I0 i9 g3 p. S0 [* ^' p! M
|
评分
-
1
查看全部评分
-
|