|
|
1 W. n' N6 E% ?5 L很快速的整理我自己常用的指令
+ z1 j) P& g% o! H8 |; @8 f$ ~- ], z: p0 S3 ]* K
{:4_112:}
6 u# E7 v( l2 w8 {/ _% p3 {7 k
! ], w- C: T' H3 VMAME DEBUG常用指令6 ]+ D3 x) i" Y7 D
6 G- H6 b+ C: u X- B) W( A) [内存搜寻: ci, cn, cl
& O* P# O* B' w
- M* u; O5 ~! W1 t N. Y ci
( O, X! {$ a/ u' Q& l5 ? 搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 c9 g8 U, v l1 L8 ?* y1 ]
2 J- Y$ f* s, D0 q
cn
. Q6 @! q B+ i 搜寻指令" {0 l) V# u$ w# D- `
例子:
, F7 K4 A" u& } cn eq,605 Q7 i! V1 Q e8 x( f& H
搜寻目标等于60 (十六进制)$ a0 _0 o V; s3 `; y
5 g9 H8 r% p1 B
cn eq,#960 }; y: N5 x i* z$ {; ~7 d
搜寻目标等于96 (十进制)/ V# @7 S( E6 [; S6 v! A
0 f( `% L! \ ~+ v" b/ n6 j
cn eq) B/ o- K8 M: h/ X6 E# P
搜寻目标的数值没有变化
. m5 d: H6 n: x0 {0 p9 V O' m3 b# j! w
cn ne
/ f6 L( x8 g$ {/ Z' e' m 搜寻目标的数值有变化1 a0 d# Y7 P$ W( ^( O
( V2 X! T" ?; p& ] q
cn +0 [9 l! a; K& B) _9 r& s1 _# W( @
搜寻目标的数值增加 Z0 H# T- @ R9 W8 k
: i) ^$ \3 ~- F
cn -
& ^1 g* D) @% Q9 j; }* E 搜寻目标的数值减少. k! g. T, {' ~* r; p) q- b3 ~
, P \0 B9 g/ f" I* h+ m
cn +,32 r. R) ]3 c4 M9 J. Y) W
搜寻目标的数值增加3 (十六进制)
7 r0 }0 N$ H# d6 g% m
Z1 D, {: K' G cl
% y; N( A. H( W" ~% X 列出所有搜寻结果4 a8 C, w) |! q7 c4 v. R
7 ~& D9 c. z! y cl xxx.txt+ }+ ]- P9 t, G3 r0 X9 ^
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
$ Y3 ?/ q, n h# w1 |/ B1 M& P4 h
- e) X) C W6 N" Q1 l( C 7 N: {8 Y% e/ q6 b- _, `9 A
内存监视点指令: wp, wplist, wpclear
l1 a( g: m7 o* G1 Y 例子:! E6 ` m Q- `- V- c
wp 1234,1,r; _" R, P ]+ v3 A& ?: ~" I# G
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
" C; J2 ^# ]! F% \ \( `4 o
6 k% P/ _' T% S6 e2 N wp 1234,2,w3 P! y, P8 {8 E- d- l o5 T- e/ V/ g3 R
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" l5 n8 ]( U+ @" n
! d0 E1 ~3 |" {! L! { wp 1234,6,rw6 e/ V4 f( x* n( O" \
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( l: f$ ]2 O: V* R6 m# {9 {, G0 J5 O4 g, r J3 N: a
wp 23456,a,w,wpdata == 1
6 I8 ~" P. D r 在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 A, p4 s7 Y1 u. l
* n, E8 D+ B+ f: K; t7 b# E
wplist
+ g" `% i' `" w p6 x 列出所有监视点
! Y% m9 o7 @& r% f w$ b. G$ U Y4 \! S8 |
wpclear 3
# f8 Y# D& S, D* C* x 删除编号3的监视点
* f/ t4 D$ C& u$ }9 J& x f" ^4 K" y% G# d6 S \
wpclear* R3 @- ]" h) J# x& \3 x# L. p
删除所有监视点- ^3 X" O: z! R5 f, W
: C3 H8 i6 \- n5 T* X+ H
5 P3 w6 E4 Y" o4 C& Z
1 H$ D& v# s( G% o程序断点指令: bp, bplist, bpclear
# Q2 [& F8 h& b: L* P7 Y 例子:# O$ L. _0 j9 {5 f: A
bp 12341 z/ C8 G7 i1 C0 n' h
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 T) @7 J6 b K: Z3 f5 m1 c4 e
. V6 y k- `9 ^4 M9 l" K) F
bp 23456,a0 == 0 && a1 == 0
0 B% L0 t {# f* k, W9 j 在地址23456下断, 且中断条件为a0等于0以及a1等于0- `% r& n9 t- m$ t
@: D0 c" t7 _ S& G bplist* X K3 ]" i1 A2 n" U
列出所有断点& [# }# M$ Y |" z; {- s D4 I
# e6 E4 I8 {4 b% I' P7 h/ L
bpclear 3
0 u M3 ]( n. ` 删除编号3的断点
/ O; H$ I! K# O5 F5 I) P( L5 I% A) [; W: J
bpclear
) W6 V; f' E8 g9 C 删除所有断点
' u M$ w1 t9 n) ]+ }" ?1 W5 h8 ]: V! s
. Y5 Q6 u' P" s/ d / }5 i# W1 z+ \
跟蹤紀錄指令: trace/ o7 d* C) f, [, L4 N: h
例子:
9 i" F. b( k( ]) X& O/ o trace 01.txt) O0 U$ _3 r6 w7 [& W: V& c' A
跟踪当前CPU运行的所有代码, 输出至文件01.txt
6 i/ [7 ]" A( E/ [1 a
- f+ d k& t5 d. M) `1 h, @ trace off2 I" L/ B$ |# F8 h% J! K
停止跟踪, 并且关闭文件) b' O% f( U) s, {3 }
, W# ]& s4 K& N* t' c trace 01.txt,0
1 q, X Z o$ V/ X- X1 J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ O, ]2 a& m) a3 b: i9 ~+ `
' _3 Y9 ~. a; Y/ ^! y
trace off,0
9 @0 M7 F, a- u: |, x. i6 q 停止跟踪编号为0的CPU, 并且关闭文件
9 W( D' l3 |* l5 ? F' D A5 d8 E* W3 v: o1 O
trace 01.txt,0,{tracelog "A=%02X ",a}
4 y( `8 I( r: p! f7 \9 d 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ t/ `* b* g+ ?+ I
并且在每一行的前面, 写上"A=a ". G% G$ C- _6 a5 p. S4 P
"A=%02X ",a为一个C语言printf函数常用的输出格式
2 L# H) B3 O! r% e- o% z 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入; L3 }, a8 e+ Z% I5 M
X表示为大写十六进制数& @! s) z: v/ W* \0 v; _
* J& B$ M7 G/ t/ \( S
- e) I" J: d- l) e3 s! q
2 ]4 A N; I$ l5 A7 l" D: R# H内存直接写入指令: maincpu
8 _" q* Z$ m$ k- O2 M 格式为 maincpu.[][]@地址=数据
1 g$ k V8 F) E s, Z+ W8 [3 N 第一个[]:
( v, Z# M1 V; l: I6 T o 表示ROM地址6 [- I8 i9 U. F- o7 z" P4 z+ v8 ?6 _
p 表示RAM地址$ f; Y) a2 M) e; N' @: d( t
1 o5 P; W# x6 [
第二个[]:
2 y" m; Z. ~5 l V, D d 表示4字节
4 Y) e3 f/ E# q9 q, i! Y3 Y w 表示2字节
: N k1 {6 q& f( l! `4 O b 表示1字节9 b0 S# r0 ~* k4 W, H) T0 R
1 b- H; O8 T5 F
例子:; ~( H6 m" W8 h7 u3 N2 i+ @
maincpu.ob@1234=FF
+ w- `- L; g0 j6 f0 L: E 在ROM地址1234处, 写入FF一个字节
4 u. h/ b% `' H" l+ n. s4 w7 q9 i- q- z/ D4 D4 V
maincpu.ow@1234=4E71
3 [5 y- c5 }6 T0 R 在ROM地址1234处, 写入4E 71两个字节3 a. a/ a; P: W' a" W/ \3 l1 k
6 u) u/ Q* n& U x1 n: X! M maincpu.od@1234=600A4E71/ J! A! s" l p' l
在ROM地址1234处, 写入60 0A 4E 71四个字节+ S. J; L- ^: e6 d
1 p" b" M% A6 g- W1 g3 g4 H: h
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. N O( m4 m2 l9 `: ~" Z 1 F2 V5 E6 K4 I$ e) ^6 e" k; m% P
0 [/ ]% C- ?9 x: ?7 d `& `' z其他:4 q6 i' Q7 A+ M5 E7 {0 e
dasm 输出档案名,地址,长度( A4 P% a# h9 S2 I3 a3 T/ n
输出程序的反汇编代码4 U4 y0 t1 a5 O" z0 }4 T7 x
例子:
5 S8 y0 O6 g7 m- b7 e) X dasm 01.txt,0,1000007 D5 T( [3 r: f
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ \# Z2 t* f+ `, y8 z- b
8 ]. T- d s; ?+ T softreset
7 j! i! i2 G4 N* M/ Y! S 游戏重启, 但不重新载入ROM* B( q( r7 K0 ~3 u* _
% X8 \; ^ L3 q* R" W4 Q1 @2 E hardreset! t% c0 ?& X" M
游戏重启, 且重新载入ROM
7 L8 r- G3 X) k' A& n) t& G5 Z' n0 s) ~, s9 d0 @
snap xxx.png
; {- c$ T6 x& J/ N; i 截图为xxx.png
/ F2 \3 q1 H T: l) Z" v9 u4 i% P
2 g( _' {1 W0 A# V3 P
5 Y6 U0 Y! ~. N/ p) t+ j9 }( c- D [ # U2 M2 R" R/ |: b! b9 H
' P- S$ [" n5 x: t
热键:
5 @+ c# Z3 |5 ^) Y+ q ~ 中断游戏# }" ^* g9 e9 U
F5 运行游戏7 ~' A) S9 Y6 y! J' S: v( L
F12 运行游戏且隐藏调试窗口' N# {4 B. o5 G% J9 g
F11 步入, 单步执行, 会进入子程序1 r0 f5 T1 d$ w2 F- O1 X1 G' m- \
F10 步过, 单步执行, 不会进入子程序( D6 q \/ `. r4 I. \
Shift+F11 执行到子程序返回2 [2 I8 ]% k3 a2 V0 K
Ctrl+M 内存浏览窗口
; z1 P' f! B* {3 i F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! i: c! Q# |& ` t+ b, J! P) x
& C6 N" R, M0 ]4 ^1 M{:4_94:}
5 U% {, p* g3 R$ H) }5 f* }/ Z. A( i! k
|
评分
-
1
查看全部评分
-
|