|
|
S1 D! k! a% [$ e
很快速的整理我自己常用的指令
2 `% B8 v+ b' y/ {& \5 w
- w" D0 ^ ]! ?8 V{:4_112:}
! b3 K$ v& d+ r: }) c4 d( ]* q4 T5 P6 r( y( k y! r
MAME DEBUG常用指令/ u+ T1 S5 v; [) C4 k
5 J, ?% o, P3 X! E0 M内存搜寻: ci, cn, cl
, X6 o- T: s# b9 R, [' R9 H/ }$ O3 ]
$ C( f: c8 {; L! D ci1 r! O, e# M9 u
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' L& C. T6 M* U) [: [7 z1 O% }% k V
! h% ~7 @1 J1 r/ P( a4 R! k& L' f
cn" W T' _" C3 l7 y' ?
搜寻指令# x/ R" c6 f6 ?" K
例子:
- F c& D3 E8 ^. V8 q2 O! g0 ^; e cn eq,60
% N+ v" O; j5 @6 Y 搜寻目标等于60 (十六进制)
6 _( L- {" m. o' D3 `
2 j1 I* h: w$ O$ A6 U cn eq,#96
0 k, Y. A' h" v2 c 搜寻目标等于96 (十进制)# R _) F. o3 \5 p6 y
! e9 }0 z. b% `4 h- e
cn eq o3 C: I! T* L7 G6 G$ C
搜寻目标的数值没有变化
4 A$ V; J! m( ~6 g x) P1 H3 s3 O( f! g! t
cn ne
2 O j6 T2 m5 C* E& p% @ 搜寻目标的数值有变化, m7 \% B4 J/ f$ \& n- i
& O" p7 D1 Z e1 R& N* r: | cn +
7 i1 P$ x: L q3 T A, C4 X j8 i 搜寻目标的数值增加
5 g V1 x [7 T6 U( u; ~ # D1 a% ]' S8 C
cn -
1 d$ {& D" _# C' G# ^+ Q, h 搜寻目标的数值减少. l& ?0 E5 s. u
1 d. K% X# c: c! ~: ?6 j- e% v cn +,3
8 [, R( I; T3 m ~; L1 U, _, Y 搜寻目标的数值增加3 (十六进制)
2 P$ `& a) R$ v4 s( }' F; @9 \
9 W) {5 K( d9 y/ X cl# w; t) D2 J$ K5 {" x5 {
列出所有搜寻结果
y4 E- `+ t- z% H0 F k) c* r
' d" Q* V+ l: E. D" T& z6 [ cl xxx.txt) P; @3 _: y7 d! I& s
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, D. n9 R1 J. A" ?2 U& d
% ~4 P9 C1 b7 b6 |
+ j4 i* [# H* {7 y内存监视点指令: wp, wplist, wpclear
7 n# h- U R3 t% ]) V6 s 例子:
: C0 ?" {; j& T* A1 f: O1 y wp 1234,1,r( Q7 C k- _* }& r
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
2 u; N) T( i; d9 o8 M3 g" i$ N) t- N" `
: p9 ]. M0 C* {; z' B4 I i wp 1234,2,w7 M! Q+ k. j9 e' E, r* T' e" ^! U+ N* c- V
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ J8 v+ e* Z, x) t/ Z 6 A& O E: z! @; a; n4 J. F
wp 1234,6,rw" q- X1 s5 d/ ?3 W" K- W
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 ^6 H0 n1 M8 s7 \8 h2 r, n b& C5 A& P& x! B7 J% q
wp 23456,a,w,wpdata == 1
' g5 I0 i- x, D9 \. G0 i$ D 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 s( z n, @9 f& H; U: z: p. S( ^# a2 x8 u& }5 A r
wplist" s! E( @& k9 x+ f- s
列出所有监视点1 j: p- M0 d, O8 ?/ Y
; D: M ^" c% k* U F8 h wpclear 3. v/ G, w+ A0 ^! L' l3 g
删除编号3的监视点( e9 F4 l# y( N0 `& B
2 X3 c+ y: b4 o: A
wpclear
& p% P/ q% ~7 C5 b C# H2 Y 删除所有监视点
0 m: ^& D/ \: F, R* |* r4 z7 X0 }/ p: C" G
8 O* n) [* ?7 C! T" K % z. [( X4 K8 b/ c+ j1 N' B
$ I, w# d% ^) X- M6 t, U5 i& `# Z程序断点指令: bp, bplist, bpclear5 V' ]& s* o. D. B/ @5 z
例子:
m. F0 H6 G g7 L2 y bp 1234$ l7 r0 f6 s& t7 e+ C
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
d2 [$ B: O- Q) y' E. m3 B" C1 P7 f$ L, ?. G2 K+ t
bp 23456,a0 == 0 && a1 == 09 v; e, A9 _6 z( w4 ]
在地址23456下断, 且中断条件为a0等于0以及a1等于0
$ @, G( n! w3 ^/ G4 d6 f. H& R, N$ ^6 Y# ^( u. `! I: j# \
bplist! y- z" i- G2 g+ c/ _( L3 z
列出所有断点
6 u: @, T4 {* @5 H) G0 y: ?6 m1 v/ m
bpclear 35 h6 |9 D2 b$ P2 ~) k$ P
删除编号3的断点
+ c+ ~( a/ W+ G& n5 h- {$ m/ n# `5 u( D% L; X
bpclear( O' R0 f z& l
删除所有断点( I: \5 ^: C% C1 i% y
7 M+ y( q6 [2 U. W0 u! l
3 {% H0 d8 V$ b% @( t% J" `: z 6 P% |4 D0 E. T5 D
跟蹤紀錄指令: trace% `5 U; [9 C1 s( ?
例子:
* |# f/ ]3 V# S1 U8 ] r trace 01.txt
2 s* T) A% d3 g; x5 f1 S3 V- R 跟踪当前CPU运行的所有代码, 输出至文件01.txt4 [+ M7 N6 `/ y1 N: n w3 \. l- C
1 L) u( t) h; J, U trace off
2 b! @$ R: L- s f 停止跟踪, 并且关闭文件8 W0 H: E/ z& X; W0 H* M* L$ B- y
; Y8 C& w+ O) @) o4 i4 m, e
trace 01.txt,0
* o7 I- n8 Y! k) D 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% v$ c m, Q7 D' t+ F" f2 Y# J, ?. p; p. l
trace off,0! d3 Z2 P; R+ [# `1 ]
停止跟踪编号为0的CPU, 并且关闭文件8 ?9 I( L# h3 K; d5 X( j- }- u
; c$ Z" Z2 s' T8 u' n# N. y. y% l; X trace 01.txt,0,{tracelog "A=%02X ",a}
- ^( z7 D9 B' x* k9 z+ |2 R# L! j8 r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 h1 F8 @8 S2 N& a) _& B9 [5 \
并且在每一行的前面, 写上"A=a "3 M! b" N8 c+ }) }
"A=%02X ",a为一个C语言printf函数常用的输出格式
) g. }5 Z% c* Q 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入" k9 J4 E q; G1 V
X表示为大写十六进制数( ?& i0 C. b/ a4 }; W
* ~/ ^, P& P2 b7 p! N$ `0 ~ h8 c( r5 T6 {' [2 |. n
2 Y1 a* [9 i5 H0 F5 X% T# I内存直接写入指令: maincpu
7 w5 @# _% ]* X( c+ A+ S 格式为 maincpu.[][]@地址=数据. }" ~. O# J m7 [9 e
第一个[]:) Y) d( G4 {. P! Z& |
o 表示ROM地址) E B1 \9 i! \" e" u
p 表示RAM地址- I5 T" }' E! Q2 j/ G ?8 o% Q
- z* s# a; `; y, }, l: o5 y$ i( }
第二个[]:3 J; H5 `# v# b" J4 k: J' ~5 ]0 B
d 表示4字节
3 o5 @ ] A- m- v o. H. Z w 表示2字节- ?2 L% m w, }* @* G
b 表示1字节
) g8 ~' ^/ s' y1 w+ B+ K E& t+ J6 e% r$ B5 t
例子:1 ?) {5 x/ o& C, T
maincpu.ob@1234=FF- t- H9 X5 _, F; {" z5 G
在ROM地址1234处, 写入FF一个字节* H1 y- `7 @0 F3 t
! n' e7 l6 S' k& G: `" S5 ?1 F
maincpu.ow@1234=4E71
4 ]9 ^0 |" ]/ E' @5 b8 ` 在ROM地址1234处, 写入4E 71两个字节! ?2 r6 ^: k: m% @
2 Z6 S5 {! h% p2 N
maincpu.od@1234=600A4E71
% _& `* w6 l' Z3 M2 Z1 L1 l" B 在ROM地址1234处, 写入60 0A 4E 71四个字节
3 r! S) r/ z4 L- u @' Z3 H
" T) `2 N+ r# D 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' S& w% l/ d! F
# G6 v+ K. @+ a2 `4 M5 g% ]/ i* L$ V3 y+ s- Z
其他:2 T) i/ ?( R# p+ t' |
dasm 输出档案名,地址,长度
}3 l: z1 x# D+ [ 输出程序的反汇编代码
& T5 T4 k: N* j9 ] 例子:$ r- ?6 O5 g( W c
dasm 01.txt,0,100000# v% A h* y; ^
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( U8 A8 ]$ I$ _; J9 W+ s( F
6 |1 e+ P' [( o0 _( d softreset! c: ?- O1 n/ A2 \. {$ o' }
游戏重启, 但不重新载入ROM
, p2 H0 l0 {) t' C+ s+ w# ]! G9 K# l* h q- m. W- G0 C6 p
hardreset& P9 H* r- _/ O
游戏重启, 且重新载入ROM! O3 s/ Q& _' t
9 X5 _3 b4 Q1 P* \) T
snap xxx.png3 t1 } N4 m8 L! ~9 b& {! U
截图为xxx.png
% A9 h: W; B& v) d+ U; `: S" E7 B9 r" R! \" _9 D3 g6 a, l8 v
' Y* C% j% e( O3 d7 R0 r
/ q; c2 k4 x! q: ~
X+ z e/ [( ?: O* U热键:
0 f+ |' R: Q3 ?% E+ } ~ 中断游戏
, a' r$ Q- {) r1 R9 s; G F5 运行游戏- d {* ~9 A8 j+ B1 i
F12 运行游戏且隐藏调试窗口
+ i$ a$ |9 K3 Y, I3 ?# Y5 } F11 步入, 单步执行, 会进入子程序
4 m4 x2 K& v) w$ G- j F10 步过, 单步执行, 不会进入子程序
/ P& @. U4 c8 Z/ ~7 Q$ I Shift+F11 执行到子程序返回
1 U$ U7 n) m6 D2 K# e" p Ctrl+M 内存浏览窗口
- Y+ c, {' \0 g" ~ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ k( Z3 X/ j5 n" j& P
- A7 n, s# g/ W A{:4_94:} 7 X3 d c, c5 E; C
" @- H1 b9 r3 L8 p9 [9 b |
评分
-
1
查看全部评分
-
|