|
|
1 O& A i$ u. F, g' O很快速的整理我自己常用的指令. m3 _ z) }! Z$ o0 h
$ y6 X" l6 G' w! }0 _) j0 X
{:4_112:}
* P' a; L" h) Q; |2 a1 k
+ d; z5 P; g' \- YMAME DEBUG常用指令
?3 @6 V$ S; v$ I
* {7 F8 U! T) \0 V/ Y B内存搜寻: ci, cn, cl, {- ] A' A0 V6 {
6 a& w( ]8 i! m4 p ci& Y* s! |: M) i( g0 T9 F
搜寻任务初始化, 每次搜寻一开始一定要输入这指令# u" @/ C5 H9 B( ?& X
5 N; t5 r! Y. K. u1 ~! k
cn
" }" k+ I; _' L8 q1 s, ~# W 搜寻指令0 E5 {2 c0 O8 Z
例子:/ \8 A8 ?! L' l' p, P/ _
cn eq,60
$ T& k( s! D( O 搜寻目标等于60 (十六进制)- s3 D8 X1 p/ Y3 x, p- f9 h; j
* l& e5 Y- v* @* i cn eq,#96
w3 V* F4 O" X+ C2 R8 T2 [ 搜寻目标等于96 (十进制)8 f, H3 Y- A* m: }( ^) F
6 j% v! k' j8 x+ |0 {. f6 O2 s
cn eq
9 Y$ U3 O/ H" g% n y4 c6 e0 n 搜寻目标的数值没有变化$ Z. t( W+ h8 c
& r6 h7 {; Z2 J" e cn ne2 Y7 |! u! Q. c
搜寻目标的数值有变化
7 ~" V9 q! {0 N8 {2 e; B) ^5 _ 1 V4 }# S. K: B! l& u L* x
cn +! C* i9 l( J" R
搜寻目标的数值增加
8 I- F8 j7 R4 i4 l# _ + c, o& `3 h' j" k6 B/ M6 w
cn -, G7 I1 k- G) A( J; B4 C
搜寻目标的数值减少+ F- w5 @; Q. F; M, y
2 D. J9 @) @& S7 M
cn +,3
& I4 ?/ Q p% h# j( O9 ~7 ? 搜寻目标的数值增加3 (十六进制): {4 a1 f6 V; J( Y6 f, Y, H) F
$ D0 r- v7 S' l, R/ _ `5 u
cl! d' P; s9 ?- L! s
列出所有搜寻结果- E! z( Z6 v1 ?6 V
# v! U: F2 H8 @* E
cl xxx.txt
: a b8 m1 O6 d0 y3 `1 b4 ]& D 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# V; ]. q; V( }! G' Q6 a) x9 U+ l: O% S4 m3 [9 e
9 J1 i$ Q/ H. c, X
内存监视点指令: wp, wplist, wpclear
. B3 r4 {8 Y- g- _: v 例子:
P- |: n9 C9 q! M% ?$ m wp 1234,1,r
* \! ^ }' @1 M) G5 O' S 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1, r! b) u) f) X5 o6 t2 v
4 J; \; k: ]3 \& P+ F _! e
wp 1234,2,w
9 {$ ?, |: g( N9 M+ `# } 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
, [: y5 D: v# R i: B8 k+ j: W( Z
wp 1234,6,rw+ V: I# b8 O* p2 j, m
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ L8 z& ?9 z0 |0 r" X* @! L
" m! X0 `8 n( I" D K x8 ` wp 23456,a,w,wpdata == 17 e; n4 \% h W x
在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 b2 Y& w: k" d' P m: ^. h2 L* x* E( M
5 j3 \& F; G& K+ g i* \" s wplist/ E5 {4 A; _! h- p
列出所有监视点
" y9 y% O5 a4 i. ]& J- V. I. u3 B0 w9 r5 O) G! T! S: G
wpclear 31 b# v# E" x* j3 C' K+ D" |
删除编号3的监视点! S( b; G/ _% U
$ Q* l6 O% E. d- k/ p0 _9 [ wpclear. a9 `3 W6 q: J9 m- M
删除所有监视点$ Q0 C. @, Z% T7 n
) s! z2 X1 |2 }, H! F # ^: H( T2 s/ z/ r5 X6 v2 d3 Y
" s6 X* p2 R5 m3 D, I6 d
程序断点指令: bp, bplist, bpclear
W E8 v0 l3 a9 u) [' Z% K 例子:6 b# L9 r& h( y# ?; \1 ?9 z
bp 1234$ F' K# |6 c7 l: Y
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 i7 O# u$ b( Q2 Z3 j4 u- I! i* u5 O! \2 K+ L5 O; |
bp 23456,a0 == 0 && a1 == 0
1 r; A4 T* B7 S1 J! j 在地址23456下断, 且中断条件为a0等于0以及a1等于0& g2 Y* T- s" C. ?: O8 I: |
5 ]* p& m- f4 I' Z @ bplist/ u+ `! o& ]4 D# ]
列出所有断点
l* G; c1 J! U6 ?& c1 H
4 Z# r/ d: t5 k4 D$ P X bpclear 3# Z7 @ i2 t x3 j" |
删除编号3的断点
0 a$ @: U- q1 ]- A& y7 [+ _
2 s. g7 r V5 f0 O bpclear
* G4 j1 D. \: q6 z6 e; x- o 删除所有断点
- i9 V9 N! w, N) h$ \, W) \& |, O- S' h, e3 e5 `6 q
! b% w b/ _% x( h, R- I & ]! L2 @- N# M& l- ^
跟蹤紀錄指令: trace
4 d( m4 F+ j; g. p* `& }/ { 例子:" R/ z/ h1 F5 G5 {5 r/ i# N1 Y
trace 01.txt2 F" ^ V4 @5 E ]) S- Z( Y6 m7 h
跟踪当前CPU运行的所有代码, 输出至文件01.txt
( T( U# W% P) w2 s, u$ m( \6 a4 R) s2 Y
trace off+ w# Q# x+ N$ Y! m4 V
停止跟踪, 并且关闭文件/ f+ y( ]3 _7 R, B
$ W3 K8 Y1 ~6 v9 I* ^6 X( d
trace 01.txt,0& g4 q4 j. Q4 G$ w* y+ h
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 s2 ^' [1 A1 l1 w- \3 a
; Z, x0 E- n8 Z, j% M7 ^/ K trace off,0) y! I. U! E. Y( u6 d9 r9 a
停止跟踪编号为0的CPU, 并且关闭文件
1 ]/ C3 Z; U/ x3 ~
2 w6 C2 z3 Z% F H9 b8 b& F0 d trace 01.txt,0,{tracelog "A=%02X ",a}+ w$ a y! s( {2 t, X( |! M
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# O1 O) k/ t3 z9 p 并且在每一行的前面, 写上"A=a "3 z; G, o, p; ?$ i: w" w
"A=%02X ",a为一个C语言printf函数常用的输出格式
2 H8 G) }. i# p$ C8 }" r 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, ^4 L9 A/ S5 X# d2 I" L X表示为大写十六进制数- N4 M& [" t- q# C
& M0 I5 i7 t. Z; _
/ s) |/ Q& O+ q# i" l' W. j. ^5 Q" T) ^ _- Y
内存直接写入指令: maincpu- {5 S, J& g3 O
格式为 maincpu.[][]@地址=数据4 E: f* e1 d3 J; G) D
第一个[]:
L: [2 Y' t- K o 表示ROM地址
' y# W8 s4 e, a: t p 表示RAM地址
# ]& h q) W9 m/ x2 ^2 e9 u" R/ J: m! L: x" m$ o
第二个[]:1 @/ E* y- D x. m3 ]# K
d 表示4字节8 p* K# G I6 T4 q4 g) k0 y8 n0 m
w 表示2字节. P3 d: i% x1 h7 u- o1 _% C
b 表示1字节
1 O. l9 L" Q7 ?! [ d1 d4 X6 ?9 L" X% |: @$ g
例子:* N. {8 R# J4 m; W
maincpu.ob@1234=FF) O( t+ P+ p. }7 s
在ROM地址1234处, 写入FF一个字节
s! c4 O7 b! W2 z
9 t/ s* a" x0 P. h1 ? maincpu.ow@1234=4E711 j8 t; D6 \+ k8 z' }/ C# V z
在ROM地址1234处, 写入4E 71两个字节* f' ]* ~; F: n- }2 E
, e" D$ S1 X+ g" O& ~1 ]# e* B maincpu.od@1234=600A4E71
4 {+ i# D" H) i7 R% W+ ~ 在ROM地址1234处, 写入60 0A 4E 71四个字节
8 k, }. q5 `; O1 I. b) Y8 G' \5 ^/ J
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ O$ t7 m: ? A; \& h 2 t6 [+ r/ X- ~
8 P/ v% T- _# e9 t! Z其他:
; o$ X9 ]/ R, W' C+ \2 _' K dasm 输出档案名,地址,长度0 z' i' i& h% N& `2 j* E4 j
输出程序的反汇编代码
; ?* a r) W6 q% _7 z 例子:
! C2 {( d6 h U" w4 W" g) p* V4 m dasm 01.txt,0,100000
! v" e h2 R% q. ^0 R' f: R) }8 w 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; N2 j. }( p F& m) b6 o
) A: m* e. n( W3 Z0 I7 M
softreset& f9 Y! P& U6 ?& e( V# ^- L
游戏重启, 但不重新载入ROM' J6 ], v( f( f: u& |: o
, z( B7 ]1 |' H6 Q hardreset
: a9 ~; A4 x' G' {+ M& _" ? 游戏重启, 且重新载入ROM
# C: g L3 Q a( `8 j- d& l. L% l9 D) R: W
snap xxx.png
& S6 d* S$ e2 V+ t 截图为xxx.png
) a' M: s/ t) K4 @& z0 k# }7 E K3 g
' o% p; U/ J$ @
/ M7 S8 b5 e& V' P. P
3 ]7 B( M3 f$ b' ^' E
热键:) _ ^' W8 ?5 M) V) H
~ 中断游戏
" ?& ^% m% u) v2 X9 d1 \2 b) { F5 运行游戏
6 m) N* K" J' y \5 ~ h F12 运行游戏且隐藏调试窗口( O1 J" O& N2 C2 f
F11 步入, 单步执行, 会进入子程序8 X% S+ P7 v1 y& q
F10 步过, 单步执行, 不会进入子程序
9 Z m7 ?0 v- \ Shift+F11 执行到子程序返回1 F3 z4 ^9 V! x2 I
Ctrl+M 内存浏览窗口. |+ f3 a/ w; I8 R; e; v8 v3 s N
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% F8 y5 a! a& v4 n5 T9 {% X2 C3 r
/ [, r% g: t3 ~: l9 s7 ]+ M{:4_94:}
8 P: k: N8 f8 j4 S ], P
. _! T0 f! H. z, S |
评分
-
1
查看全部评分
-
|