|
, [! @! n$ i6 h' b& O& O! T很快速的整理我自己常用的指令
9 _ R4 U) S; x. |; M( P
. n2 C* [$ Q( c0 H# j5 ]# s. s{:4_112:} ! z$ L8 I" R7 \
3 ~7 o" m0 E) }6 w7 A
MAME DEBUG常用指令
+ R% @+ p" a- t9 m$ P, k7 D$ l: N
( [5 k& B& d8 H% J2 s" C) j" w) U内存搜寻: ci, cn, cl
( b4 t/ E" ?) S' u1 _' b+ E9 k6 v- o
ci
- m9 K: W( K( { 搜寻任务初始化, 每次搜寻一开始一定要输入这指令* X1 E" A8 L6 P( S/ H- }
/ j: A! n! b1 ?( p cn: |( n7 n+ s- [) Y
搜寻指令" ~0 A0 D) w9 s8 R
例子:. r0 F3 |% P- Y( K* R5 d2 o
cn eq,60
9 O/ \# F S% p+ O' x8 e 搜寻目标等于60 (十六进制)
% s1 }* x7 F+ A8 n3 `. m
; R- P7 V" L% W9 D7 n. l) z cn eq,#96
3 E- a' C' Z$ E: q7 R$ q: |" F 搜寻目标等于96 (十进制)
! d. g$ ~0 u/ y2 Y$ }: a. p. ]* S& z# Y8 m: T$ j+ T7 ?
cn eq0 S: E% l7 C2 y: V0 q8 ]+ X9 R+ @
搜寻目标的数值没有变化
2 ?# y" m7 A8 I. X1 X# a
, f7 ?0 B! G ` cn ne
5 A9 {3 ?" q# |' M& X 搜寻目标的数值有变化
" |4 R, t7 S& f$ x+ j2 y $ J6 `- C* x$ I3 z! M B0 F/ R
cn +' z( @) F O; Y1 y5 j% \
搜寻目标的数值增加
/ y' k0 d; Z G0 W8 V& @. ^: g
" n1 [7 j, F, T cn -* f5 w+ A. c8 D
搜寻目标的数值减少
4 b. ?9 [0 A( X- h" t/ ] . J" [0 I8 x+ ~
cn +,3; \* ~0 X* q* [: \
搜寻目标的数值增加3 (十六进制): U/ ^: W# ^/ d8 A5 i6 B6 ^6 q
u/ o6 |9 [4 U cl
$ w3 P, H& f+ \' z8 P3 J8 s 列出所有搜寻结果
% E% n6 n R1 j8 I) [3 W0 Z
, y- n- s7 Z# q' F7 l1 Q cl xxx.txt
3 \& c* D% l9 \$ | 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
D. q: X% L2 q
# v' z) |0 ?4 m5 A0 W 4 G* G8 M* K; D( _: }
内存监视点指令: wp, wplist, wpclear8 m9 c1 n* i( o3 h# C; n. K/ C
例子:
; o$ }2 T4 V' T1 A wp 1234,1,r- s# E9 H) a \( p, e; ^
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 j* j% K% x$ J6 s7 I$ t. }; }& V$ t, d3 V" B b& \$ T* ~# Z W
wp 1234,2,w+ v- }' Z6 z" @6 B
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ m2 P0 b7 O" [* z" D$ m- c! [* `8 X
# U# y3 V) x' C) }: \2 H wp 1234,6,rw
4 f! g t: ~; ~0 A 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
$ w5 _+ \3 l4 N+ l* R. u- m3 g0 Y0 U- d* J
wp 23456,a,w,wpdata == 1
& M* w2 t& K2 }: b 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" l' B: j. `9 _! @/ d
' b% P4 E( |8 f O wplist
! G! T, i8 a9 E5 ]% I 列出所有监视点
/ Z0 ]4 W- i; ]* u$ q
" v. [/ y4 `. u, S9 m6 r8 K wpclear 3- C" d8 O# m5 P4 D
删除编号3的监视点9 y: v/ ]+ S7 t" r8 S. U* ~& S
* V) q; y. n* B- f/ V. m+ f
wpclear
! X9 b' J1 q+ O& `+ T7 X 删除所有监视点" @9 h4 D8 ?0 S4 X
; g" u1 L2 Q7 G- S
6 f* G; X2 V" i
+ p: E9 w1 B& K4 I程序断点指令: bp, bplist, bpclear
+ u9 X8 g" B) ~. d h. n0 `4 K 例子:1 ]5 p3 l# z+ t# `" I: `! E
bp 1234
+ u- L% n! \6 |0 k3 K 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 d% a4 J W# v3 ?' K
5 @ ~/ J7 U2 i bp 23456,a0 == 0 && a1 == 0
1 Z" y7 `/ ~) { 在地址23456下断, 且中断条件为a0等于0以及a1等于0) s0 o/ b9 g, I3 N/ }& Y0 Z- I
/ d, `) a* w2 `3 w
bplist) J( N, ^6 b- {/ M+ ^# q E, q$ m
列出所有断点
$ p, \8 x3 C+ ^. {
( R( E$ G* ^& U* T5 e0 c bpclear 3
0 @" i9 p+ b9 D6 b8 {& Q 删除编号3的断点/ D* G. B* `9 V8 e- @
' t L5 ?8 v. [5 Y bpclear2 B5 g! H f: l+ f# x
删除所有断点
5 ?+ s V6 m2 v9 P$ G: f
% k; r. }. {/ r8 ?: Y# P I ; q/ t/ y9 o; M: Q: h
- [4 F _4 H" Y p: I4 x跟蹤紀錄指令: trace$ @4 ~% }/ R6 p3 t |+ @
例子:
" i8 S: h, N! W' _) Q- _; X trace 01.txt; d+ c* x5 o9 x& I0 R- ^ E
跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 @+ b n! c0 o3 p) O
/ M$ y8 x. K5 W( a8 P2 l2 m8 p) |8 { trace off. S7 E( y1 Q5 \6 x1 A2 d+ x5 F+ \0 A6 T
停止跟踪, 并且关闭文件
+ D0 z9 B- V5 _3 ^7 k* e* n4 m2 p6 E( R5 S: q
trace 01.txt,0
0 J" m$ p2 z/ t9 V, ?0 _% p 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" M" B0 i) K* M3 B6 m4 K3 _
p! W) s1 p+ A- K p; K
trace off,0" p) r$ o3 H" o! Z- y T
停止跟踪编号为0的CPU, 并且关闭文件$ K% g* m" ?' B
5 d( u# G. V' Z+ ^
trace 01.txt,0,{tracelog "A=%02X ",a}. O* q$ d* j) j4 L4 m! O8 n% \
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ; U( \, A& J/ m: z( |8 ~
并且在每一行的前面, 写上"A=a "
8 u7 w+ f; }0 Y "A=%02X ",a为一个C语言printf函数常用的输出格式
?5 i' A5 `: \ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 X% F4 d" @3 n
X表示为大写十六进制数
7 h1 b: i( q0 N+ T, |+ T5 w9 z. H6 O' }
5 p, `* R* r- Z9 K) }
5 Q% f4 F7 l8 t; Y* r内存直接写入指令: maincpu2 n8 b* V0 Y7 t) L2 \" ~! A
格式为 maincpu.[][]@地址=数据/ c# Q, [* I* l! R1 w4 I
第一个[]:6 [0 O0 {- s, d6 s( |: G% O
o 表示ROM地址8 V3 A g3 q1 M4 E9 j9 Q; ]
p 表示RAM地址
) B, u0 h9 O B) P
4 _6 k' ?) t* G+ @; L( q0 N6 u9 D* y 第二个[]:
) @7 {8 ?1 e) f7 z% p d 表示4字节6 O. G/ t& Q! s% V% u$ _1 z
w 表示2字节
+ k! n' |4 z) E9 @ b 表示1字节1 j0 }" } _2 {$ }
- T" ]" k; r/ |5 _; l1 t9 b: f3 c2 G7 T 例子:: I4 x6 N/ ]( S3 @" i
maincpu.ob@1234=FF, h. \8 y4 N0 [! e% U2 V6 Y8 t; a
在ROM地址1234处, 写入FF一个字节
: P5 q$ q# y3 p4 Q6 U' s* v
H$ a. Y0 C4 M# Q, s6 ?; m maincpu.ow@1234=4E71+ X$ Z" v% q& M) e
在ROM地址1234处, 写入4E 71两个字节
$ W8 l. a) I; R" q
/ S- O0 ^( b4 Q. |5 P maincpu.od@1234=600A4E71
2 q7 @ S2 e! T' Y 在ROM地址1234处, 写入60 0A 4E 71四个字节, x' p9 p. I/ y6 Q2 J; f
* M, G: Y& k- ^5 P5 b* [' z5 f/ w Y4 D
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
4 r$ B6 n, G5 L0 d* `! J
: [" a r/ e5 b: x! J( n7 T; ~- L, t% K9 m
其他:
! a) j2 Q& U, k ~6 C; Z/ Q dasm 输出档案名,地址,长度$ Z4 T8 E$ M1 {+ t
输出程序的反汇编代码0 ?2 F8 R H" C8 C& {5 l2 b2 a8 a D
例子:2 M$ t& f2 w6 O' ^, \. J1 w: V
dasm 01.txt,0,100000
( z, X2 q) o" y) ` 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
# T; [0 d; a3 r2 Q
8 Q0 \; Q% M, U0 `& T softreset) m' @) u$ l( `' P8 m
游戏重启, 但不重新载入ROM
* ^# u: T) ]: A1 T! y; C& T/ l" t) @$ |
hardreset
6 f2 z5 \: P2 Z3 w, R 游戏重启, 且重新载入ROM7 i/ N/ g- K# x# {' Q) M) }
' L5 Y5 W6 ^7 M* l/ }# H$ v snap xxx.png, ^! q+ s- E Y% \$ \- x% O
截图为xxx.png
3 J" B; X0 D! f" _
6 y0 r% Z& d) ], x. f* f8 M; S" z
" s. [4 f8 m; s$ K ( E0 X3 i! c2 M5 y( o) {/ e
9 J5 E" U5 R; _热键:
$ G& }5 K' e9 ?5 R ~ 中断游戏9 C. D5 i& E. Z$ D8 S. w
F5 运行游戏
/ A+ l: f8 Z2 j1 ^& U6 L F12 运行游戏且隐藏调试窗口+ j+ y! L9 R: L$ p4 c1 L \
F11 步入, 单步执行, 会进入子程序
. d- H* ? u" ]( R5 g F10 步过, 单步执行, 不会进入子程序9 G, W, ^! V* d
Shift+F11 执行到子程序返回) H# s6 k7 ~. w6 [9 y Y
Ctrl+M 内存浏览窗口& D, H( g; O' ^- c
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# h; k% f& o! _5 o/ F$ K+ Q% n, f
# o: l& G( q8 y u/ r" H( U{:4_94:} # G8 _- Q. V/ i5 m
+ g2 \0 W; x% v8 ? |
评分
-
1
查看全部评分
-
|