|
|
* R% Z w/ A2 O* a3 c% ?7 }3 w" w很快速的整理我自己常用的指令
+ D1 H$ h0 {9 y) i% i. Q
) D/ A; `5 {( x1 R{:4_112:}
% q- X0 z; y8 a3 G- `+ z! o+ R; l+ Q& ^( {7 G
MAME DEBUG常用指令0 Y1 @6 b7 d) l; g, F8 [
) K' X' a7 h9 [3 }# E
内存搜寻: ci, cn, cl/ R9 D9 G N' M4 `
" c7 k6 N6 W$ n+ e' M6 l! S ci
% N9 Z6 v6 O* b) S+ b 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, Y% Q- Q# q8 t; Q6 Y# [& \6 K6 V% o6 n2 v# F1 n+ |3 J+ ^
cn) Z# d' V2 k9 g" y+ `
搜寻指令
: G0 ` C! ?( K) C; F/ f 例子:, {0 p: o& j; q
cn eq,60* t& x+ @5 v: N T
搜寻目标等于60 (十六进制)! i# H2 I ]5 I+ K9 M# W. }! O% ?
, h, D" q. G; Z, J. _) e8 ? cn eq,#96 D( b5 D& ?" h% J/ T+ j! m" C
搜寻目标等于96 (十进制)0 }5 \ v5 w7 }/ {
7 l& I! |8 @/ o$ m2 Z" X0 @6 {
cn eq
9 E$ O' J1 b- m- c! P! M 搜寻目标的数值没有变化
" a4 W5 y& A7 u0 E$ t
8 T; H, Y P8 o3 B# w cn ne
! y* D8 p. e% b0 R 搜寻目标的数值有变化
4 t2 }$ @* E* Y% H+ q0 G( w : B# j7 `! \3 B* N
cn +9 B5 @7 T6 k1 A0 l) L* m9 J+ @
搜寻目标的数值增加2 w1 q0 w) j. w5 ^- \$ A
) _0 l+ ]' B' ^/ d cn -
! G+ x/ ?6 ~* c 搜寻目标的数值减少0 g% L% k/ `3 T& m" d6 U
4 n3 m% g: ~. w$ A% d6 p; W) |6 s cn +,36 U) d' u( g/ s7 A* D& U: B" e. M
搜寻目标的数值增加3 (十六进制)4 x$ b8 n$ z5 }
; N- P) N7 }( @9 {1 j
cl( q. {, l' |' I1 z6 K$ N
列出所有搜寻结果
1 {* U* h( ^) Q- ^% M5 H; z6 _- u4 z- D- i; U: G6 F& ^
cl xxx.txt
) m- ^2 q- |4 g* q' q4 F 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 {2 T' H- Z5 q! |& }. z" | y; J
9 y# s! f4 M4 X* y
" |2 m- D( O% ]& Q0 j内存监视点指令: wp, wplist, wpclear
- O7 y1 a* E. l0 ]0 E9 z3 T 例子:* {" G+ h, C- P* Z6 b G6 |8 Y
wp 1234,1,r" J; J' ?+ e# p! ^ {) \0 U
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 S; Z4 ]; X4 R- M8 k
0 C2 C6 Q( C5 ]5 W' m/ T C8 U wp 1234,2,w
1 q8 O1 \% e r, A 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" A7 v; A+ E6 A: B8 y& g7 s
4 Q4 \: c/ f5 q: A/ E8 a8 F wp 1234,6,rw6 U) d7 a2 Y$ N! i" g2 d6 r7 r
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% O! P$ S( q. S0 M8 J { q5 a$ \
% P% v. x6 Y! u/ X wp 23456,a,w,wpdata == 1 C. w/ _5 L5 @. N- m2 |" Y6 J
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" F/ y4 ?) {5 W2 b1 c# s5 r* v K U5 l4 ], T* r
wplist) e/ R; C. X/ y) [# V5 x* R! X
列出所有监视点( V( `& _9 d* k& ?$ I+ Q% N
/ i$ A8 G0 l B
wpclear 3
c9 \* r2 [. G4 m5 z 删除编号3的监视点; ]5 |3 C/ `9 E j5 o( `
0 J! B! d! e7 A wpclear
: q! X/ J _ d- H8 [6 t6 ` 删除所有监视点
, j2 @, i: @& c! e i. {2 v8 o9 M* O. A1 e
; n' a- ^3 p7 p' O- W7 h! X
8 n: w9 ?3 ? Q9 Q" N- u程序断点指令: bp, bplist, bpclear; K' k4 y6 m, L9 [* Y! ^. X0 [$ D
例子:
. y# A& X9 U! w* W5 ` bp 1234
6 M o4 c0 m! h* @6 q. V* W 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断8 T3 w {2 \3 a" N% t$ J+ H. O+ a
4 @/ k* [' p8 p% d5 M, `% l8 h4 I. } bp 23456,a0 == 0 && a1 == 0
* n& m+ t. F+ b% ^4 s6 c 在地址23456下断, 且中断条件为a0等于0以及a1等于0
n7 q" x: R% a E0 x4 C
- R; j/ J [/ X0 n2 G1 r2 o8 x& _ bplist q, x+ Z9 k5 F3 U; _0 \
列出所有断点
! h; R4 ]2 M# k2 L2 t
6 f$ j0 j$ {& O- T; s6 W) D bpclear 3" C8 b/ ` {8 d# @! `! x' A
删除编号3的断点
) i" l& q1 M. m6 j4 F' w: Z6 f; Y& C' @- q+ ]. C# e
bpclear! \; Y e5 H. v/ M( y
删除所有断点4 q0 t& w- t7 c/ Z
- v1 D+ `( U+ ?" G! t
6 L& Y, Q" K/ v6 H
% ]5 c% }) m4 q0 a跟蹤紀錄指令: trace
. Z9 _% J4 K/ Y1 N3 H) U( r+ w9 A: K 例子:
- w3 a2 D+ x/ j' b0 G( M1 y& x trace 01.txt
& r; M. n6 j8 g: Q+ {: B! O 跟踪当前CPU运行的所有代码, 输出至文件01.txt D; @ y2 \: L) c9 h7 |( _
/ w( H4 x. l4 t& Q& k. ? trace off* G8 W; Z3 ~ K' ?2 ?; N
停止跟踪, 并且关闭文件8 M5 N% Y' v% F$ }5 S4 @, S; b# w
: f5 \; j J1 ~2 D7 \8 R trace 01.txt,0! U1 g# h; {+ O8 g" L' D
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) v" l, _' o9 V/ ]# d$ M8 ~/ v6 s/ J
trace off,07 v2 m/ E4 s3 a
停止跟踪编号为0的CPU, 并且关闭文件! {2 B7 P& Y$ I, V+ y- u: C' m: v
, A5 H, \( n# w) _( @9 ] trace 01.txt,0,{tracelog "A=%02X ",a}
+ h1 }! K3 [+ b; x4 t6 S s- b 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* m6 s2 X' g' y) w 并且在每一行的前面, 写上"A=a "/ v5 M* a6 s/ v* s K" Q
"A=%02X ",a为一个C语言printf函数常用的输出格式
, i/ q3 z a: F- H0 e 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 Z. g9 e& K' V6 C" d X表示为大写十六进制数
. L8 a1 T" f' V! x8 d* |1 H7 K* g3 V2 z: B
# q1 s8 k& C- h3 c7 @: F6 @1 z/ {5 q7 T& H5 w7 R
内存直接写入指令: maincpu6 A) i1 Z7 j; [ y& _
格式为 maincpu.[][]@地址=数据) Z' V+ j* W" }
第一个[]:
6 X& Z- Q4 M% j% ^ o 表示ROM地址
; _; M! `/ A' K) h p 表示RAM地址1 h% S9 f0 `# q$ l3 c# J/ E( g
6 w$ m4 m- |; ]' ]
第二个[]:
4 V8 _% w- R9 s M d 表示4字节8 |0 b, p. [$ m) b4 w
w 表示2字节+ a4 }6 O8 y/ j4 s
b 表示1字节5 c6 E1 f2 [5 P, b8 Y9 r
3 I0 r$ f: h' d+ W( E1 x
例子:' j. X7 M. F( d2 v2 s: p, A+ m% t
maincpu.ob@1234=FF) M, J7 b. _: Y# d1 P) P
在ROM地址1234处, 写入FF一个字节' u) o/ A: t3 r" ?& [/ W
9 {2 B! T) j4 r; d
maincpu.ow@1234=4E716 ~- Q; }6 @/ a! E
在ROM地址1234处, 写入4E 71两个字节
5 z" s) v! f: s* }; _; A* p( B7 A7 j; J8 u+ S- ~' c' M- G
maincpu.od@1234=600A4E71
4 L. s- _# d- ?. i0 |# L 在ROM地址1234处, 写入60 0A 4E 71四个字节0 A" f7 q) [0 j* S3 R
, n9 I. m7 g* r1 T/ l
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ W9 P( c1 R% }' v9 `( [ 4 K; P! w' t! V9 k% W* u& V
6 ^! h; V; F3 S5 K Z其他:
/ e$ d% L$ \) _* ^- u dasm 输出档案名,地址,长度
- w5 O: Q4 j8 N) e 输出程序的反汇编代码
+ U" U8 C5 Z9 i1 |5 X 例子:0 I( e6 t! T" L& P$ y
dasm 01.txt,0,100000: {: `4 c3 R4 Z$ [
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 h+ A& E$ E6 R* N7 ]
7 w7 Q5 ^+ L" Z: h8 b% e4 v0 P softreset
2 N- h7 M5 Y8 B- l. n2 S 游戏重启, 但不重新载入ROM+ ? \# P" [9 N' N0 U
( J) b' }' N# k) ^* c hardreset4 m3 \) _' j5 \% @ ~1 N
游戏重启, 且重新载入ROM7 b, j8 k0 v1 p; y6 v/ e3 m) Y x
% e: ?0 b/ T+ ^& V2 V, C: b snap xxx.png$ K0 M# m! N* O; }" V
截图为xxx.png. N g* r2 V( a N1 s# ?
+ D, l6 S+ T+ o* m! J7 V
2 T6 K# p8 ]& {
2 ^* M. Z, G( K0 k$ E
8 s8 Z9 k. M$ h7 x4 f. q: ]热键:
" d. k3 R" O, z3 a ~ 中断游戏1 x5 k) O0 ?, G k: W
F5 运行游戏$ p0 n1 r0 h7 r3 c+ g' p; b) O, I
F12 运行游戏且隐藏调试窗口# Z1 D" }2 W, }$ _8 A
F11 步入, 单步执行, 会进入子程序
) |' ?' Q( {. p9 L. j- V# b% K" G F10 步过, 单步执行, 不会进入子程序& q, J$ y& J; G6 E6 d% v
Shift+F11 执行到子程序返回
- g T( C, X- ^% S Ctrl+M 内存浏览窗口
, v, ^) u d4 R F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) a, t G: H5 q. }! n1 \7 W8 A) W# o; u! p
{:4_94:} 7 z1 i/ c5 U2 O( u# V+ z
$ t7 s1 e( D# ?: \. h. r
|
评分
-
1
查看全部评分
-
|