|
|
# s( G" g- @ ?& N+ Q很快速的整理我自己常用的指令; C7 z3 L1 T( a
- \- w5 Z( Z1 `{:4_112:} : g( {! V6 v5 D& m
# v" j6 m8 G' x3 N4 B% VMAME DEBUG常用指令
2 H% K( k `+ w7 |0 G9 g G: V
" s% b, m4 J0 G' c内存搜寻: ci, cn, cl) f- l2 I5 _, J0 ~
0 }4 `* n( k- y4 J
ci( Y& U1 p. b! S6 R
搜寻任务初始化, 每次搜寻一开始一定要输入这指令: l1 ^/ {2 K0 j& ~5 }
T# e! g0 y l
cn: o, L2 @; \7 J+ `
搜寻指令& ^! G- I# Y: a, F: [
例子:
- r" n6 _4 K0 F! K( X cn eq,609 f% h3 }6 K% q1 @( ^# c
搜寻目标等于60 (十六进制)
- q. A+ J: [' _9 h+ ?" G
3 _0 V# C0 `7 V# h, E8 ~' G cn eq,#963 D6 s: ?; K9 k
搜寻目标等于96 (十进制); V- B ]" t( l5 @% c
2 y0 i+ O8 @( [& A cn eq3 U0 R" ]4 |; A; H
搜寻目标的数值没有变化
( J. z8 [5 E" d- }8 Y2 V1 r6 g' H1 S. |9 w7 N i- s
cn ne1 ]* T9 o' w$ |% _: L7 L. A
搜寻目标的数值有变化
) `) R, e" V( c" z. @ % _* p: `' q) W7 ?; s" R
cn +
$ X0 a) ?# @! S; Q7 X5 e( O 搜寻目标的数值增加& N# j& h# [% H7 x3 V, n& b9 @
) }/ G8 \0 S$ V) i3 G( r& P6 S cn -
0 [4 t1 A$ o$ m- b M% W# V 搜寻目标的数值减少+ r( g6 y# }% A! Q7 g
; [7 q |: D- g8 t6 ]5 {. w# [ cn +,3
0 c+ o+ Q( G/ j" C/ C* v+ M 搜寻目标的数值增加3 (十六进制)' C: G( Z. O* q% q
' [; d |; S; H8 @ cl' \* o6 W2 }: N& J" B0 u
列出所有搜寻结果% R' x: r; g' q* \' M) D
, s0 t3 P8 R: g& F. R, v' I
cl xxx.txt. Q5 x+ W$ m# t- _
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式# }; M4 P% w, j8 }% l& U
6 t1 _% I8 Z0 c @: O( t! ]# O \$ J) ^! y$ h8 x7 c# O! i$ C+ ]
内存监视点指令: wp, wplist, wpclear
: o5 a; r4 d4 j 例子:: Z, a* R' ~ \; U5 d5 T
wp 1234,1,r9 m3 v' ^4 A7 K+ U9 ]9 r+ X; G
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 Y5 A2 O/ t8 ~: {0 ~
2 M# C+ H7 p2 l& x wp 1234,2,w) W0 g. [; P+ Z, h+ H8 m: w; \
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' m( G0 G$ W' {* j / M6 v9 R* L K" _! z
wp 1234,6,rw' I: g! S7 p. \. L( u: e5 j) T
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) [1 L6 X1 d# D) \* D' z2 r
" ]& f5 X8 ?2 z. { k& I wp 23456,a,w,wpdata == 1
) M5 q+ x w* q% r1 k, J+ o 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- w- o) q' I1 N$ C+ d
& t( w/ R; N$ T. @/ b
wplist' u* k) o+ X8 b0 v/ L
列出所有监视点0 O' |6 U4 j7 }2 \
$ ^' ~5 |$ u" c( t5 T
wpclear 3
* z# F6 ` m$ |9 r; V2 j" u" R 删除编号3的监视点
4 A- h8 q+ }- e) i; g/ P: s3 Q! u( x, o" m6 i @- J& `6 ]
wpclear% O. Q" p1 _$ `
删除所有监视点7 }4 ?. \9 R/ ~& o4 x5 I- I; R7 K
7 I6 H% q+ o5 B" P9 `% o0 M) |1 j
0 B8 h5 ^8 H F7 X% g8 Q
; x9 M) g$ o- T1 F5 G) O
程序断点指令: bp, bplist, bpclear
, I, q4 }3 \# T( d2 X 例子:/ P# G$ k$ b) z7 I
bp 1234
. e+ A4 ]. v3 V, `% u 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- m# z4 N8 j$ |% }& A& r3 |% C/ T/ r, f$ ~7 }2 P* Y" I5 n1 E
bp 23456,a0 == 0 && a1 == 0
M0 [8 z% n/ K8 ]7 O1 G: i 在地址23456下断, 且中断条件为a0等于0以及a1等于0
; [- r* e& t( ]/ B) X! q4 P- F' J5 v% z5 A4 G' }
bplist
5 d; c [7 _( V; P! V( I 列出所有断点4 L x7 ?/ H8 T9 C3 h
7 f6 W, T! r- R* _6 m bpclear 3
2 ], Y2 i$ Y4 u( l: T. n1 L 删除编号3的断点
% \+ H1 @7 W' x; k
9 ^' E, ^7 P9 | d! ?. C7 L; x bpclear
; c& I( U6 G+ }# V$ f) j! \ 删除所有断点2 f0 U. h& o L- U% e6 e, t0 H4 i
; E5 t. F, f' k- S& A
- a& H0 f# j- X' Q$ `9 ?' {
& Q+ k P: V+ `* j* V1 M8 J跟蹤紀錄指令: trace
' ^& ]0 u7 H6 A: E4 L# {3 _, F) E 例子:6 w% [5 c% |: ~9 v6 L6 l
trace 01.txt0 B% `( g3 j$ j& j2 ]
跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 o7 C( t% s( T1 O8 [% |, G2 s5 c- F
trace off) b( `9 `; z; R' e0 i3 p/ ^* o M
停止跟踪, 并且关闭文件
: v9 Y# `. b5 ]8 _+ _
7 C( i% M% F) R; f" ^& j0 e4 M trace 01.txt,0
" m3 I5 j6 H+ x' l 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. B6 E! H P: r. r. y
3 X0 N& e) T5 s& c& }8 D
trace off,0
$ S5 }5 `# O: O9 g/ g 停止跟踪编号为0的CPU, 并且关闭文件/ Q$ L( L$ g+ V& _' ]
9 q/ @2 N9 \/ l s- d6 x trace 01.txt,0,{tracelog "A=%02X ",a}
8 E; ] O3 C) p* p5 \# [ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 6 z' T/ S* |: ]- F/ D% @/ Z7 R
并且在每一行的前面, 写上"A=a "1 K$ p# m/ {& J" Y; ^* X% T- g6 ~
"A=%02X ",a为一个C语言printf函数常用的输出格式9 t' W; x3 j/ d; a" ^& F
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, E# W* h: I* D5 V; A X表示为大写十六进制数+ e1 v' M" R# ^* F, `- Z
4 h5 T9 {% Z8 p+ s0 r5 }( w4 K3 K7 {$ J1 q `- Q2 P% M
s, |* z5 @4 t& t1 j
内存直接写入指令: maincpu
' O: k/ I, X* ]/ m; H2 o; p" D1 n 格式为 maincpu.[][]@地址=数据* A0 v" f) \4 P1 v# d8 L) M: z
第一个[]:3 b" p! H- j" A+ ^2 M& C1 {5 ^
o 表示ROM地址
9 r/ a1 G$ b ?2 ~ p 表示RAM地址. E% G2 A2 l d j" O H# q
+ [/ Y' N9 g/ ?4 [, k8 z 第二个[]:
: O5 B; a$ R0 e0 t! { d 表示4字节
- C7 q" @9 {7 ^ w 表示2字节
5 x' E. X0 }: m+ m* W6 V8 L. `7 n$ ^6 m b 表示1字节& @+ ?% [ S0 Q. V0 W
$ y: w6 h5 K$ d3 K$ ^ [
例子:
5 ~1 Y* Z- Y% V- q# ~' ? maincpu.ob@1234=FF x* y% E! @ d* E# w$ w7 ^
在ROM地址1234处, 写入FF一个字节
% u1 J) O _8 m& b( M. p) @/ U" ^1 ], Y" q+ C% V
maincpu.ow@1234=4E716 ~1 }' P2 R8 N9 x A
在ROM地址1234处, 写入4E 71两个字节
) N. |- J2 V; D
( ?. {" n2 h$ q0 a maincpu.od@1234=600A4E71
$ v( Y* w. }8 \/ [ 在ROM地址1234处, 写入60 0A 4E 71四个字节
2 F* Z9 C7 H& l# ^& {% o& i+ s& ~ K* v3 o; e5 S7 ~. E \; G
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 f# i+ v6 x3 g
& a g* A" z% N0 X# i7 v1 `8 z& U5 L- g+ u
其他:- v W ^+ E& D. _4 p9 E
dasm 输出档案名,地址,长度, w* j! v, q$ B# @9 V
输出程序的反汇编代码
* H' `& u/ p% x9 g% u 例子:7 S* h. |1 j. o2 Q5 H8 `* {
dasm 01.txt,0,100000% C1 W* f! U" n& e }
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 D6 M) m0 D! f% |. K
/ h3 I2 D, h, b$ w } softreset
3 h. q1 }" q6 \* b9 l6 h 游戏重启, 但不重新载入ROM; U2 ?8 W& z' |( M
+ S {: d: b$ d* \ hardreset
; f E2 } a: D$ |0 R7 o# Q 游戏重启, 且重新载入ROM8 P- Y9 Q0 I7 J
! r0 N! F: ~& m" P4 v& m5 I& X$ ^% {# R9 e
snap xxx.png
2 Q8 k; A* p5 {+ @1 i n 截图为xxx.png
$ N5 @# A b) y9 T
. @8 z& o- d, Y4 w+ [9 G 1 [+ Q8 Z0 \" ^4 ?: @) T- W) n
( f5 q" I) h, _, a1 a5 A6 A7 w" O
- e( k. P' P+ j3 i. p3 [
热键:. h* n" X3 K1 a% O0 h+ W$ ~& ?5 ^
~ 中断游戏
) _5 {9 N% f) Q9 n F5 运行游戏
" j& v" }$ R4 J: y F12 运行游戏且隐藏调试窗口
7 y# ~& @3 f# H0 u6 e1 v# j F11 步入, 单步执行, 会进入子程序2 P3 F U% _' Q: Y' L/ T
F10 步过, 单步执行, 不会进入子程序
) J7 |) o J4 A& ~; V- g/ @4 C( l M Shift+F11 执行到子程序返回' l; x; ~" [! ` N" t
Ctrl+M 内存浏览窗口
& j9 g4 i# k& T1 [. y* T F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ S/ O' Q% F9 f: d$ |# f* k" ^+ r/ i: t2 F* i2 o6 M
{:4_94:}
* f, H- c8 s4 X/ D$ y9 @; u" o
. B: [. q" O# f8 ]& N s/ G |
评分
-
1
查看全部评分
-
|