|
|
* h$ G& C w+ |$ |$ V& t
很快速的整理我自己常用的指令
& P% X" r, t, r/ \1 s9 }# a4 s7 f) u; L* W- y" {- i
{:4_112:}
7 w1 H5 Y2 C; u) J' Y3 {
3 V' \* i, B/ @- E/ e/ b1 KMAME DEBUG常用指令
5 u8 I# { r6 O; k/ Q- M# W( k6 z$ }$ r( x
内存搜寻: ci, cn, cl/ S# _6 d5 N5 q
+ C" T9 u( x o; M0 ^: z6 H9 Z ci
8 L) y& s S6 B" K" Q2 w7 ] 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- m2 y7 z4 k! S3 t
$ ^( \7 c' w" v cn! h( ?% V" k$ P
搜寻指令& M! g' _# m4 V d; t* j
例子:+ r+ M5 w3 R/ v; g. @. g9 ?6 h
cn eq,60) ~; |: Z' P/ l7 Q- C2 W4 m& f3 v/ a
搜寻目标等于60 (十六进制); F- ^0 H' l* Z6 V# {- t
; f) S' Z9 T# H) l9 { cn eq,#961 B6 O* _! L% z' P8 G
搜寻目标等于96 (十进制)
o+ |0 V8 S a, L
$ B" b: f1 l2 F$ I cn eq% N! b0 t G1 J( @) U6 A6 g
搜寻目标的数值没有变化: Z8 q9 Z# z6 r5 {
, K- B+ P, \% p% N3 F d. { cn ne
$ _0 g! n8 {1 W 搜寻目标的数值有变化+ Y% d8 p% D. L& i9 |: u j& f+ \
, k h, ]! ~4 G; q+ ?5 r/ {; t: a' c. G
cn +
5 q/ L( d" ?% U3 j% ]* `: p 搜寻目标的数值增加
1 P& g( I! a x9 D' D* u
3 K) d1 X' ?, L2 q cn -) e% ~$ u: v- ?2 m; R2 d
搜寻目标的数值减少
* F' W. y6 s6 F$ N " U `: ^& }( a, N
cn +,3# g7 o1 R8 _ M% |& n8 |7 v
搜寻目标的数值增加3 (十六进制)
6 i8 W' d% i) y$ @9 x: Z7 v) k# w- w/ f7 R
cl* J- L7 S" r, n' e
列出所有搜寻结果# y* ~& K4 N/ d: Z
C$ l9 i0 w. p3 w3 h cl xxx.txt
7 c t8 b% n& X8 } 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" S( T8 Y1 P6 ^# q+ X
0 C0 j; [ B# x! Z/ y1 B& d " E+ S) o0 j, i7 h
内存监视点指令: wp, wplist, wpclear+ J6 \/ Z; v$ e$ w; z7 N
例子:
* Z6 L- }3 D' ^* U6 m, b) A wp 1234,1,r
. ]- d I, B: A* B- d( V 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' n5 ]* G5 `. ~1 P% E
! f3 P" a, ?. I$ T0 Z1 ~
wp 1234,2,w5 x3 E6 Z) |( x h
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; j" m8 ]& Z. s5 K) l
/ t5 \4 A) I' c( X" _2 w1 z! ^3 F2 x wp 1234,6,rw
- U# Z5 c2 B* F5 M 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" p$ I' N5 l v- `0 o$ k
+ ~% o# B6 Z" _3 E# s wp 23456,a,w,wpdata == 1
& s4 u* k& u1 ]$ i4 o8 {& w" c# F 在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 \- r9 f; Q. y; K- C
! p% D" b- N* }2 l5 X7 Z' ?
wplist( {; d+ O6 M8 Q9 h
列出所有监视点! f* ]3 V, Q9 x; W& m& J
( V- ^- N: y+ `8 |: s$ @6 Q" S8 z3 P wpclear 32 C6 _0 ?+ W- T
删除编号3的监视点
- ]: d( S5 T+ E" o9 s
! m: @. v% ] U; [: G: b% C wpclear
+ f/ D) M9 X6 q 删除所有监视点1 m. I; n+ u0 |/ Y
2 u* ?0 @2 u5 Y2 j. l
! }; y# P: \# E0 K9 R) e; Z# p8 D. O
, O& V' k& I- s# \% S程序断点指令: bp, bplist, bpclear
^3 ^4 l: J$ v( v6 x 例子:
1 n; s/ B+ A! k3 A+ C: P bp 12344 @4 ]& H/ ~6 c3 [, C- K. Q+ }
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- V2 B7 F6 |, U1 F; N
. u& i8 c1 e2 M/ Z7 J bp 23456,a0 == 0 && a1 == 0
. V# |" [" o0 r 在地址23456下断, 且中断条件为a0等于0以及a1等于0
. q8 j5 W4 Q2 n& A: _. D. W/ [
: `5 d& {4 T8 ^ bplist
% O' @. Z/ \* J8 m# R2 L 列出所有断点
$ X; \ B7 f. X- S; O, F) V2 _/ w$ [5 S
bpclear 3
$ ? S! f+ {/ _7 c) R2 A 删除编号3的断点
6 R# F( [1 J: Z( c( Q9 g2 ^! h: g
: ]7 q1 y' |8 a8 M# w8 b6 K bpclear9 ^4 O$ S5 M+ Y1 l+ G
删除所有断点1 r0 u: z9 j5 Y4 \: L
. b; ]( q! Z: u& Y1 u' D4 u
3 E' X1 Z! S9 U4 b7 I
4 ~# w3 S9 N7 `+ r跟蹤紀錄指令: trace
* Y% {6 w4 K& c 例子:
! K' o9 z8 }0 x3 P& S trace 01.txt" s7 i2 Y0 G8 f
跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ C! P6 ?2 Y& Z* d! ^. r- R9 f/ ~9 o" X5 ~6 A8 E0 `0 ^* N
trace off- N! M' P5 b: h5 q
停止跟踪, 并且关闭文件
5 o7 r# M2 R! }" ?% Y$ g0 _1 l0 V' n& r
trace 01.txt,0
: c8 r, x1 o! ~9 z 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ _) L! v& z5 Q; j A
5 V& ^( |+ }# G6 b) D& V- Q trace off,0
0 g( ?) m2 O2 G 停止跟踪编号为0的CPU, 并且关闭文件- }. V! ?1 v+ @. f( }# t
i/ g! w9 @1 g' g trace 01.txt,0,{tracelog "A=%02X ",a}- E8 Q0 L: Y/ v
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ) b4 u/ ~4 I) ^7 I% A# D2 B5 L
并且在每一行的前面, 写上"A=a "9 ] l8 C" ]; q, ~9 Q6 y
"A=%02X ",a为一个C语言printf函数常用的输出格式6 Q6 S8 ~& v0 u1 \: I* K
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
$ L( }# m$ c' d% D# T X表示为大写十六进制数
( l% R+ Q# ^! k7 z7 M7 Z1 w+ Q) S, _# Y {3 R3 _
" F# x+ }. ~( t* e* F/ l
$ z' N2 G5 F' I S+ L内存直接写入指令: maincpu1 k# V! f4 D( x) R+ j4 Y
格式为 maincpu.[][]@地址=数据
' S% p k# F8 o& O/ N* i! ] 第一个[]:
, u) c7 E* X9 j* }' K- d o 表示ROM地址
2 `0 Q2 F9 A2 _! N p 表示RAM地址
/ \9 ]" C1 m' M4 _7 l0 i. s
) s6 l* d1 d! S d& k 第二个[]:
' g: i3 v! c- l, L1 p/ W8 Z d 表示4字节
$ @* U- y. y" ^, _ w 表示2字节7 O; S. E& ` m& _0 s
b 表示1字节3 t$ }" H! V( h- c5 u
% X4 Q; o0 B' I Z# I) @6 ] 例子:2 q- L% ]3 K( `$ M# T: R# b- ?
maincpu.ob@1234=FF+ Q( e6 |! f0 t% e* o
在ROM地址1234处, 写入FF一个字节
, O; Q( N' k. J5 G; i. k* v& {. n
maincpu.ow@1234=4E713 M0 e* e3 }. [3 P& d) t6 ]* c
在ROM地址1234处, 写入4E 71两个字节
: K: y' O }. Q0 V- Z# F! ^. U6 r) V+ r7 j- Q6 m+ Z
maincpu.od@1234=600A4E71
. _8 o- ?& g+ d/ V8 g 在ROM地址1234处, 写入60 0A 4E 71四个字节
3 o* N, C4 j ?5 T+ ]
' F! B1 p5 w, A; E 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写- [% w i/ U6 i0 Z' \- H
8 l1 @7 v& d5 T2 d2 w; {0 f! ^
9 Q2 W, q o( A3 L
其他:
4 a8 o# r4 X9 f# s! ^7 ^) q( [ q, o dasm 输出档案名,地址,长度9 s. K8 y4 v/ z: }/ j2 s) M. f' S
输出程序的反汇编代码9 m' I: ]0 R: t/ E8 Y D& h
例子:
1 d; ?5 U( X# `$ \" G1 _3 g. W dasm 01.txt,0,100000
' j" M, X" r# U5 A8 b 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
, b5 i6 @4 ^* ~$ m
* S* X* D- p% n; a8 e* ~- D; [, Q softreset$ E1 k; Q% D. A; j
游戏重启, 但不重新载入ROM
& D5 S* d2 ?9 Z" V% Z3 V+ z0 V, Y! I
hardreset
1 A" r6 m) m* l& G" z4 v 游戏重启, 且重新载入ROM
8 u7 }: b" w- Q) F7 M
0 A# F) U ^3 S/ G5 w* ] snap xxx.png
" Y2 s! G* M, F$ w 截图为xxx.png
: n6 b# R5 x0 v7 H
0 Q% M: v. L* g8 K- e
8 g! @6 ^+ P+ |& i$ J
% O+ n- v3 X% Z! N( l' a: z2 v4 L0 | 7 r: E* J: x7 T' y) z
热键:
* I V e0 y! w" y. e ~ 中断游戏
q% s' m, [; l- U1 b' Z8 | F5 运行游戏, s" A% Q S4 ^ O2 G/ U6 D# ~
F12 运行游戏且隐藏调试窗口 Q6 i3 E0 w( `) ]
F11 步入, 单步执行, 会进入子程序& B, @9 [2 m* k ]3 D; q, U
F10 步过, 单步执行, 不会进入子程序
$ ~8 k) t1 \5 I Shift+F11 执行到子程序返回7 W1 W4 r+ x, ^' j
Ctrl+M 内存浏览窗口" N5 q. h1 f8 u+ b* T2 j. w% b( [% [
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
3 p4 @4 H, i' B7 u& h4 G" g8 T% p5 P/ M* d' |
{:4_94:} 3 F( P7 O6 n4 J) x
0 z9 b% E# m; m
|
评分
-
1
查看全部评分
-
|