|
|
; I( A+ z3 @7 r! k很快速的整理我自己常用的指令, y. b( _( J# v, {
/ |/ a3 u* {" r& c4 k
{:4_112:} $ m+ P! J8 E* F* |) ?& e5 m( U
) ^% ]: h3 y4 i2 lMAME DEBUG常用指令 j! a0 g* ?+ A: z
/ g# s+ D- j- q) }7 Y% O1 S内存搜寻: ci, cn, cl$ ~! z7 c) X' w/ h# V: f
" c& _) G h3 C+ ?! j! C. P ci7 H' r+ O9 N- B4 Q& M2 _
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* |# `9 y4 f$ M2 g2 s6 I
- \* x1 ?5 C. X& @ cn
4 w. H( ]7 s O% u2 f 搜寻指令- }' T# D' j& b- {
例子:' G; ]+ r" _9 Q: a! n4 Z- Q
cn eq,605 C( l1 F" i& C/ I
搜寻目标等于60 (十六进制)% i5 `" n; e$ {. F1 D8 [
& s4 A7 E- k( \% ], x5 [) A
cn eq,#96
9 m7 V- i3 t* |7 Q- f 搜寻目标等于96 (十进制)& n$ k1 U1 v' }$ S! q/ ~3 N3 l
i/ m" O+ a9 p" V4 w$ J+ } cn eq3 x; z7 z! _1 K) y
搜寻目标的数值没有变化
# w8 s/ r, V/ R( ?6 ]. a% H
) x5 B& U, F% Y) t% W K" J& P cn ne; G: W0 v! h7 P9 X1 c
搜寻目标的数值有变化
. z" G5 I9 S' g2 v( }
* w; o2 R; L. H; q) X$ E! I' J cn +. H( ? m9 b) r, O
搜寻目标的数值增加
! r, [7 q0 Q) L! \" |5 Y. z
5 a5 Q! |& V6 q n* t- F' m+ |+ r9 g3 ` cn -- Q: a6 I. d) c4 w( t
搜寻目标的数值减少
- p8 _; u$ F% R. V9 h
% U" P. |7 H' @ cn +,3
( U: n4 v' v1 k! x$ A5 q* _4 M 搜寻目标的数值增加3 (十六进制) F C- l: a# {7 f' u' K0 a
+ O' I% s; Z" e8 A* ]
cl6 j# J- Y5 `* P) \
列出所有搜寻结果, Y) K) u" K0 p6 ^. I' d
/ n9 |! r6 r& U. f4 ^3 C' ~2 b
cl xxx.txt$ p \, p: ^7 c) j0 m. s
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 ?2 b" Q& g: t; w' F# u2 \2 K* Q
4 w% d4 Y5 v g e7 H5 E( k
! ~( \2 G% B% P. D内存监视点指令: wp, wplist, wpclear
0 T& ?+ B8 h6 V0 P' |: U 例子:2 }0 `/ n) Q0 V! Z6 X$ ^3 t
wp 1234,1,r
0 T4 ?- B/ Q3 k9 }9 t: z; b0 T2 m 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1% G. a5 \8 Q$ F; X* T }
/ h5 r2 O" B6 j1 X wp 1234,2,w$ l2 S" Z/ Y9 z7 C1 g
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: y- X8 i8 J4 Q8 z' C$ o/ ~
7 L2 ]" n5 ^9 i' A( m
wp 1234,6,rw3 g4 N) t2 j4 v6 w1 j9 f6 o
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
8 a( X7 y# u/ [3 V) E5 Z! { j, D4 N6 u y( ]% w
wp 23456,a,w,wpdata == 1
3 z4 f2 y- N6 u7 {' ^' t: S 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
P9 p1 z5 i; j3 l. | e# e4 n# F- l( v& A: ]
wplist- j4 I& T7 ?, [
列出所有监视点5 }9 E; |5 m# y% w# \1 W7 I' U2 ?
0 \" o3 c- b) M- I5 [5 a wpclear 3
8 [: m m7 p8 e% X3 u9 n 删除编号3的监视点/ K4 y7 o( w9 x0 L w
* b' @' y. D8 B ^ wpclear7 z. e: S. `6 ^( O& i- O
删除所有监视点! S% L2 `/ _! G3 B" [( S
* \, k5 Z+ z. {0 @ d2 G ! t1 e0 F2 f# z/ X6 h; H+ }
! {& [: j$ r/ B4 F* d) P/ R8 C
程序断点指令: bp, bplist, bpclear3 L4 E/ T. o- j, ~& b6 B$ k
例子:) K" `2 e5 M, p4 c' K1 m+ Z
bp 1234
2 @1 W( N, Q) s% p( B 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* M: N; {- G4 ]0 X. a- j# U
3 W2 R6 _0 Q7 W6 R! [$ V9 ^8 g bp 23456,a0 == 0 && a1 == 05 K+ L; Y( [5 ^: s4 Z
在地址23456下断, 且中断条件为a0等于0以及a1等于0 {! t& E0 X0 c8 s! C
0 o8 H- T A% U( W! C: Z- B1 \( F S bplist7 Y6 f7 q3 M2 F. L. }- U, A
列出所有断点
/ D% G- l) g' M/ L N' {9 V% p$ x5 H0 g
bpclear 30 c1 Z% f- j% ^( `5 y0 b
删除编号3的断点) ?- ^' y" f% Z( X
( y8 z% V7 ^+ o( p! A0 @" n+ m! t: S
bpclear$ o) i4 \! `: J+ S: |# Y# ` m: O
删除所有断点
! }5 m: j' ~( b6 ?* q' g0 x, B1 s1 p
0 H# B! h O8 T; Q3 E
( A' t& i' m( B$ C m! O% N# W3 F9 I跟蹤紀錄指令: trace4 H! c7 `% ]7 p$ y$ T8 w
例子:) I: }5 U0 l/ X; p. X, n$ ^
trace 01.txt
1 ^$ ~) w* y: k5 K' G# w8 x 跟踪当前CPU运行的所有代码, 输出至文件01.txt. d' n' g6 d2 d7 m" K" C3 q
3 [& x8 ?! q) i4 `
trace off
' G% \, V1 }" K0 S: | 停止跟踪, 并且关闭文件
( W8 e- N. e8 r' p8 u1 J9 x0 N, g b, _: k4 Z ]6 L6 P1 p1 {) j1 ~* f
trace 01.txt,0
4 V5 ]/ D3 r7 {, `' x 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% G6 ~: a) t% }) H p" r) o
+ D" D# C5 U* }$ {+ e2 h8 c
trace off,0
" ~% W' q8 Y& X& `' b+ N5 p 停止跟踪编号为0的CPU, 并且关闭文件- d( ~, z& P0 t2 L$ Q' P4 ^; x
* E' y' f% m, L2 b8 c2 M9 c2 i: X
trace 01.txt,0,{tracelog "A=%02X ",a} C: a3 Z3 [" P$ }5 r- ?2 g
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, r5 d" e w# g! s 并且在每一行的前面, 写上"A=a "
, r2 [: l7 G( c( D7 x/ `! x "A=%02X ",a为一个C语言printf函数常用的输出格式
5 J4 ~ @3 \2 E 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 c! _& n! m& B5 {6 q* Z$ B) a
X表示为大写十六进制数
8 T5 K2 z% Z) @( X4 x: b. W7 x& J( G; u" p6 \: W; o% C7 E; u+ T% U$ d
% [) n7 r J( v. r) n. `
& p& T6 h* \5 S. Z内存直接写入指令: maincpu
: G+ k1 u$ r {, H+ Y 格式为 maincpu.[][]@地址=数据
t: Z- m$ }4 x$ I0 p0 I8 J 第一个[]:
! I" ]4 [1 m+ s3 r U o 表示ROM地址
4 ]9 L% G+ [- w9 ^) B- z p 表示RAM地址
7 f' S) ~/ A# }$ l
$ U9 {% u- B$ u; H2 }) e 第二个[]:* B4 E. k+ m6 j0 b5 |3 B& \! s8 \6 J
d 表示4字节
4 `) y- X: Y! n w 表示2字节: h5 Y" V8 s1 M, O# A( V
b 表示1字节
* W4 O8 R) |) D* s
& w4 a1 }( c- ]/ Y& r 例子:
6 Q6 H! b' s3 F+ T& x% R( Q maincpu.ob@1234=FF( p8 B! _8 F/ l9 [( d _! f: m
在ROM地址1234处, 写入FF一个字节8 C4 ~6 X& a/ N* o. K4 ]: G
: B. {: E3 x7 e1 x
maincpu.ow@1234=4E71
# f1 |& [4 I( A" @ 在ROM地址1234处, 写入4E 71两个字节$ L. I S4 ^9 ]5 l: W
: T) v0 `( O, c0 | maincpu.od@1234=600A4E71
; U2 @* C" Z6 T+ |: [6 d/ Y$ D 在ROM地址1234处, 写入60 0A 4E 71四个字节
2 H# O7 Q% Z- }1 u) |, @; ?. k( C/ ~7 ?
: U1 |8 e) j' ?1 Q) h, k. ]1 t- [- e( O 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; ~- [- r: [% {4 Y$ H! @8 @* \ + N) X) i5 [; q- c& Y" ?
: i2 \' S( t! Y" T5 h& R其他:
( a; |/ `( ^9 c/ b" k7 h1 I* w9 ? dasm 输出档案名,地址,长度
* [, }$ I" x& w; Z5 z* y6 B$ q% z5 } 输出程序的反汇编代码, p/ o+ c0 D% n4 i. F/ t
例子:6 R- T9 R8 _+ X
dasm 01.txt,0,100000( x( Y$ U1 T4 q
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
% g- Y! D8 e# s0 d" G/ |* Z0 m: A) u
$ |/ p, h* S9 a5 R# g softreset% _' Y) {* w/ J; F7 M* s
游戏重启, 但不重新载入ROM
! d) H o- T% l- e
! H+ n0 G5 t( r' `: d hardreset
! c# R1 o6 y5 l6 \' d5 e 游戏重启, 且重新载入ROM
5 Z2 c, S) U/ p' T8 d0 p/ f: i, g% Y
snap xxx.png, N" i$ X1 h9 ?
截图为xxx.png
; q1 d. d" \, g, B% X# r0 V4 Z! i1 |/ L" F" g, X
) T% P3 a {3 m2 r* a ; v; e# k7 t+ i
& a* R5 Y# |% v0 r* G* P热键:
% g# V" E3 X# T1 E9 {& l9 f9 \ ~ 中断游戏' d! Z. [; v1 n; N! Y. _
F5 运行游戏0 G C/ v; K/ f i7 O9 k
F12 运行游戏且隐藏调试窗口
, ?& D/ U2 { _9 z" } F11 步入, 单步执行, 会进入子程序& s" }" L3 m0 A- h
F10 步过, 单步执行, 不会进入子程序
8 L3 O* C2 S0 s2 S7 s% u% D4 l& Y Shift+F11 执行到子程序返回; ^# w( c* `& d3 @
Ctrl+M 内存浏览窗口& N& o9 |; z. @' I
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, K6 o$ N4 q1 S7 @1 I7 o/ ]9 H+ V A9 k" x
{:4_94:}
% R; |) s# q1 l( l; g+ W, h5 |, U6 I# n
|
评分
-
1
查看全部评分
-
|