|
|
+ R& | C9 Q# Z! w) ~6 a/ W5 C5 b
很快速的整理我自己常用的指令
! f# }$ [3 Z, L9 Y# [3 y( J
7 S) i N, ^. i) a/ E$ R7 x: C/ P{:4_112:} + i9 ~$ z/ P6 @
. N) _- w$ m7 Y& e" KMAME DEBUG常用指令
/ t, D0 v% Q: S) x# o! J7 G: T' T E- M2 j- a
内存搜寻: ci, cn, cl3 |- R# l8 ]0 R9 w
. S9 o' l. ?5 B. g8 p
ci8 v) k$ I# Y8 D& P! |
搜寻任务初始化, 每次搜寻一开始一定要输入这指令- A: T% c A& g2 _2 M" h
0 F2 E3 _8 X( p. N+ Q
cn- _! Z5 F0 H. l
搜寻指令$ A7 D z: r L" M& N P2 M) U
例子:
& l, p- O4 G7 [$ M$ |- {6 [ cn eq,60( o5 w( \9 H y3 T/ t
搜寻目标等于60 (十六进制)/ P, R* W1 {8 Z! M' j
% R7 G2 d; b2 c5 W+ @
cn eq,#96
# U$ X S8 ]2 R/ q' L 搜寻目标等于96 (十进制)
$ ^9 H, o. Y, u# L+ {! T) ~0 G, Y4 g! }7 X% W
cn eq0 r1 k* C4 R, j5 f
搜寻目标的数值没有变化
/ \. m+ E9 o/ [" }0 z, {: W' q: G
cn ne! d4 w. \: o, I: l
搜寻目标的数值有变化* x* D* R& M: ?6 h: U
6 X- h T* `* K6 Q5 D! \& }4 d cn +$ ^! `, C! i6 Q+ y$ g7 ~; I& V
搜寻目标的数值增加8 P* Q2 c3 Q4 N0 ?! O
! V6 X, [5 D+ h4 h* m
cn -. Y& o* H1 m% m6 `8 D$ j( A
搜寻目标的数值减少$ d) v% t Y: J' p# o! a# J
) r* ~# f" E' k
cn +,3
7 z& R, I1 l% b2 i% X! t: {/ } 搜寻目标的数值增加3 (十六进制)* R' F# u. r% N" X9 O/ ?
z& R0 K/ u# B# k; o! u3 t7 J i cl% [1 H+ h$ M. }: ?4 |
列出所有搜寻结果% B. | I, N$ z$ h n {: ]
( w! r6 ~# ]5 l& T" a& E( ^
cl xxx.txt
" I2 `" ?, V1 r+ v 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式- f8 z1 ^; k2 ^" F
* w6 G& _3 C8 L0 p
2 K6 S# ^$ F8 r% n+ G0 q8 r内存监视点指令: wp, wplist, wpclear: I: F7 p( l' w5 y: ~
例子:/ E% v; K1 B$ w2 C0 C
wp 1234,1,r
5 O: Q4 P( Y- @4 g 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& {! i( e* g: L. t* j# x+ f7 F
wp 1234,2,w R9 a3 |& u4 F' l
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度24 X3 R5 U, P/ N& E4 e. ^
& I2 e! }" n/ ]7 |% |8 f1 y( N3 k
wp 1234,6,rw$ b" S: Z+ P$ T T, g# w- C
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6' x" v) }/ U9 j% v4 T
9 V* R2 E# f* W# e wp 23456,a,w,wpdata == 1
6 K. J% `7 @* p4 a# Y$ Z2 X* Z8 Y 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* j2 ? K3 {1 O# t. \. n& y" W3 Z5 H1 Z) l8 G
wplist
4 W$ q) D- V! E3 s& t: m; [' | 列出所有监视点
+ V4 y9 ?. q. g8 l0 I: a- m$ p8 R9 b+ a; q; P
wpclear 3
- z) \3 x8 I$ b0 p3 k: c2 t 删除编号3的监视点" y: D( |/ j0 I& e+ } @/ d
9 ]" u0 s7 J" [% Q# v' d wpclear
7 r+ x7 s5 g5 U N& S 删除所有监视点, z& m. Z) I q5 O; k
4 ?3 B, C8 \+ C# L2 A1 P k
9 W: r& b4 W' j/ x% }/ ~; a5 z
8 A/ Z: \: O1 p0 v
程序断点指令: bp, bplist, bpclear1 m# u" y9 |+ h. K
例子:+ I' N) s" l7 ~7 Q
bp 12349 \! w5 F1 L4 L& B: s9 i
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断5 @2 f3 b" B7 R7 v1 N% L
- t( }) H' T% h5 j" a bp 23456,a0 == 0 && a1 == 0
7 E: m- x) E5 U9 q1 B j 在地址23456下断, 且中断条件为a0等于0以及a1等于0
2 K: C" U6 t; N4 Y& R- E6 K3 ^* T2 @0 w, {3 q. D' X
bplist: s! Y# J; m) H7 W+ k* g
列出所有断点
" n4 Y0 @2 W) J! `7 ]% |
% i q2 n( u2 L8 W# S bpclear 3
% r2 y* }- V0 E! F 删除编号3的断点
1 ~+ L- F) R% P7 D- i8 O) F) i% n; f0 l+ T) n* ^+ M; {- F
bpclear
! ?- w! ^" D1 h8 G" t- T 删除所有断点4 ` ]7 b$ s: y) S4 ^/ ?
2 W2 n# ~. L1 ~8 q4 n3 f
4 |3 a( S6 f# p1 D3 E2 r' s* U: V
& Y# o9 q4 v: R, H3 J0 h跟蹤紀錄指令: trace# h* t1 }" X. H/ [/ G1 ]+ L9 k
例子:
6 i! O: p7 a* J; d, ^$ C- u, D. q' G; [4 y5 f trace 01.txt
5 J. j1 C* \1 f$ ?1 s" d9 Y 跟踪当前CPU运行的所有代码, 输出至文件01.txt
; u2 l+ Y7 A" X
% }0 M- ~: K( M: Q# D trace off& K' F" `# o) B* S2 {
停止跟踪, 并且关闭文件
6 e+ e8 C3 ~- p
/ m- m2 |+ h5 {# Z+ x! _ trace 01.txt,0 t5 W- Q& f/ {% v/ I2 |! q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& J% q2 z* [8 x( t: S5 n- Y
^9 D) N" m; \9 h0 v trace off,0
; ^, q: [4 z0 t' N; s- Z+ v- | 停止跟踪编号为0的CPU, 并且关闭文件
8 q# p0 K# M! [( w! t L8 T
# ]5 M* P$ F! C" u: b' S4 o* m1 N% N trace 01.txt,0,{tracelog "A=%02X ",a}
4 N. n7 A r, S4 i k& p) B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 Y+ Z; q$ F1 ^4 [7 K
并且在每一行的前面, 写上"A=a "
* i' K8 `1 V& w+ O* U "A=%02X ",a为一个C语言printf函数常用的输出格式
+ C8 v/ g0 A) ?" t- H% h 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ J0 [+ R9 a( f4 w& e! ?* s$ n2 b X表示为大写十六进制数8 c' \ O1 O$ [. C4 D
, G1 R$ ^5 N" z- |" \# r) e$ {+ D. W: T/ ?/ F+ f$ ~5 O
|/ M2 ~/ u% d+ x9 S
内存直接写入指令: maincpu
, G% K! Z1 K, R l7 s' z 格式为 maincpu.[][]@地址=数据
6 ^5 A+ r4 L' c$ I% K 第一个[]:" y7 W5 V! V# q$ S
o 表示ROM地址. I4 M7 D0 J. d$ q
p 表示RAM地址
" z8 m1 ^7 T5 ~ m, N4 W: h- A2 D5 P% @3 d% R y9 K
第二个[]:7 i, j- p2 f+ j' {+ ^
d 表示4字节
6 k, t" Y/ _0 P: r4 o' t w 表示2字节, t4 E0 m% d9 b. x
b 表示1字节
; Q! ]2 L G7 |' R, A) h" B2 u, n2 ~" |) }; t; _2 t3 }
例子:( i3 l& v* \7 L% E6 b) r. v
maincpu.ob@1234=FF
# P" B/ }$ h% d# b$ k 在ROM地址1234处, 写入FF一个字节
( A4 Q1 j3 C0 T1 Q" O w* b9 U8 Q0 s, S5 T& J. j, C. U9 L* u
maincpu.ow@1234=4E71
! u3 _! _/ I) U- O, k0 m J 在ROM地址1234处, 写入4E 71两个字节6 ?; O7 T: q5 s8 w' x5 I6 |! H
7 i8 N; A; x5 X( i% l ^6 k! _) Z
maincpu.od@1234=600A4E712 v& U9 R& y- D1 u% \
在ROM地址1234处, 写入60 0A 4E 71四个字节
( y0 L. N( o' U$ ^* T
% S& Y$ b* R+ P 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写$ `: k' _( g8 Q6 B
# N J& e, ]; r* ^% t
- H, M1 v& I' H' u$ h* Z8 v# b
其他:+ L# L+ v% e; f, P( L
dasm 输出档案名,地址,长度
/ V* Y1 A& `6 s3 V9 | 输出程序的反汇编代码
: @! z3 o" R! a- G 例子:% F6 W; s( X3 \' w2 k
dasm 01.txt,0,100000
1 X2 K8 V5 @; } 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ S5 G+ c- L1 W# v, w; u' g7 D
- ]3 n Z+ `- a
softreset
2 U# ` A, Y- b: v# k. L6 f 游戏重启, 但不重新载入ROM( U. e+ a* ^5 V+ _2 {: J
$ S) Z% s: S$ O( F) J
hardreset
8 ]5 o8 ?/ g( f) P 游戏重启, 且重新载入ROM- @' g9 S5 L& b% H7 g/ M
! `2 X/ ] k+ ] q6 [& F/ U snap xxx.png: x% [% H! x5 u: f
截图为xxx.png+ X! l. \- j9 x" B1 F! J. G0 Z
& o \6 V- R7 F+ J$ M, O
6 Z0 o2 V0 m% E! U# H! v: E 9 j7 G1 R' c. ~3 C8 _5 [; B0 I; U& S: `
" ~3 V3 O4 }3 W8 T+ ]/ ]
热键:
/ }3 ?) K3 P* h/ N* O1 t1 Q ~ 中断游戏/ `6 ~! A8 p* _# p
F5 运行游戏
' [% T: X5 O* {% p$ g. i F12 运行游戏且隐藏调试窗口
; r2 l& j6 t2 P; m; g, s" Y F11 步入, 单步执行, 会进入子程序
0 \2 m# l0 X0 f* x6 L! x/ U6 S' ~ F10 步过, 单步执行, 不会进入子程序5 _( e" g$ A$ Z( r4 n, h+ {
Shift+F11 执行到子程序返回
' N F+ V) C8 x9 p d) J& ^( z Ctrl+M 内存浏览窗口
! @ v" v( q* h$ ~0 i F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU4 e4 s% p- c/ a* A
; B E" c$ m+ h R; k
{:4_94:} - v# A6 u8 D1 v; s
9 N/ W, r% |4 y* F6 ~% j+ p |
评分
-
1
查看全部评分
-
|