|
|
0 r6 G- B% [1 Z8 H
很快速的整理我自己常用的指令
: z4 j* e$ \) h
- x4 B1 w; o2 j4 d; s, E{:4_112:}
k" I, S5 H7 K
" w) |) H. P% a4 V. Y CMAME DEBUG常用指令( Y' s! s: g" k$ T o; v$ m
- F% B4 j- e: m1 F1 ?内存搜寻: ci, cn, cl
1 g% p: w5 e% _' g0 x8 v! l) K$ k9 E# b6 _* ~
ci
$ W) N8 a0 e7 G( l4 ? 搜寻任务初始化, 每次搜寻一开始一定要输入这指令 a3 _$ R+ z. L4 C8 C5 s" U7 ?
) E- |' _, x v3 Z8 n cn
0 z- o3 v6 m( h+ x) ~. n" X 搜寻指令/ r5 t9 I4 @' L5 O" v) m( T: D& O
例子:# \+ u+ w7 B/ l) x# j( r, m, T' @; w
cn eq,60
b( p1 W7 M# c 搜寻目标等于60 (十六进制)- p. M! j$ t. j( \7 `3 R: M7 Y& t
4 v: i7 N! a0 { cn eq,#963 e$ O7 }1 o2 a+ N- K8 U
搜寻目标等于96 (十进制)
y- Q1 u1 I9 l, D* @) q% h: x1 b7 ] ~2 S3 t
cn eq
2 ?; y! f/ O, `6 W7 y \, Z% i5 L 搜寻目标的数值没有变化: Q7 n+ b$ ]8 Y- I1 N
) c% O% U: a" K1 ]$ ^ O O cn ne" e& {! _ Y6 M( ?9 b& g( b
搜寻目标的数值有变化
8 F5 Q' K) R9 q" ?
, ^8 ^1 k* X4 V2 v, g u cn +
5 @; n; q- [+ B9 s" P$ f d 搜寻目标的数值增加
' C1 p" X1 ~( w$ [; p \
. ^( |4 {) a& C* c cn -
' R. V7 B \2 U! I1 V 搜寻目标的数值减少3 O: `& _1 X9 W) J7 p
* q4 G: s. h- I2 _
cn +,35 Q! _4 e% u8 F/ N
搜寻目标的数值增加3 (十六进制)
; f9 `# Y$ k, r2 H
! n( ?; e- H% E4 _" B3 @/ X cl
+ o; Q2 D I, c2 @ 列出所有搜寻结果% G- y& c' g0 \8 o- `6 d5 A
5 c" x* @5 \* w2 `) C ? cl xxx.txt) V( w4 W1 C. s' E$ w8 y8 d! d
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" Q1 z: q$ m2 B+ c# a8 _
4 {; j Y- D: L. M# m
2 s( P/ r+ q$ U2 H9 S2 K$ m3 v; \" H内存监视点指令: wp, wplist, wpclear& `: U& F/ L) b9 Z& S1 X0 [
例子:
. R3 x0 z4 {& j& s, ] wp 1234,1,r1 K; D0 r0 B: [& Z8 P. ~
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# N# S/ ?- p$ n$ F$ l
" V9 k0 R0 C! K }" m# j' X3 m
wp 1234,2,w; v2 \9 b& u" e' F: w
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
: P4 ]+ O5 @, ?2 J: V8 ^. L & ~5 Q- E1 g9 s: @- M/ C
wp 1234,6,rw
( o0 ^ e* ^* e; F 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* A# {5 W1 {! M( J: ^: ^4 }
; V, \& e) [1 G) ^0 I. S! v
wp 23456,a,w,wpdata == 1
5 @( p. f' B1 q9 S 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; R {& k. y! S2 h5 ^6 D, W$ g/ G5 q( p0 \ c
wplist- X+ B" a. B+ z& E& s$ O& i
列出所有监视点
4 p. r, r# C5 H5 K. X
8 S% K9 q5 m; ]* C# k. [5 D' @0 V wpclear 3
L9 Z) [, N" t' n2 U, d& _ 删除编号3的监视点( O2 ]8 g* T+ G4 Y N7 ?# ]( t
+ r& D% N, }6 j# _& E3 T! x2 X wpclear3 W3 y. L y) Z1 ?) W
删除所有监视点
9 Q1 a# s* o: V$ ? |& }6 {/ _- F& @ O
+ h) ^ }- K7 C# v! S3 W6 ^# D8 |( o* a6 e6 N3 Y0 t* t) R
程序断点指令: bp, bplist, bpclear
y: k- h0 b0 z 例子:
" @/ Q X' N1 q$ ?3 { bp 1234. ~) E R5 E0 d6 q6 E
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
( C3 j! x/ _) K; z1 M: A
g( @# H8 N0 F bp 23456,a0 == 0 && a1 == 0
^% i& f1 C1 y3 s/ t& v 在地址23456下断, 且中断条件为a0等于0以及a1等于0
+ e: ]6 N* a4 z8 X
; G* R1 p0 U# o" q. P bplist
1 L$ o9 N2 A3 ~; U4 |' ?( @ 列出所有断点# g8 `3 E7 }" M
( L( S/ V, o: W/ Z3 \: G
bpclear 3
2 M/ q* x: I5 S; i 删除编号3的断点
0 j( M4 R. W# C \" c, @
9 J$ F; j' Q' l bpclear
( S9 |5 ~9 q' N6 d: l% n 删除所有断点# h1 Z" b1 I0 q: c
# D6 B1 I& J& S; @; T! h% F
9 F7 [7 X: W+ V" R- o; E
) z1 r- H% K. \4 J, |1 B* |跟蹤紀錄指令: trace
6 h9 O3 k0 m; g. ~8 J8 u* K% } 例子:2 ^2 i1 w0 `0 }
trace 01.txt
J9 m- E) d6 D% p, F! b 跟踪当前CPU运行的所有代码, 输出至文件01.txt
( B F/ P+ Q: Z
; J% u% M' a/ b% ^ trace off, d( f% c1 c2 G- |
停止跟踪, 并且关闭文件
4 h3 ] \* I f/ b
; c$ I. c+ Q" \: w! b trace 01.txt,0, S0 @+ r4 Q% W- J4 b! y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
. ]$ `% A. U- f9 s. ~
- Q+ L3 V( y# i' [9 S+ H trace off,0
7 G D) b( M: i( D 停止跟踪编号为0的CPU, 并且关闭文件2 v1 A& K* P" J3 E* D
2 @0 B) T( m& b( a* E2 L" U
trace 01.txt,0,{tracelog "A=%02X ",a}& V& W/ @! `! ~1 L( Y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
3 C$ R6 S2 x# I& d 并且在每一行的前面, 写上"A=a "
5 K, e& j; M/ q$ } "A=%02X ",a为一个C语言printf函数常用的输出格式! n$ _. D7 y- M/ Y) w
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 O5 b$ D! r% Z' ~' { X表示为大写十六进制数) m; k; j: t$ B+ y# v* [8 y
0 Z" t. B v" V' Z
: a; t/ A% z2 _4 V+ K/ S6 l; F$ ^, C
' s' k' n4 S8 `0 k# H! s内存直接写入指令: maincpu
! _. q% H$ \% W5 j8 Z2 j 格式为 maincpu.[][]@地址=数据
" ~5 Q& U; I4 t1 D" ^. p; P% y% s 第一个[]:# d6 M- a) V/ k# T. |, m0 [
o 表示ROM地址1 e7 |8 q3 h4 G! z4 U8 ], t
p 表示RAM地址
4 R( G6 D* I( U* M0 [
: O: J: }. r" a2 q) l) I 第二个[]:, s: x& D: ~8 H# f! i6 T3 R( c
d 表示4字节
+ i% }* F, a7 C6 S m% f. e4 Z3 d8 L w 表示2字节& ~& \2 P7 i5 I
b 表示1字节 {2 E% W. s$ ~" W: u* h6 v
3 \. T6 n$ U/ Q+ M5 ~ 例子:8 w1 R% A4 g( e9 ]
maincpu.ob@1234=FF
% O, C# k* ^8 d+ O 在ROM地址1234处, 写入FF一个字节
7 K: g+ P' s7 [/ g3 a9 S4 k; }% Z& d& c
maincpu.ow@1234=4E71& V: @6 T) @* n( J' k( F+ i, S
在ROM地址1234处, 写入4E 71两个字节
3 z6 A+ i$ o% N% T0 j% v/ T* L
3 c- R# R+ z) c: y0 k$ C6 s5 Q1 [2 X& l maincpu.od@1234=600A4E710 T3 m: O& H- X) ~& T7 n- S
在ROM地址1234处, 写入60 0A 4E 71四个字节1 `1 K1 |% q5 G4 c, a
" n3 a6 N$ J+ }7 h" R 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: p' V" F& V9 e" B
; T, j+ z( b2 V2 M" y; Z& k5 e% d2 q
其他:8 V9 E& L2 g5 D$ c0 x3 _7 Q. Q6 }
dasm 输出档案名,地址,长度
% S0 T8 s% }0 ^1 A1 ?5 ?! g 输出程序的反汇编代码8 o7 ?, ~% z+ y
例子:
& ?1 w2 P. g0 g2 j! R0 e dasm 01.txt,0,100000
1 a! H0 w8 G6 Z 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 D# Y% l2 ~/ b# b$ Y r. _) t: E4 F. _& a" X6 P2 ^5 J) F" j+ e
softreset
9 E( q/ t7 k7 O6 j" e: L 游戏重启, 但不重新载入ROM
" X1 M* G) M' R8 u a' L" ~4 A1 [, w" c& D) U8 g. q3 m2 V
hardreset
8 t. \" X! J& a) o 游戏重启, 且重新载入ROM* L: s$ T7 O& E- J+ D
4 r& e8 _+ E9 W8 p$ Z' b snap xxx.png) J! ]6 |; ~* X1 ?4 P% p5 I
截图为xxx.png
* Y6 O9 K% G6 [) Q0 ~+ x; F8 M" f0 p# M
1 G x3 v3 M/ ~/ H; g" @/ f5 C0 r8 S/ i
$ P8 A; m6 Q* k9 M- T- o) k& [" z / S% u. b c! u4 @
热键:
) R \- n* `4 k S6 Y1 a ~ 中断游戏1 K" l. z: ^! ?( I, i
F5 运行游戏
6 i; g( T* Y1 C+ [* C. n1 i4 J F12 运行游戏且隐藏调试窗口 c: Z3 P- r4 @9 T! j
F11 步入, 单步执行, 会进入子程序
' M2 d6 A- k4 t$ H' M F10 步过, 单步执行, 不会进入子程序% G3 I2 B" h4 H3 T
Shift+F11 执行到子程序返回
a$ A, q* K; f7 w2 ?% Z! D$ i1 M Ctrl+M 内存浏览窗口
- o) `1 g% X1 c6 |$ o F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* Y% O [8 t) F) M" M
! w4 \2 h" d8 Q' }$ r{:4_94:}
& {# \) W" a: |: N: g! M) h* h/ T1 v) P- N
|
评分
-
1
查看全部评分
-
|