|
1 M6 B; v9 y3 Z很快速的整理我自己常用的指令# s6 P7 W. s8 }$ W( }) B$ t& n
2 P. G8 f6 ?8 m8 K. ?5 c
{:4_112:} - F8 U: q, h5 P' {
- L/ J0 l. |' L0 xMAME DEBUG常用指令
5 l8 E, W$ q& j, R' z, p# Z; x9 x& S7 ^8 h
内存搜寻: ci, cn, cl
9 U# w/ b' E8 B- z7 i) M# b% t; D% b* k7 p
ci
; ?( C8 m C* ~+ _2 K. n3 X 搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 Q9 z" e6 y. |! a2 @
) a0 c: j- A8 F K) V. j* @' r
cn8 @8 O+ z) Y2 ^. ?$ [
搜寻指令
0 J/ m) m* \" m! D 例子:1 x5 ?( P9 B: T6 h1 A
cn eq,60' H7 v r: e3 c" k6 n
搜寻目标等于60 (十六进制). Z0 E% m w w4 k
N; ?3 ^1 l# |5 m
cn eq,#96. y8 F0 r& d! g' Y8 K0 x
搜寻目标等于96 (十进制)
, A% w. z+ v' o! O4 w8 k& K* f) ?4 d5 ^ d" X% o% v
cn eq7 t7 w4 g! r& S# U
搜寻目标的数值没有变化
7 A* ]$ c: o4 L+ @3 O- ]5 U
% K& } b; ^. U- h. S0 H cn ne
" l0 D1 H: h* a7 ]5 A0 [1 N% ~ 搜寻目标的数值有变化; {# N9 y7 v% z3 H2 g/ h. p
$ L# d( ~6 H) z: z$ H cn +
: @* c0 L. v! \1 h2 s5 q. Q 搜寻目标的数值增加9 b1 [9 O1 m2 u1 Y
" L H. ^; k% Y
cn -3 {9 H' |4 f8 T$ ]$ T% g
搜寻目标的数值减少, c3 v+ g) t1 \4 m
$ N P0 \% Z3 e0 M
cn +,3! A6 I( E: v/ [! ~
搜寻目标的数值增加3 (十六进制)
: p/ U( e+ Z0 H Z9 X' W. R2 G! ?2 {& W, G( V
cl; U9 B; k3 H* _. R# h+ t& J
列出所有搜寻结果
+ o7 `# a* T* G c8 f7 K( U
Y: U' d, W8 A& c! ` cl xxx.txt' d, g8 _+ b; D# p2 X4 I+ i
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式$ Z5 e3 A/ U" l' Z& B/ f5 w
, b8 K( }( b" N: h % }, j) c8 w# R) x _0 m$ Y8 I
内存监视点指令: wp, wplist, wpclear$ N. A6 e; q$ Q; M- U
例子:- }' L6 j% H/ O" t2 x% F
wp 1234,1,r
. ^* N: j" A. J' q/ K6 b6 r 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# R* D3 w+ t* J" z$ p
, Z: x" G9 { G$ V1 t: [" ? wp 1234,2,w' i- C! Z# Z9 t0 G0 B
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
" y4 p9 [; c& P2 h4 t6 W- o0 i- r8 k0 ]
4 j. p5 w$ q- o |5 P4 S/ q% M wp 1234,6,rw
U+ N2 h" i% t! k3 _; l6 \+ Q( \ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
' A# T4 Y C5 e2 w; Y* U
3 r/ R& C2 f6 m! u& O1 {8 \. n wp 23456,a,w,wpdata == 14 O0 z `) ? o' y/ ]
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ S x$ `6 c. I7 p7 u3 T. u9 A. j
$ s! b' p# \( I7 n9 t- Q1 `
wplist4 k* i0 `4 E0 H, o6 s
列出所有监视点
& K9 B1 N7 M6 x7 h
# k/ z5 n: }2 u wpclear 3) u/ B5 x# O, i, T
删除编号3的监视点
' C4 |5 y' G7 ^
, X4 z7 Q, I2 f+ X- F% q1 y wpclear
X5 ^4 A% o* `% y 删除所有监视点
! f# R0 h" ~% i# P/ N: E
" w5 G5 P3 J' ] ]0 f
; P/ _; P: f$ f4 M5 w W j7 [- n: n, a
程序断点指令: bp, bplist, bpclear6 s# H' o$ o' e
例子:
5 Y: ~; K2 @) i Y; M( Q, t bp 1234+ {- Q6 s% c9 a$ |
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. B0 e( B2 t, D/ w# J4 Z$ g/ t7 ]& E2 _; X1 U* L% k. W- a
bp 23456,a0 == 0 && a1 == 01 q6 K4 J7 Q- s4 A
在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 J9 M; R; J7 t& J+ m/ V
! c/ Q) ^ Y4 M bplist
& k7 }+ }3 h7 c1 D4 Y. k' a 列出所有断点
' C& o c s/ p5 T# i0 } O5 o* @; g K$ `
bpclear 3
) P' Q4 L+ |4 E! O 删除编号3的断点. Q. f. [0 O4 R- I2 T; e
- G, H0 h0 b2 `" w& Y' W2 a, p bpclear! w/ |& |% [7 g
删除所有断点
, `. u( g& V; G5 L$ M. n, `' u( A# }, `5 s7 `1 g# [7 _& q
" P. A a- m7 j7 U+ K5 e6 Y
F o0 b- z4 s- o' }# G6 G
跟蹤紀錄指令: trace
! A! \8 y$ l! g$ P 例子:+ B% g7 ~% y9 E7 q$ _% N
trace 01.txt8 Z( H. Q: T9 H4 ~4 S7 x: |9 o
跟踪当前CPU运行的所有代码, 输出至文件01.txt! a( O, f0 K9 q1 p
) w' j6 n4 K& R6 \' T& Z
trace off/ d$ \' [, E. }) z
停止跟踪, 并且关闭文件4 ~! h9 M6 A- ~5 A; \ ]3 m; O
( c( ?$ ~+ b3 N4 ]' w trace 01.txt,06 A6 x: B# L0 i/ C l+ p. H
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt8 D: y5 U8 w. ?! |, j
5 m' h* z9 Z' H5 M+ h) r trace off,0) w& Q; y1 ~- S) C# S& K4 ]! _
停止跟踪编号为0的CPU, 并且关闭文件2 a# U1 i- Y, r# |8 ]' ^
" ?* U' F5 z- a" n) `! D- j
trace 01.txt,0,{tracelog "A=%02X ",a}$ L$ ~2 C) A8 _* \: n1 l! E
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & k9 W: N; ~" P/ @9 f% T1 s
并且在每一行的前面, 写上"A=a "
! ~/ Z5 \/ c$ ?0 o& F "A=%02X ",a为一个C语言printf函数常用的输出格式
3 g: k- ^3 \3 v* ~ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' G/ V. X4 l8 X) | X表示为大写十六进制数
5 `/ G+ a8 K- N8 i% p: s
" u* _7 ^( M" F7 V) Y' J& l0 h. v. E* o, X! h8 p7 A3 \
9 `+ V# S1 a/ F. `7 O
内存直接写入指令: maincpu
: K7 w* F4 c' Y" |( f' y4 t 格式为 maincpu.[][]@地址=数据" V2 |- }4 o+ U
第一个[]:
+ r# c* o# h* |, N2 [" F o 表示ROM地址
; X4 r' @+ t9 w1 k( P p 表示RAM地址
" t, J( u- h' u& P
% P1 M1 i% a/ n5 I. y 第二个[]:
0 j$ b S0 c' K; ?! B. x) r- Y d 表示4字节
( V1 b) K5 }9 P+ R( E w 表示2字节
# T. S2 } _7 y0 Q1 T/ ~ b 表示1字节
6 @4 v7 N8 O; ]. K! K S. X# b+ k0 @: k5 R
例子:
; ~# z" z. H- U+ `8 u maincpu.ob@1234=FF
- x: z- C/ ]( l* F6 a& _ 在ROM地址1234处, 写入FF一个字节
5 @5 T ?; e) i& H2 @
% m+ ^/ k2 g# M1 Y9 C; h/ V maincpu.ow@1234=4E715 Q% e3 J5 N: W- x' d6 |0 n* \
在ROM地址1234处, 写入4E 71两个字节
2 J1 o' f( | f
4 a: D6 ~/ o( S( h/ B1 |- \ maincpu.od@1234=600A4E71
( d3 w5 Z9 d- A/ R% F 在ROM地址1234处, 写入60 0A 4E 71四个字节$ r* w$ N& S L, h8 c
8 ]1 W3 |' W3 m) p 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 {' U9 s$ k1 w
/ q* ^+ G# n& _* B5 N$ U+ Q) [# \4 t6 h% j
D" k, U1 r2 T+ l ?
其他:
7 X, N6 w; h0 N/ y& ` dasm 输出档案名,地址,长度
( \" t6 }& T3 M p0 c4 `) T/ i& b( S 输出程序的反汇编代码0 P" t) Q( d: l; D" U, R
例子:
/ J" h% V9 \' g dasm 01.txt,0,100000
6 L& D4 U- g6 q% \ 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" @' K& H7 l2 K1 |6 G( Q
; t% z3 `/ ?$ T& I, a" [7 H/ h softreset4 l, q/ \5 S8 r( Y: k
游戏重启, 但不重新载入ROM# w- y5 |' G0 k
" h6 F, l1 X% k1 Z8 ?; g2 b1 o
hardreset
0 W" c1 i4 w) B 游戏重启, 且重新载入ROM8 i( t8 b/ X4 J2 q9 R5 N
" l$ v' N& p# y( u9 t/ U8 b
snap xxx.png
1 N* S Y8 }5 `, U; J5 T 截图为xxx.png
* K1 n* e* ^5 C2 P( x8 d. w) w( t" e. h( L( k- b% h
/ O; z, v Z. P+ L( `
& Z1 ^4 T5 c) U& q4 h
3 @: Q! t( M7 q, {+ O8 |
热键:
7 @' G$ z6 V5 O5 K. R* ?4 M0 u ~ 中断游戏
, l/ r6 x% n# e" Z3 \1 N) x& |# h3 J F5 运行游戏7 F3 \4 u8 R. b0 x! |
F12 运行游戏且隐藏调试窗口
6 q, p' H: T! g6 q F11 步入, 单步执行, 会进入子程序$ {7 k q) ?; v# H2 [7 T# Z/ m) m$ ?
F10 步过, 单步执行, 不会进入子程序! D% ~* r8 }4 [3 Q& J# Y' l) t: \
Shift+F11 执行到子程序返回
# l/ f6 x8 J. ~; { ?0 X Ctrl+M 内存浏览窗口
9 o. E2 E9 k& j; N F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU, f; j* \9 g, {7 A3 y
$ ]1 B1 x. p0 ~. g/ ?{:4_94:}
1 i) g' n! V5 p1 [8 r$ ]4 `3 E
: ` e7 w' @3 K8 v) u0 U |
评分
-
1
查看全部评分
-
|