|
|
) t: H7 L0 T3 m+ P% \$ ~9 j) |4 w很快速的整理我自己常用的指令# [* ^6 @+ i9 D
4 B3 s2 e2 a' N2 Y; c2 [- i
{:4_112:} & O5 I2 f/ u- D9 F9 L+ X5 Z
$ {6 i" H; [ V. e) y- \ UMAME DEBUG常用指令
% o4 F/ c6 {! _3 u& p9 {" u& X" F3 r$ r( ?, M
内存搜寻: ci, cn, cl
2 m P r9 ]. a3 w
3 E& U, `/ N2 B# s# n7 a ci8 J. }0 @; Z* I# w; T x' g( b) k+ Z
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: j' G, q2 A/ f0 ^3 @( N1 U1 H, w1 G& O! N
cn) }# X' {( ~6 X9 g. i) \0 t4 |9 I
搜寻指令0 d. c& G9 d* U
例子:
* \0 Y$ n- p$ T" b% f n+ o8 o. C cn eq,60
3 Y& F9 _! V. l$ A: m" m$ E 搜寻目标等于60 (十六进制)
2 n5 i F. d! T+ N3 j + v( {% |9 X# Y; Q, j4 w
cn eq,#96
1 V& a* a1 r/ v' {+ |6 z 搜寻目标等于96 (十进制)
7 r4 I$ z8 U! [8 w" X; I( x9 o% u2 S
cn eq
' }, Z8 F5 ?) D0 s( T 搜寻目标的数值没有变化$ o; q& i3 p+ z9 U
5 q# f4 v1 p" e( I* g
cn ne
6 m) h3 {4 j n2 N1 Q$ I( x9 l 搜寻目标的数值有变化- f$ d) V1 N9 O2 p
4 R! C7 i" d' F; ^7 h/ B8 T
cn +
; Q" q* X x) d: ^$ ~" _9 ?" L 搜寻目标的数值增加' ]$ Q9 i' e E \4 g' Y0 z* c
$ g: }% w/ A7 l: Q! k1 v9 j cn -# j3 @" ^) }$ x. H9 D) Q8 i% M- k- {
搜寻目标的数值减少
; Z2 ^0 L1 c- ]6 G7 H- |( w7 e
9 M( x. Q' _: d4 u9 f8 I/ e$ X; I cn +,32 u8 j! t0 [1 Q# i/ v# N' V2 b
搜寻目标的数值增加3 (十六进制)& s( \5 ?! h$ A2 F: R
5 I. T3 P- w* w- @; s9 R/ \
cl' P" `+ N: W/ E0 q% W( |, c
列出所有搜寻结果
7 P7 W" w' J; `0 S& {5 b
% n$ t9 W0 x; C# G3 K cl xxx.txt1 W& ]7 i' D5 \5 D n, H
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, e% d" O: ?+ g4 r) }1 F/ K/ w# `0 d# g
. q" m% |/ N. Z' q% R内存监视点指令: wp, wplist, wpclear
) r0 H0 o* f0 ^4 D5 t- o 例子:
. n& o5 a$ t' N0 Y! r5 L- Z) W& d wp 1234,1,r
/ V4 T* r4 _2 [$ u9 @ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
, Z3 ]6 X2 d) H" B% P3 U" {& L
3 t( r$ B+ S5 I9 a/ d( J4 B wp 1234,2,w
2 v) l& ~8 c; |: ^# N 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 v1 n! R. p! [. _. p6 x0 G$ f
: N; G T' Q& K: Y1 K( }8 v. d wp 1234,6,rw
: s* i$ u+ V3 `# e1 Y4 } 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( P, @8 E2 [8 q+ v
. a2 ], U! \3 X0 b6 o1 E
wp 23456,a,w,wpdata == 1
% }+ p+ V1 |. \! M/ U# Z$ S; c8 O 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; u! F$ ]4 X9 U3 ~# ?4 E, c, X5 \5 P* ]
wplist
# V4 W$ o) l5 f4 e" y 列出所有监视点
* i" J. t( z3 b3 v# h
" j- J; K/ w' f wpclear 3/ a2 }/ }' A3 I7 n
删除编号3的监视点9 @ _% [6 S( t
6 R, ^* I: ]1 `: K/ H- U9 P
wpclear. x, j/ {: W) M8 Z# g
删除所有监视点5 n( m: K- R3 a; }5 j2 i
$ x+ e1 p/ j4 ^/ U2 A
$ a5 H1 l/ v+ u4 b1 t* x0 }2 s. \/ [: `
程序断点指令: bp, bplist, bpclear
# e% [1 t# k/ S; ?/ R 例子:' _. z9 i* {: @4 j0 |' C5 v1 J* H& Q" n
bp 1234
# B# W. Q. A5 W L5 x& X 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断# E5 s0 F0 h( ^' \
' g" @" x% F/ Y3 q2 ?+ b- \ bp 23456,a0 == 0 && a1 == 0
4 e8 X$ ^1 H: z6 F 在地址23456下断, 且中断条件为a0等于0以及a1等于0- j) p% U# g# X" j2 }7 I' x
Z5 w0 v, }& d: r C
bplist! Q! p" t. Q3 D+ v' I5 D% r
列出所有断点; F8 q6 Q3 }' u! z: R$ E
! c$ q5 `* ~6 H' _0 X6 D
bpclear 3
* J6 c* @5 I" t" } 删除编号3的断点% n0 Q$ Z8 v7 @+ E+ E
3 H- ?' S! b, T; h9 D3 ~* ~
bpclear
1 V( P% t4 w7 s3 T 删除所有断点$ R* @" W& c6 q
1 x' s B( j7 m; ~* `6 V
8 [+ v- Z5 d* ?1 r$ c
: r$ D& @( N0 B$ w8 Z+ K, q跟蹤紀錄指令: trace# V E5 Z1 M$ q3 C h' X/ c
例子:
( D- J% b6 H! Q trace 01.txt
' ~+ @) Z- L" T" p7 T2 t* F7 a 跟踪当前CPU运行的所有代码, 输出至文件01.txt/ r2 u. @2 N& c2 o0 l
" c- q- F8 i" N. i: S
trace off) Y# C# `# ^' k) L
停止跟踪, 并且关闭文件
& W: C" s+ t0 D/ D/ H
B) O2 M6 U9 S9 y, K) I trace 01.txt,02 `8 ]. w: I' z p
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( E' ~3 R7 l5 Z7 f+ F! y
( P* B$ M1 x. G2 @
trace off,0
; c$ ^( j. U; a1 `% q6 G, D 停止跟踪编号为0的CPU, 并且关闭文件8 J& Y: l: R7 Z
2 o$ s5 e& I9 A8 Z0 B: S trace 01.txt,0,{tracelog "A=%02X ",a}
) j' v0 Z5 Y E- F# @/ [ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 U/ ]" n$ w; `; O* s9 k 并且在每一行的前面, 写上"A=a "( |. p' {8 D _: w3 G# ?
"A=%02X ",a为一个C语言printf函数常用的输出格式% i: g$ S) Y: P' \0 a( s7 G; b
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 K4 @! D3 e" B
X表示为大写十六进制数7 X$ w P7 n# J* R/ K, O
* L* ]! c. b+ i7 \
& D# ^# J5 n+ b! W9 [2 d3 A; j2 X& j" M5 G
内存直接写入指令: maincpu5 @# _3 t5 S9 r( e
格式为 maincpu.[][]@地址=数据. p7 t+ h+ S! v$ R
第一个[]:
- I" b4 H! z6 V7 M7 R, W o 表示ROM地址
$ _& k$ o' I5 \3 ~* I p 表示RAM地址
) q: f- A$ K! ~) u4 \1 }0 w" L, x2 M
第二个[]:
" Z- l/ {6 @' m, T! [; m- f d 表示4字节, N, y- l0 w( S3 b: d$ A4 k
w 表示2字节
" @) d+ a9 w9 s9 Q9 { b 表示1字节
- h7 y5 t; m6 Q$ V! G8 C, ]% I! Q9 M; G) R. N
例子:1 p/ r& ]% { R
maincpu.ob@1234=FF
: t! u1 Y0 G+ h4 q, d 在ROM地址1234处, 写入FF一个字节7 Y: x' J' T; x# D% ] l
* I U7 Y" o; Q. Z, G maincpu.ow@1234=4E71( ]- C# ^; @/ W. |7 S+ l1 l2 w4 Q
在ROM地址1234处, 写入4E 71两个字节
3 i" `% w. S9 x4 Z, o3 k$ y% B1 I O7 L& C: j$ b( q( j0 `/ B
maincpu.od@1234=600A4E71
' l: ~( E" B" @0 B: A, [ 在ROM地址1234处, 写入60 0A 4E 71四个字节
- y1 y+ J0 ~1 g. o' H9 e& c8 W) g* D6 c2 g6 f% k
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 f0 P8 P& d/ m+ D/ z! q3 m N ; j, B0 L1 c/ M8 H* v
1 C% ^' g/ d* r5 Y
其他:. r' W5 z; k9 F _. t
dasm 输出档案名,地址,长度( k) x' Q3 {/ j: o8 ` P
输出程序的反汇编代码7 |6 k: G- G! p& L3 x1 z
例子:
6 }3 @# I$ n( T# J, I) ?) ~ dasm 01.txt,0,100000
& j" L" j- F1 D$ K' s: f 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 H+ D7 \% H6 j' z6 d: M
+ }. a! H1 l; O6 d5 s1 ? softreset
! {- j) s, Q7 Z6 k: X( Y$ L0 ~ 游戏重启, 但不重新载入ROM
- k# d! f/ d9 q' a# W6 N
! p+ F7 T- Q' V, p" N/ t hardreset
1 y3 S7 Q; [% m( P8 y! O0 G4 J# ` 游戏重启, 且重新载入ROM: }2 d) x1 t4 i1 r* `/ C0 _
: w9 u/ k- j5 ^$ z, @% ~
snap xxx.png
" l6 {! N U9 c2 I# N6 ?. O 截图为xxx.png# [. G7 Q1 k. p1 I# Z+ T$ v d, \7 W
3 L! l5 v; @) _4 c
5 ]- P+ g+ ^3 D4 D6 `% g
! j, P, O9 J3 P6 B2 {
) c) k' U# m a! S" _% y热键:
9 y* ? P# Z2 n2 n8 a ~ 中断游戏
$ M$ w) l4 U$ W$ j, x F5 运行游戏; |' i H5 V3 n2 O- k# a _# u
F12 运行游戏且隐藏调试窗口) W* P$ T7 \& G
F11 步入, 单步执行, 会进入子程序) z) ~9 g }3 q& d$ I7 O
F10 步过, 单步执行, 不会进入子程序
. m# M( ~2 Z- e. {3 E Shift+F11 执行到子程序返回
* e3 c# W% g% |( M& x! C0 w: L: g Ctrl+M 内存浏览窗口; |7 n4 ]# E( ~9 z
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 C- s+ G1 Z, |
( u2 O+ D0 _' ]3 @! I9 O
{:4_94:} 6 a$ F8 Q( d1 p; q( x% v
6 x/ D8 \4 A2 J# B* i. v3 E* g( j. ?
|
评分
-
1
查看全部评分
-
|