|
|
5 T7 I# A4 T7 A# j% e S很快速的整理我自己常用的指令6 s2 ]$ @/ e. h$ F8 T1 Y
3 |0 X5 B& w! _. }
{:4_112:} 6 ~& G' F5 l- s+ q6 c6 g3 O
4 h! T& ~$ r$ e$ C1 ]/ V, K# ZMAME DEBUG常用指令8 i0 n- {3 B4 }/ G1 t& z1 [
2 S/ E9 t: j* Y+ M
内存搜寻: ci, cn, cl
1 M7 I+ f2 ^0 q) ^' {& q
, M$ ]' p3 L( J7 ] ci. L1 Z- o9 I' Y! \1 j" [" H% w! M% |7 Q
搜寻任务初始化, 每次搜寻一开始一定要输入这指令# F8 _' [/ z) L% c& X( P
, P. H2 w( w, C" @& Z! |4 ] cn
) l5 E5 ~' U" Z/ k 搜寻指令6 U: b: @8 g1 q" J2 D! A! }4 b
例子:
8 J. t3 [, b. t$ a$ H( O8 v cn eq,60/ O9 ?) r2 z) |
搜寻目标等于60 (十六进制)
7 D$ y M0 l+ {1 ~6 P# q
/ | f2 o2 w1 n* z5 ^ cn eq,#96
. c1 E& q0 _6 r$ F0 r 搜寻目标等于96 (十进制)
! C/ O$ u3 n3 |% s! S9 \8 ~9 F4 r- U* k0 o4 L- y, C0 ^5 A& s
cn eq
' A" O2 H* `* p9 p( f 搜寻目标的数值没有变化
5 k1 @$ F4 }$ n% `0 u" D& N* t T4 K' a3 z1 `) s" {& w+ h" r* A
cn ne% R" p" i$ G, s. i v
搜寻目标的数值有变化" I* H$ x) } n; s, f5 A
& T1 [5 \8 y- A+ {4 _4 Q8 y cn +
$ Z1 P- R: q4 g1 s; L4 i 搜寻目标的数值增加
V3 J6 D4 X5 j4 w" ?$ H $ X$ u& r- `4 @! n7 A8 `
cn -
2 G4 _: Q2 C9 O; X8 A' J3 P7 { 搜寻目标的数值减少
+ T! |1 n: R; H# b& b
! Z9 P$ n: T* A/ K% \ cn +,3
& } k; @+ K% L% v5 r 搜寻目标的数值增加3 (十六进制)
& p0 u! T1 M' \# {0 W) T+ ?. x0 n2 u. ]& F# [
cl% Y* c* A' u: D) E8 O
列出所有搜寻结果$ V! x/ g* O$ |& W) ~
! W6 x+ _, A' t, g3 P9 n
cl xxx.txt
2 f; Y! w$ n" |$ C( t 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) c: U. X4 X0 I4 f. t# Y5 Q7 M* A. D( a
& l z# p! {& J$ @$ s
内存监视点指令: wp, wplist, wpclear% |4 g. g, Y9 ~6 d0 T; l8 x
例子:
+ j ?( X Z3 Y1 B wp 1234,1,r! v/ c2 x9 j9 _$ R' A; S' ~6 I
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 y. U! v9 R) ~+ {, I, M f" D _9 d% h- K. ~, Q/ Y, i0 h
wp 1234,2,w
" P3 c0 i7 Q9 m2 ~# V- A 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: A& G9 B4 G$ X7 V6 d
F* I U& A4 V8 E+ M2 i
wp 1234,6,rw
. _/ F9 [2 a% U+ F- Y. b5 U 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 B2 R; v2 u" c5 n( A d
& _( u* N7 A+ W' q' L wp 23456,a,w,wpdata == 1
" x; b$ @, M7 D+ x; @% t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) x. R# ~7 h: b% _9 E M5 p6 K
" V7 W5 O2 W# K3 ^" |- j3 I wplist0 l0 `3 ^, e* [6 |6 C% q
列出所有监视点" I! q( g" W# ]2 j& k+ X1 [
/ S" r! G; O6 t: i/ j- w+ Z wpclear 3' @! l0 E* | r& f* y! {3 X. n
删除编号3的监视点
2 J2 @7 H( T# Y& X3 F- ~( X
% C) \! _( Z6 ~5 z! ~& K wpclear
2 W6 m# {! j. \7 W" q F' d9 R3 \ 删除所有监视点
) |( a- ?" D! @1 {; x0 n, D0 _0 q) ^3 T- X. a; J1 U% s
/ }1 h* K- q# Y- Q
' \$ b1 G; @$ C9 m, Z程序断点指令: bp, bplist, bpclear2 J7 r! J, z/ c# A8 p1 g" S; A# R/ S
例子:
* `5 T w" r' J3 A0 K bp 1234
4 z8 [ J5 O% j2 _$ Z 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, W# \9 w6 a9 r% B8 k2 R% L( l
7 z. t' L7 t. y3 z8 W) m7 G bp 23456,a0 == 0 && a1 == 0
- F* p( W2 x$ Y2 X. l+ c& I 在地址23456下断, 且中断条件为a0等于0以及a1等于0; E0 `3 F/ j: P" p: A* @
4 ?! F& k: m, W5 u7 A bplist
- R) v" t/ [3 k& e1 Q# \ 列出所有断点
8 B) U0 Z7 [; X4 d- W0 `; A
. w/ @! R% n( H( t* ?1 c/ |1 o bpclear 31 _) a. Y$ W. Q8 k C
删除编号3的断点
" Z! ~6 V' n* `( U- J+ v$ @3 ?' Q, t" T. J2 _, [+ T3 e% ?( a9 J9 k
bpclear
/ J. l+ U. l5 j, k# c 删除所有断点
" y, J. d+ ~4 |# n/ B5 ?0 x8 X2 z! a1 A8 J( u/ r, y Y* E2 _
4 v1 U4 G0 ~& x, j
$ `* X# t6 [" d A) s& a跟蹤紀錄指令: trace( Y2 |4 C6 L8 U" ?
例子:
# B7 ?% r% V' Q% U8 D. L" \ trace 01.txt
8 V0 F; S9 P0 G) U* w) R 跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 D) X8 ^. N6 c7 V( T9 M/ Y# N
trace off D& |) X0 e$ \) G
停止跟踪, 并且关闭文件# z# S$ G- |; C, T
2 B% e( V5 ~; O) S trace 01.txt,0
7 S) C) t" n4 K& {; J! A' h+ u6 g' } 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( y) D6 _ K- Z+ k
7 o1 i) x! w) o) t* Y. x0 q trace off,07 b/ j% n1 Y# y2 I
停止跟踪编号为0的CPU, 并且关闭文件
. D0 b+ o t8 D5 u2 f" U! X' N3 V- k1 G7 @3 R# |& s# i f
trace 01.txt,0,{tracelog "A=%02X ",a}
) r V4 h/ ]! X2 Q/ m 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : v% ?4 l$ \! S7 b
并且在每一行的前面, 写上"A=a "3 c. l2 M9 U5 [# [! V9 m: l0 J& j
"A=%02X ",a为一个C语言printf函数常用的输出格式8 ^3 ?" t3 j E8 ^8 ]3 S$ U
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 u9 L* D- z, q
X表示为大写十六进制数
" { F( H- r/ t+ f/ q, ?2 r
% c* Y3 h/ W* M& v; Q5 w7 ? w" W; {2 X* y, B
2 H* R& L7 L0 E0 ^# d+ b内存直接写入指令: maincpu
; }% o, ?6 Y# j- A3 _) _& ^ 格式为 maincpu.[][]@地址=数据5 g7 E, |3 q! j9 _, U8 ^" v& A
第一个[]:
: M, f8 Q" V; ]5 g1 m! Z" a o 表示ROM地址' Q0 M: ~! F& e& n% q. \
p 表示RAM地址' ^& ^9 d5 c2 q" H+ H2 F
2 }8 ~/ o2 M! N' j 第二个[]:0 |( v) K9 O/ q7 N
d 表示4字节0 E0 D: }3 F4 F
w 表示2字节
2 v* {3 z4 O) i8 Z* V" ? b 表示1字节2 t6 ?/ a) M& E& H5 R
( U+ E9 X+ u' W1 z3 @- B 例子:
3 p8 _' }5 v. a( P5 z& C9 @ maincpu.ob@1234=FF
2 L& ]7 G- ~/ F; x' o- n$ e6 b 在ROM地址1234处, 写入FF一个字节
# G8 L/ J; c0 {% d0 p/ l; J( z5 n8 T- {! q: Q
maincpu.ow@1234=4E71
! }7 R1 d; l! E! }* f; X2 V 在ROM地址1234处, 写入4E 71两个字节, o7 O2 |% b O9 F0 {
/ ^; ~# h; ^: |
maincpu.od@1234=600A4E71
/ P, L2 C6 Q/ Q1 {3 L+ d 在ROM地址1234处, 写入60 0A 4E 71四个字节 w8 ~2 K0 r4 J; H
; I3 c( Z' ?, v3 i v
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
( L, ]8 c7 S4 X 9 R# J! |% t& v- K3 g
, E& w* D. ^3 y, M
其他:
4 D6 _- X! \' o" a, Q dasm 输出档案名,地址,长度2 P3 M3 p- ~) T2 Y! J1 D, a8 e, X
输出程序的反汇编代码
" ^7 u' c5 E! C4 Q% w 例子:
" i; ^0 b2 U5 g5 ~5 } dasm 01.txt,0,100000
8 h2 x1 A0 S; r6 k5 p* P* \# p# b 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" B; S8 |( Q' p5 P5 c4 W( o @! G3 z3 R
softreset4 K5 K ~# n. B
游戏重启, 但不重新载入ROM# |' s7 }3 _9 z& G4 \
3 q) q5 i1 a; Z+ `' T hardreset
( P# V3 A; e) m1 I5 X3 O$ x8 { 游戏重启, 且重新载入ROM
8 [4 K$ X5 E; o6 w. s
' q) }" R: x7 P9 i9 e snap xxx.png
0 I% {" j% I5 ]7 ~5 n 截图为xxx.png
) m3 J3 k$ w% v5 }9 ^/ n, d& Y. p% ]6 P0 s; d# p" d
. I3 ]; ~6 A6 ~) c* v
4 O: w8 J+ o/ C% g; |
& |. f$ l7 }/ X热键:
/ U5 X9 n# N5 Q# |& W. H ~ 中断游戏) j$ ?- U P: s/ L
F5 运行游戏( u3 z' r/ u9 f" @$ [8 X o7 J+ T
F12 运行游戏且隐藏调试窗口
! |7 c( r+ n1 ? F11 步入, 单步执行, 会进入子程序3 G9 \* k' H4 g; J* R2 j% a; i7 F
F10 步过, 单步执行, 不会进入子程序) J! c7 \$ \; V. T5 F
Shift+F11 执行到子程序返回
j9 @* @# }# j2 {9 H4 u* x Ctrl+M 内存浏览窗口' U5 V! j+ V* ^! W- c
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU& r& k* f( F; s* L9 t# r
7 s7 \) s9 M! Y" Z{:4_94:} , v: F8 f, a- w1 \. e% A. ^5 c% ]
) K! ~0 B5 V$ ]
|
评分
-
1
查看全部评分
-
|