|
|
A' t6 Z; A' f4 _很快速的整理我自己常用的指令9 g6 V# \" F* Y* C) E& a
, p: o" s4 G* r& `- L{:4_112:} % W0 @% G4 N4 u; h( U% Q0 W5 {
% H* H4 A7 v$ h- IMAME DEBUG常用指令, X# H) z: r+ ?" x* l! w
& b: H1 p6 O- F
内存搜寻: ci, cn, cl) ?6 }% Z3 ^( d/ o2 _
3 F+ O! U$ m O* }8 U- i6 b ci
) y+ @/ i- m, V2 I! R 搜寻任务初始化, 每次搜寻一开始一定要输入这指令# z2 P: \* B* w a& r# s; }
" F* K% _4 r: w, z ?4 v cn
3 m* t7 v; F$ W 搜寻指令
0 n6 _! g5 t9 Y. a9 G k 例子:
' K, d$ O% I4 V8 R1 T cn eq,60! p5 }" @7 m' j# m& b/ ?! c B
搜寻目标等于60 (十六进制)
j) P* F, U; z4 y, {3 O
& P: r: {! ]1 i7 V+ p, s5 L) G( ^4 y2 n cn eq,#96- }; T! L' P5 P% }5 E; N
搜寻目标等于96 (十进制) B7 F: d( M# c; [. z
/ D7 i- k, ]0 I! T3 p cn eq
$ ` s% \1 c# Z, E0 Q; Z3 l9 m, U 搜寻目标的数值没有变化
* [3 i+ [' E- d# _3 _9 ~- _2 m# T+ E3 V/ C1 A5 z' z0 F8 B |5 y
cn ne
) t3 U+ b7 _/ F g( b5 B 搜寻目标的数值有变化) `. n" \9 o. G" ^* W
# K4 w0 W. O" u: ]6 f" c
cn ++ W: K6 `6 @; j( `* O1 R d. g7 P
搜寻目标的数值增加+ L/ L( Y4 h C) m/ y
) P7 n( ?+ y# f8 f6 @ cn -
$ j% L. O# o H8 Z 搜寻目标的数值减少
, A0 e0 Q9 o! q5 n, Y
4 H7 X& p S' ~$ a0 K) G _ cn +,3
+ E/ g0 p$ C3 Q$ V, g( u8 j) K9 B 搜寻目标的数值增加3 (十六进制): ^# m* g* h1 n, ]
$ G" z7 e3 j* e cl
: F, A& T r4 Q& j6 w. s 列出所有搜寻结果" x! o3 R: }! l
; N) Z' L( P. h$ _ cl xxx.txt) O, X, R, E7 C& s8 o
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* L+ c6 w' D4 ~, c3 l8 I
# e" Z8 T( K* o c7 z4 S. {/ J
- e; S- ]% C" x3 A内存监视点指令: wp, wplist, wpclear
/ X! s$ F- W& x3 x 例子:
' y4 E) a" T. w) } wp 1234,1,r
. J1 b* |! H! l A% p" L 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: q" j! _9 I7 B0 O) j7 S
# F& K; V; |' |
wp 1234,2,w$ ~7 t. Z1 r1 s; Q. v+ D, ]
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
% Y) a* M& R! z! h/ d: f+ {4 L, N & G# ~2 k5 n# P9 v7 U! I
wp 1234,6,rw9 j R0 H6 c, u/ Y9 }, |, m* G
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
! \) E: ^; _7 f7 s. A, _8 l5 J9 x) q
wp 23456,a,w,wpdata == 1
9 T. m- W5 d/ d/ k. C& H 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
, R5 D. k& b t) o7 O' e7 G' L; d9 S @) d8 ?3 a7 p+ f
wplist3 b ]5 ?1 d! u
列出所有监视点
- }( F! p0 G- @: f9 C% m( Y' Q) U6 @% p& M! K
wpclear 3
" X2 H7 O* _8 E* N0 ?$ Z( r 删除编号3的监视点, l& i' [/ w8 Q% O6 e3 p0 _8 V0 t
) z( ]- p5 @9 V- f7 b6 |& R wpclear2 @ N# O4 x4 P7 z7 N* Q% G
删除所有监视点2 [/ s' g; Z1 p; u- a b; U
' V1 i4 B1 |. ^3 U 5 O$ P8 e" y- C8 G H
8 @0 {! x5 N X' d* b2 S
程序断点指令: bp, bplist, bpclear0 p6 w# Y% |( t" q# k$ r+ _
例子:
2 \$ r: W. c; E7 p bp 1234" T2 F9 p5 l! R
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) q) J3 l r* }. J8 {. D O6 e. U
: L/ }# X# v4 u bp 23456,a0 == 0 && a1 == 0
0 ~/ ]$ a! \& Y 在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 g" j K# K% L0 q& z7 w1 Z# G- v! u4 ?% J) q3 b
bplist' d. @: j1 f0 X" P( s8 K
列出所有断点
' N. B% e) i6 L( s1 U: d, q& J
+ S9 c, f4 t) `0 r" c5 U/ r! v bpclear 30 y& i0 n4 m" Y! l! ?
删除编号3的断点& B& Q' D% ^& V5 p a" S% V
# ~7 W. Z% t6 p% F7 j1 }) [ bpclear
$ `, k& W* |- q' W2 ^# { 删除所有断点
9 @( o o3 a' b- [, h1 |- x& k1 V% S9 B* Z
$ l. A6 ], c4 _% Z- \0 [+ z
\7 u' t; o; ?- D跟蹤紀錄指令: trace, ^! c6 j1 J- {; u
例子:
& n5 S, {# h. I# b/ y trace 01.txt3 s+ Q% c0 g( \
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 z! `- y% [5 v, w8 [; i9 f
; Z; D. k. N, c, n trace off0 G5 B* G2 U5 g% }" L: @7 Y
停止跟踪, 并且关闭文件
% q0 Q) S2 r& ~: x2 c' j6 k
: |! s# c$ C# B" ]! i | trace 01.txt,02 i" @( x3 {' W# k
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) J/ n1 B1 q% p. Q) g6 e
8 ~& u. i, p. B# r1 n9 v5 M1 c
trace off,0
9 a' a3 ]: {' H- k 停止跟踪编号为0的CPU, 并且关闭文件
* L. y7 X; T; E1 v( o3 G+ D' O
/ r0 N9 l1 P9 _) S1 c/ r' _) P6 \ trace 01.txt,0,{tracelog "A=%02X ",a}% G" |: {) M8 A# q; |& g
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 ~( `7 Q8 C+ z/ O 并且在每一行的前面, 写上"A=a " B5 o3 g& B2 F+ D
"A=%02X ",a为一个C语言printf函数常用的输出格式
, n" `3 D% B7 K3 s 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入; D' ~; `/ g% T7 F+ g( |. O
X表示为大写十六进制数, M4 P, q2 ^. `; u
% \& k/ I, M' p; ^
( ^. ?# C2 X+ \$ s1 m: @: B9 {& t y4 w
内存直接写入指令: maincpu
' [+ Y8 r& s% O/ o/ D# \ 格式为 maincpu.[][]@地址=数据2 q( ], p! c% a2 h: D1 {) k
第一个[]:7 v7 D# W% K; a" N
o 表示ROM地址 a$ w8 K+ M% w
p 表示RAM地址7 W% X! U# x, W/ o
- {6 L' n8 H- Q- n% {
第二个[]:
& l0 a6 o! D, i* h9 m d 表示4字节
- Z$ X: T' c# M g1 O4 }( L w 表示2字节
0 V& S) ]) z0 _$ b7 r b 表示1字节& L& M! s# m0 u
! Y' r! e) c- R- V' V: }3 ~5 M 例子:% s: k6 k1 l% R, J$ I) u4 T& q' }3 g
maincpu.ob@1234=FF
8 h a: w/ k% E* d2 G% `9 J' k/ I 在ROM地址1234处, 写入FF一个字节
! v4 e4 _, n+ _. Y' Y( J# P' `7 G. s8 a1 y
maincpu.ow@1234=4E71
2 r2 y5 x( h5 P" V# k) u 在ROM地址1234处, 写入4E 71两个字节
# Y* F! l( B0 i9 _9 _6 |! K5 t9 `" u8 v+ [$ J8 s+ `* L* w9 V
maincpu.od@1234=600A4E718 m+ [) \. e# Y& _3 h- {' Z
在ROM地址1234处, 写入60 0A 4E 71四个字节; d. O7 e' s/ M }! d# E
9 @. o- g. M. z( m! r4 P
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写! w) T! Q7 A0 B) J
# }+ J* S! v G7 A: [6 N# a' F
2 w* \) \7 S% R! ]' ?/ ]其他:0 N' l7 r, b% C9 H6 R; v
dasm 输出档案名,地址,长度5 h( [' ~- O+ ?/ Q% J5 j4 B
输出程序的反汇编代码
% x* D; B4 x+ [! Q 例子:+ }4 b+ @$ ]% L: x' d
dasm 01.txt,0,100000
; ~; p* m- @) @3 `- w+ \2 S' c 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt2 u" I* ]& [: b9 v
) M2 b; j8 z) z S; M softreset3 D( Y+ }4 h5 r, t" i$ `) v" i
游戏重启, 但不重新载入ROM
1 I+ Q5 A- Q/ w8 P6 m* Q: f) _5 G% @! y% F3 C3 B# D
hardreset
& }' e; J% m( r9 k 游戏重启, 且重新载入ROM
# K5 a4 ^5 g( l. g0 w4 }& M( Y. d# ~0 k" S( u) i
snap xxx.png6 S9 f6 a" q! I( M
截图为xxx.png7 G6 Z! U; z. x8 `; q+ n/ Z' x7 z- Q
# d5 e8 ]5 O) Z' x! `8 r
% q4 n+ a* ~8 f2 t& c2 ^ : }" M" V( z% v0 n3 ^! F
% E0 h! S: t: ^. {热键:
0 `+ e! c2 J6 \6 ]/ p ~ 中断游戏
: r3 I) Q* X5 _7 S: o, O F5 运行游戏6 }+ N- H2 E9 z8 B$ H b, ^3 ~
F12 运行游戏且隐藏调试窗口
$ e3 @3 s: I- Z, A) Y$ v7 Q F11 步入, 单步执行, 会进入子程序 b1 q1 w* T% m6 L
F10 步过, 单步执行, 不会进入子程序
. d( `9 U J# H Shift+F11 执行到子程序返回 q6 K& {6 k0 M/ ]4 I7 Y$ a
Ctrl+M 内存浏览窗口
3 I; p3 c! ]7 o9 Q! u" w F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 _* x$ O T/ E0 N, J" d& B
% B) G# i7 y% I8 J# U% \2 D$ ]: P{:4_94:} : j3 O, c3 g7 L* Y; P
" K \) I. O4 h
|
评分
-
1
查看全部评分
-
|