|
|
+ I/ F5 L1 j3 G1 K. _很快速的整理我自己常用的指令
% g' r# t0 i) \6 t! W# q* r* D( N3 v" A3 r+ D2 }
{:4_112:}
! b# {& ^" b/ c6 d& j& N0 n! z i' [. F" g" Z
MAME DEBUG常用指令" {" X6 d/ ~. H; T1 _$ n& R
, @/ o" T4 ` A2 s+ d7 v3 l内存搜寻: ci, cn, cl
- l. p: c( K9 W- h. B
& w0 ]9 a* e% e& b0 n8 @ ci \9 [( u2 @ r
搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 L. b0 C! O# m1 e
. D/ {( g; ?& J. }0 n cn# `9 Q9 V/ Q o/ y( h, @ e
搜寻指令8 U. Y8 W; F8 |- Z: B) m
例子:
- K% J0 A& k$ R" l% F+ {1 i$ r cn eq,600 R4 r2 y. a% U7 g, e
搜寻目标等于60 (十六进制)" q6 ~$ ]0 B- o5 Q
- F: G: X# o8 K! L- g$ I cn eq,#96
8 s% a. [7 A4 o& o9 ~" e# e- K- {- o0 b 搜寻目标等于96 (十进制)# M1 G6 F5 _# Z7 y! M
+ ]# }7 h7 a8 e3 e7 Z q; u
cn eq5 y' ?* _- N9 c) a
搜寻目标的数值没有变化6 M" x) a1 N& G2 z# D9 C+ P
$ v2 K, v- N) R! G cn ne( T0 u6 Y8 R% @( I' U! e1 w2 x
搜寻目标的数值有变化; E m2 i) t! Q" @+ L* u
: P0 ?" S3 P/ x* u! B1 S cn +4 h `" x& x! u
搜寻目标的数值增加8 `5 K' z, _4 g L& m9 M
0 @% y$ W7 |2 Y7 ?! D# Z1 S- E cn -
! v ~7 i I" O l, n& C- u' [ 搜寻目标的数值减少0 |6 @+ S! q: a# ?( z
; M; r% R! _, z* q5 { cn +,3
r1 w! |& @3 i' i4 E; | 搜寻目标的数值增加3 (十六进制)
: T7 v! j Y3 j8 @; |' ?2 ]3 Y3 {
5 G+ z: [1 R6 ^8 V! y cl2 K6 Q) p o1 u8 R
列出所有搜寻结果5 g+ k8 B5 o% V+ \8 F3 e
5 m& R8 A7 i3 a) E cl xxx.txt
. }' U3 q; Z, ~; b, |& ]" p 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, `! |) P7 _/ _1 s( v* ~( L4 B7 z, M- d' A
5 S5 J% t7 d5 _9 [内存监视点指令: wp, wplist, wpclear
4 V& }. x' `8 q/ q1 h- {! h" _2 O 例子:
) A: v% X B3 j X* c wp 1234,1,r
/ f0 o3 n: n8 e: G 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( Z9 a+ I3 B# ]3 O
, V9 b R5 H, i; z8 U: L3 l6 O* Z, c
wp 1234,2,w- t" y6 K% t" K- ^8 T F5 l
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 m( H: Z) k0 W" ^& X & h- ^, I/ a+ W
wp 1234,6,rw
" V+ B7 ]7 ~, ?2 b$ f3 b 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" Q& ]3 c" B( G' m. v! {
* x- F7 d) f/ q$ W
wp 23456,a,w,wpdata == 1
2 O' M. }8 ^* Z! ~( d0 N3 C 在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 R6 P" X6 A. Y% \* R1 T( g: U
# t5 G+ o$ l `: ]5 E wplist. j8 G C, @2 }. A0 f
列出所有监视点; P8 {( |) g2 [! X6 x5 u
: p; e. G4 y! Q
wpclear 32 h8 h! E) l, L
删除编号3的监视点
5 d4 T1 {! `, P6 q8 z y$ @
, Y, a% i' u/ W wpclear
6 C1 ^+ B: [9 s4 `7 M* V- k% _ 删除所有监视点
/ r/ j w5 J7 H3 r, U
$ m, Z o: l+ ?6 D : y" x r/ Q) `4 r# i
; s( p- S; _: q8 F7 p2 n
程序断点指令: bp, bplist, bpclear
3 U. }3 q$ @9 u: w+ P" l' d& G 例子:
& [3 y% c3 a) r m4 l6 \# g$ m- e bp 1234& u) ]; X! |! x1 {; b6 a
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& v, X5 x6 p" T& w- p& m2 }% c9 D
- [ e) z8 Y8 O$ \ bp 23456,a0 == 0 && a1 == 0 K6 A2 |" k6 n( w. {! f
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; m% |! t* c* M9 N/ G$ U! @: K5 I3 L7 I+ s- J2 @4 k
bplist
; r0 ^/ v) E+ S- r 列出所有断点% R6 a2 ]8 z- Y' ^; s
0 Q; e3 ~6 g$ D; a- j3 |+ ^* s
bpclear 3; \/ k* r' G# h
删除编号3的断点/ V1 a( S9 _. h; _, X
9 U$ o G' W3 O* w bpclear8 m- ~) K8 H; ^% g8 `
删除所有断点
2 N& P* q5 ^7 |' h8 f5 @3 y/ j: {" Q' ?- M
7 T- \" Z' l4 u3 b: q" ~. Y : @0 _& ?4 {( d; ?
跟蹤紀錄指令: trace
+ @+ h3 k4 U' G+ u( s/ I! ]2 w 例子:. c( B! B9 P4 D: d1 g& o1 v
trace 01.txt
# p# W/ ]6 H& P, A6 ~ 跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 p' s2 a: R2 ~- i+ M0 f. i1 i& Q9 E% B8 h; N
trace off
, o7 F E$ J$ x5 } 停止跟踪, 并且关闭文件
* ^( R- Q5 ^5 z
& o+ Q# Z3 T9 H1 z( T: S trace 01.txt,0
3 Y% m7 y1 l1 Z1 U( B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 y9 E3 {6 C! S0 O8 K) u8 i; w' B3 y' ?
trace off,03 U" t% s9 w5 e8 R* K! a
停止跟踪编号为0的CPU, 并且关闭文件/ y' G8 ?2 r* ]/ J
+ O2 \# ?: ~# h" [) p& T& T trace 01.txt,0,{tracelog "A=%02X ",a}
7 m' u; X B7 }( g 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 P( U# F3 V& t6 x* {! o 并且在每一行的前面, 写上"A=a "
* p- m6 T0 F8 f "A=%02X ",a为一个C语言printf函数常用的输出格式' }6 L- x5 {. N4 L- @# n! J
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入' I4 p8 C$ A) Z- M% ~0 _
X表示为大写十六进制数
2 Z5 x* K6 K$ B/ o( g& i9 y; R% Q4 q k1 {8 T
- J$ @$ T6 t# t: `8 {
3 b0 e9 M7 _" F8 k9 o' @- ]4 r5 h& e6 v内存直接写入指令: maincpu
+ e# S. u- X+ z 格式为 maincpu.[][]@地址=数据
/ i: v5 Z" p6 H! o2 t( s 第一个[]:- l: B) [% S( {/ o7 y7 M6 i
o 表示ROM地址
8 P( [4 Q) b3 ]" ?( }$ n p 表示RAM地址
3 i+ g4 h# h$ u9 L& o+ X* y2 D5 y& e0 L6 I4 q
第二个[]:
7 }. j7 [9 w: ~0 _1 z" }5 c# H" p d 表示4字节
2 }% A* b: s5 N% l8 O6 g* [ w 表示2字节" x2 m" K0 z5 l
b 表示1字节
2 A3 ^$ q; t: ~8 I" N" g* b% c! n, x* I$ k1 i1 W
例子:+ n9 D X% L2 X) x& s
maincpu.ob@1234=FF! ^1 C# b. j, O9 r0 G/ v) h
在ROM地址1234处, 写入FF一个字节
3 A% h3 d% z2 w% n
/ U6 t, C8 K1 T2 s1 q maincpu.ow@1234=4E71! h5 r6 N/ A: t. x! d, A
在ROM地址1234处, 写入4E 71两个字节
6 ], e; T9 B& M/ l
7 ], t8 _/ o e maincpu.od@1234=600A4E71
+ s) E. X7 C1 W3 O4 } 在ROM地址1234处, 写入60 0A 4E 71四个字节1 i, X/ r3 ]0 Q) q$ n7 D3 _! A
y* j/ X+ V: Q& x$ o 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ |! y B8 K; v. \$ {8 `* X + Z/ }/ E, i; i4 x0 ~+ j
5 \# ?7 R" z. _% F+ B7 q2 A+ N其他:: ?6 H* T, |3 p& `! i0 }0 |7 f
dasm 输出档案名,地址,长度# v2 j. e& e' P
输出程序的反汇编代码0 v7 f! g9 l/ [) v4 {' ]
例子:9 z, Z' T5 w3 @2 J7 ]
dasm 01.txt,0,100000
& S# R8 w, X3 b- J% G: \3 ] 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt6 i) h+ r2 e+ r' H
; ?6 p' M. W5 i3 t+ a- t
softreset! `& L2 |. q, M
游戏重启, 但不重新载入ROM/ ]% K( I" q. B7 m
: C$ r: }& e3 U: R" M3 T hardreset
8 J) r z9 X2 D' E, z# u) V! k/ R 游戏重启, 且重新载入ROM+ d2 z" V/ n! D! x4 U4 Y1 J( C
- P2 v3 s! T; O2 D# `1 F( R
snap xxx.png4 e- G% J; f# w8 _! N! O
截图为xxx.png2 y" G! F6 e- W1 ]& x/ b
) N$ Q" ~6 {" O+ e$ c- l: c, P. }
: W+ t$ G6 C% {6 ~ 4 H* o& @& e8 x8 |4 T
4 ~9 ?) U; U& \& Q热键:* \( k, h2 p* i! s
~ 中断游戏
8 B7 h. N2 D/ k% E F5 运行游戏
$ S2 Y8 c1 u9 L F12 运行游戏且隐藏调试窗口" d) e* f$ A' M+ P( f7 X/ b
F11 步入, 单步执行, 会进入子程序
9 S. D' Z. C: Q: ^7 G6 |/ ] F10 步过, 单步执行, 不会进入子程序; B9 [! S X! @3 {' A* b6 [7 M1 z# c
Shift+F11 执行到子程序返回
' h0 f1 [8 M/ C Ctrl+M 内存浏览窗口' J* H+ z$ }7 d+ F; m4 w$ Y* h! }' X
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ w" W7 s! H. j+ l
! @* a9 G4 B- {& E0 z) c( T{:4_94:} ( n& K$ e, |7 j5 W
2 V) V8 b$ B. |) o
|
评分
-
1
查看全部评分
-
|