|
|
; o! I c3 }* y. M! E# m- r7 ^% z
很快速的整理我自己常用的指令% v) h+ t: G( V, }
4 e' g" [2 A% O{:4_112:} / `, L- X4 o! b) }
2 m# V, M# z2 F/ C- BMAME DEBUG常用指令5 @- F8 P6 A7 e# M0 I0 s
: w5 P S$ @) |4 q
内存搜寻: ci, cn, cl
/ L Y" N8 C4 g% m! Q
" d+ M; j' _* h. Y) X, M4 P) w [6 r# a ci6 ], ]$ ^" [7 ?
搜寻任务初始化, 每次搜寻一开始一定要输入这指令 S+ s" h* v# _
5 k5 J2 w2 ?- y$ u% C cn
0 |7 v& T$ a; C# c+ N 搜寻指令! f" A% f9 ~- F8 l$ d: N+ l
例子:" U" \. }2 w9 C7 b
cn eq,60
$ r$ U% n; h) }$ M$ x 搜寻目标等于60 (十六进制)
2 f5 `2 j' [( U
" f! S$ p8 m2 ~( {* x cn eq,#967 t+ _5 k' H- E0 F& u9 R" C5 @
搜寻目标等于96 (十进制)' V" O$ q& j8 O; W
! l, h9 V9 D- F* {, Z7 G cn eq9 t: }( U& v/ R! x
搜寻目标的数值没有变化
# ?+ z3 a1 w( ?, b1 Q0 B, e; d" z( j4 v5 H
cn ne% y3 t, V8 y# f2 p t! U6 t
搜寻目标的数值有变化
6 H4 l( Z- _' `% k# s' g4 S } & o8 X2 V/ v+ z
cn +
3 W: |8 X/ r b7 W/ G1 k 搜寻目标的数值增加5 l/ e# ]8 U/ P0 U
7 d" x4 V' o2 Y
cn -
& g h0 | h7 e6 w5 y 搜寻目标的数值减少9 e2 g7 M- l% A% y
7 J/ L5 M6 v; ?5 C) ^' E( W
cn +,3( K$ ~0 d9 z5 K# u. G/ |" V
搜寻目标的数值增加3 (十六进制)- q- m% Z9 ^, l+ B9 @( ?: {
, n7 M& M, J% S# Y3 T1 B9 m
cl
3 S T: q0 C' Y. }( N 列出所有搜寻结果
4 N' Q; y9 O( _4 g" B' D/ G) E2 Z1 M. g# A- K- ^/ }7 G
cl xxx.txt, T3 k5 d3 j& I& L
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 r# e+ A, Y) e2 @: m8 V3 t
& J7 e' o: c; Y- g' Q0 G
) t( f/ U6 f# I t6 i内存监视点指令: wp, wplist, wpclear U$ a& a2 E7 N+ ~9 U3 p
例子:. j- Z9 y, g& H: \& G( D) D
wp 1234,1,r- D0 x8 P2 K0 P, Z. x
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1 \) |; L. ` m' t* [ E6 F8 z+ Z
& E1 a3 ^% U( ] wp 1234,2,w
$ T n* Z' D- s( d$ d 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 ~# s9 J/ m, I2 @/ n. i% T T
! ]( G4 a8 N1 ^+ [+ }! P+ J
wp 1234,6,rw- Y1 C4 N8 K2 n, p
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
. D+ q. i% x& L; _ @3 o8 }1 C1 s( J9 k5 Z: h7 _/ D: j
wp 23456,a,w,wpdata == 1
b$ C+ f9 k. d- k4 v2 Q" X 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
+ h0 i& }9 t9 {# l+ u) g
. D# |0 H3 N2 H2 U" r) Z1 b wplist
! @+ v' m& I: E' q7 y( N* p) w" h 列出所有监视点2 l/ Z3 [9 v7 J+ Z
9 z7 {, V/ Z6 J0 ?+ q
wpclear 3
1 V6 R* {( H" m; g9 w7 o$ \& O 删除编号3的监视点
% ~" `2 n+ g4 U4 y4 ?
3 l& q# c, s" t5 C7 n wpclear
S( c9 ?, |) i3 }( V 删除所有监视点
0 Z8 M+ {: r# D, H! h9 U; A
9 m0 v4 W! x, c/ L6 @- r. j $ R( W1 ~3 `! M+ E+ l! ~ D; d
0 p8 ?# P; G$ ?% ^2 }, Z! Y# U程序断点指令: bp, bplist, bpclear
- |6 [2 ]- h. e1 y7 _3 c) B 例子:/ ?8 a' T9 L* n3 L
bp 12349 e; [( c h J0 j
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 ~* ~* }; f6 B3 H, _
0 E0 m; _- e' ]7 K bp 23456,a0 == 0 && a1 == 0$ v* Y/ {! g, Z& m+ K* g
在地址23456下断, 且中断条件为a0等于0以及a1等于0* z, ~* Z/ x$ r" {( H7 }0 L
* K( h* @6 G7 u/ `3 t$ X* I4 x
bplist
3 g7 a# K: m$ a9 @3 e0 F 列出所有断点
+ E m( d# r) `; R4 B+ w- D& P. A6 g: N
bpclear 3
7 J- H6 S( l% F 删除编号3的断点' W; {- M1 r& v8 X! }
7 ]! ?8 g) g. J6 @# d" F
bpclear
# ] G; a4 i3 _- `1 y) L 删除所有断点; f* C+ P3 h* F3 E* c
3 [ p6 d1 \% ]
. Z, {3 w/ X3 k: M0 Q4 q) w + T. x r2 W( e% u6 n8 x
跟蹤紀錄指令: trace8 {, R/ h! j2 P% \* `' x
例子:
. _3 b5 Z5 S1 r5 ~+ g trace 01.txt
/ ?4 r, p+ V, e$ U& H+ o 跟踪当前CPU运行的所有代码, 输出至文件01.txt6 Q+ ^: @- i+ i+ P
4 K) I, K l- `; K$ b) f5 U% x
trace off2 L c$ ~' l7 m! ?# n0 ~
停止跟踪, 并且关闭文件
1 N* ?! z" H% n; o
/ h' F# w4 B& z. _. O* L4 H trace 01.txt,0
9 I" Q d5 I; C7 |; [. z% _. E4 J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: m0 V$ @: `- I, N, p
$ w+ K" r! V* c* L! B& o t trace off,0: a. y& }1 k3 w/ `
停止跟踪编号为0的CPU, 并且关闭文件
7 V8 d; X* r! M
0 {/ ]; o! k. i% f" j trace 01.txt,0,{tracelog "A=%02X ",a}$ s' y- [& K6 {; v0 e: }
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt . Q- ?6 D {2 U$ `
并且在每一行的前面, 写上"A=a "
/ l# G% I" p! l Q "A=%02X ",a为一个C语言printf函数常用的输出格式
5 m, v% x- k. A* }* \* K 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 \3 i3 Q7 ~+ F. j7 z( R X表示为大写十六进制数
& V6 j: @ i% B& v" V5 Q& L( g% `
% r' K0 }( M9 A1 \" G- U7 T* @5 U$ o: p* ]- {1 W4 Q
/ n7 k& @: s& @" `1 \1 n内存直接写入指令: maincpu9 W; P4 T; \& [: Q- `
格式为 maincpu.[][]@地址=数据" R: U4 O8 i4 o
第一个[]:
8 \" c* C* m7 K! z o 表示ROM地址
6 {/ b* z. F8 o( v0 [2 s0 ~ p 表示RAM地址
6 j |/ G- D4 o4 T& _/ Q& }7 ?: a: Y. S% t1 J
第二个[]:
6 v/ m7 X) c3 S5 e- _1 `- l/ t; t d 表示4字节
/ W* t0 l: n/ l6 f w 表示2字节
8 T) W) ^$ a: ^; I3 o7 T. R b 表示1字节0 T, G5 m6 g4 s4 f. B% j2 R
T) ?* l0 R1 v7 G+ D 例子:; f) x4 ^$ ?4 L7 v9 E. o' J0 n- Q
maincpu.ob@1234=FF
3 ~6 o( J5 j) w& W 在ROM地址1234处, 写入FF一个字节
1 a' x2 W' ~ `( D7 t/ G2 U5 g( x: H& _& m* O
maincpu.ow@1234=4E71
( a; ]) w j3 `: Q2 g 在ROM地址1234处, 写入4E 71两个字节
: d* A& @: |2 E+ @, F" W$ \* {3 B- a- @) V' B& s# u
maincpu.od@1234=600A4E71! l, N$ E/ z3 A$ r2 v2 K$ S+ {
在ROM地址1234处, 写入60 0A 4E 71四个字节# m2 M0 x+ l. ~* W- c$ e
+ Q- n1 j2 m5 F
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* [ h9 I- d8 B, C$ _: R
, c% ^7 Q) Y7 ^" j U6 k. T. L" L+ s
- u! a: h7 D. t4 z其他:
6 v5 p1 Y* Q" d" q7 j- K2 G" C dasm 输出档案名,地址,长度
$ {, _. C: Y! {- N3 h3 N 输出程序的反汇编代码
0 L1 k4 w. W3 M$ j 例子:
' y; g+ x& h' {9 g1 e; t& w dasm 01.txt,0,100000
( \/ G- u- q+ P$ l 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ F7 ~$ C# _/ [8 s* k( K
9 Y4 V. Z8 g9 X1 ^/ S( J softreset
4 S" a2 R D# `/ N# ]( I, p" A6 _ 游戏重启, 但不重新载入ROM
8 [4 g0 T6 p( H7 p0 r( p* c+ r5 h& U& i. \1 A. w
hardreset
, [7 c7 r4 R: a* f( Z- |. w 游戏重启, 且重新载入ROM0 y a& { `3 |7 A1 }
* G$ e/ |) \: ~2 T
snap xxx.png
, g& ]+ ^( O5 N# H- x 截图为xxx.png
- W' Q, R1 A6 d; x; H: f. _. v4 l
}4 k; p3 _# c
4 H* x# G4 k0 d9 ~, m! M
( T5 k; E# [2 V
' j8 o D9 ]9 X, K1 P: d* z5 U5 [热键:6 s$ Z2 }: t' ^' R/ ?
~ 中断游戏# P4 K: Z5 B* B& C4 c* ?
F5 运行游戏
* Q( i k+ Z% Z0 t F12 运行游戏且隐藏调试窗口
8 B7 b; x1 ]' J F11 步入, 单步执行, 会进入子程序
$ ?. C% _( c$ A! V2 A2 u F10 步过, 单步执行, 不会进入子程序4 u$ g4 q2 f% ]- R) T
Shift+F11 执行到子程序返回
" m. D% M- ^ P# \2 X# r* `) V Ctrl+M 内存浏览窗口! G* d! P+ k0 B) U8 Q" m4 V V
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; p y! V3 H9 t l9 E" A+ u* p( Y
: U1 D# y6 M [9 M% T; s u{:4_94:}
3 E" s7 b# w' v- I( x# Q' O
3 t. I# Z, S' ^9 K0 P2 [8 r! T |
评分
-
1
查看全部评分
-
|