|
|
9 [3 V. U# \9 z1 H# m l! s很快速的整理我自己常用的指令( ~! R) F+ P! f- C
% ]6 W1 n" F$ H G6 T' o, x+ y
{:4_112:}
5 I4 L2 [. e' T, q, [# u, f) P; m9 U. X8 t0 \! G* z6 s6 C
MAME DEBUG常用指令
- s8 e! g- G+ q2 Q4 G' f1 O$ w/ v/ |& e" \
内存搜寻: ci, cn, cl& }: G, U- Z8 g
) C* _) R8 j* N; H; F* Y ci) r; I/ M6 \; |1 I% D+ ?
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: v+ U3 v+ D& M H+ N3 e- m
- U5 y( b) g, J$ X* u cn
1 T& R) I- G5 w 搜寻指令
4 M& z5 H' e8 R 例子:
. j0 C8 h* y0 Z2 W cn eq,60
# n) Y& q0 b; f4 b# s4 G$ }0 \" { 搜寻目标等于60 (十六进制)
- x8 c9 ?+ S2 V* b+ \# J 1 G, V. D! n9 } c. v7 r0 c* r, t {* r
cn eq,#96
: q, u# e: [' J" m- Y: Q( G 搜寻目标等于96 (十进制)3 Z y, u) w- M
$ a0 `/ e$ \3 e9 ~4 F) J
cn eq
" W/ n2 q. y3 i- @ U- R 搜寻目标的数值没有变化9 J. |0 `6 f8 m, w5 }
& n* b: `6 H6 ~8 s! x. C d cn ne$ I% p, c m) F. f% y3 I, p5 w
搜寻目标的数值有变化8 C+ [8 J0 S! w# T
( M2 D& r, W' _/ G/ X/ I( P
cn +7 @# ~7 o& o# r8 C2 Y6 x, Q; r
搜寻目标的数值增加: D6 t, Y* p* j; @
) X1 A# L3 W; ~) e/ i
cn -
]6 A- m. Q0 M% R 搜寻目标的数值减少, }: {- v% u9 i4 f, d
, M2 }% W# {1 F
cn +,3
. ^' c$ { j; c2 U4 ]8 i# w% i 搜寻目标的数值增加3 (十六进制)0 ~$ \$ j, j( I: o
7 z. {- E. E! p$ k7 { cl, b: ]5 u- Q" w# M
列出所有搜寻结果
" s: j! d- M; G# {$ W& ~
) R) w; i' H. Y8 L$ K( i0 ? cl xxx.txt
& T" h0 U9 k3 L/ Z) e! d& h 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式, S0 w/ P L* c2 g9 s" d: j/ G
6 w0 R. }( w5 ^# G
" p$ [: r O) v) S( V' _
内存监视点指令: wp, wplist, wpclear3 g1 x; Q* T! |7 M
例子:: P2 `' N: B& z" g- `1 l9 \
wp 1234,1,r
$ i2 S& J! @- z, | 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1 L' q. a: f3 i+ j
) X6 w2 \ t7 a' A. H! C5 _& ^
wp 1234,2,w
) W$ @. x, u4 c, c 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2) f! x* t$ x' d. L
3 L) G4 }- a* j! R( V5 d wp 1234,6,rw
# D5 Z8 Y0 G: [* s9 l 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度63 o& u; b3 f: j0 _6 D3 d, B
( ?5 S' l9 P* y+ A% G0 P wp 23456,a,w,wpdata == 1. |* T6 t0 t1 @% ?. }; q0 {
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 I* ]- t% e/ o: j; q/ X1 c
/ T( x: m$ B1 C1 A3 m5 a* W wplist. T, x- l9 ?: G7 _5 v
列出所有监视点/ z* S" n) R' ?
9 F) e( c$ L1 y' L
wpclear 3
4 J; b$ k$ y' P5 d 删除编号3的监视点1 v. `7 k3 K* P, V; }
- Y7 G: g) W r! [- _
wpclear! k" g6 s' X/ a$ m7 V7 ^/ o
删除所有监视点) V9 Q4 y% X6 b# X
) Q6 b3 J- H- M" b" f/ i& b
1 `0 _) `# }; k# `* P. M
( d$ n. t* Y( F- I- g
程序断点指令: bp, bplist, bpclear
! e2 k9 m, H) z! `& ]5 d 例子:
* F: `6 V, L. x) @ bp 1234
4 T1 Q( s3 h( { 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 A) f8 J- o. Z
# p" j! ?1 X2 C; k8 F bp 23456,a0 == 0 && a1 == 0* m X3 R, a" v+ O) b) T3 V
在地址23456下断, 且中断条件为a0等于0以及a1等于0
$ }' ^4 [1 E; S) l$ G6 Z
& D- y! ]3 P: B! E! f bplist
2 O6 a, U) C- s# @2 Y 列出所有断点
% n" h8 O. f1 X+ ^/ ^
) J) H; Q9 S! J5 j bpclear 3- v j$ w4 U) N, x% \. o
删除编号3的断点7 J5 | a ^" @% f
8 A6 L5 H3 {9 j$ T# U9 g* V bpclear
2 Y8 O' W; U/ y+ n! n+ r' _* |7 T 删除所有断点, J5 u: I- _' c& D
0 w' D6 }( L* _9 f [8 [3 A2 v+ {! L* S
; ~. }! B3 C y ~8 n跟蹤紀錄指令: trace7 g+ ~" Q. S, a7 Z
例子:
" ?8 r' X0 V/ X$ j1 R4 s trace 01.txt
& m4 }6 X2 w! ?# A- @' ]* [0 s# w# H3 a 跟踪当前CPU运行的所有代码, 输出至文件01.txt
, h. K# a1 B, U1 i2 b& [
* e. P I H6 a N# p* j# R trace off% z1 G& K! S4 G1 b
停止跟踪, 并且关闭文件* H! ^! T% g" l
( @2 w3 X/ l0 Y+ y0 _
trace 01.txt,0' R+ N' l" G j: S2 L4 }
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! l( [2 a [' q
! k7 x& ^* l1 C+ G trace off,0
D5 k9 o' m- ]: S3 [ 停止跟踪编号为0的CPU, 并且关闭文件
6 ]: o! T. _! ~/ d% Z% ?9 i/ \$ f# i: Y+ ?% U
trace 01.txt,0,{tracelog "A=%02X ",a}% H1 j8 }" z3 H& z- r2 ^
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt . ? x( h% E! d: f+ Z
并且在每一行的前面, 写上"A=a "% k5 G7 ^1 L" ]+ K! l( l; G
"A=%02X ",a为一个C语言printf函数常用的输出格式
4 l2 q0 ~, b7 S( ]$ O1 J8 p 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
8 T$ ]5 I. P9 Q$ G2 T) E/ z X表示为大写十六进制数9 `; h) Y3 R6 D/ d$ v5 _: Z: h* Z
; W5 c, H2 O+ T0 x0 W
; w8 r% H+ R: h4 w* e/ \. d
6 g! z8 s& S7 x. H内存直接写入指令: maincpu: ~1 x8 e5 r& o' @
格式为 maincpu.[][]@地址=数据
0 J3 l, b) U+ `0 K7 ` 第一个[]:, e; }: n9 m0 ]
o 表示ROM地址
5 w7 a- H& i* V) |1 b p 表示RAM地址
( ^0 z u' L8 x7 O7 F$ N7 W7 K
# q9 ]1 S& g2 P$ A5 J 第二个[]: Z* Q6 V* K% }# l7 x6 _
d 表示4字节) k( u: a; O( q3 u4 L5 K
w 表示2字节9 @& h J- [' @0 D! {7 X* D" h" V
b 表示1字节2 Q! ^1 \- b# i+ R) w7 A
5 S% \ c k8 x( s5 E: f
例子:
; f' { `/ l7 j6 b$ I# L maincpu.ob@1234=FF5 ?* C: i- K h) R2 O( L
在ROM地址1234处, 写入FF一个字节% W2 S6 \6 f, }) [. O n D
- c2 K- L- ^( e maincpu.ow@1234=4E71
; }$ A: A5 t* d& z7 Q 在ROM地址1234处, 写入4E 71两个字节
( \: w: j) ]: a6 Z
; N& Z1 y" [! e# X maincpu.od@1234=600A4E71
" n) C- W1 }" w) G% E" Y2 h 在ROM地址1234处, 写入60 0A 4E 71四个字节5 F6 Q6 i4 r% m' i1 d3 V
- t4 `# o* u% B5 U' w* i* [
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* b1 R* Z; v: _2 P ~) s5 s* Y
/ V4 R! B) z' {
8 v% y/ r; ?4 n其他:
3 Z1 R7 q' T+ ?2 Q2 w dasm 输出档案名,地址,长度
! a; v* U8 D# M% W& _, C) m& W 输出程序的反汇编代码; R% n$ l8 V4 h: y5 h4 w6 X
例子:
9 y6 Y! X/ h G1 l+ `9 x dasm 01.txt,0,100000
+ ^/ l" C Q, L. Q 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
3 \8 q2 b/ x* t, T5 v: U5 d3 T6 I; ]8 Y* o/ m2 u
softreset
7 n+ ~- A' z& s3 M/ V- E" W! W: `0 e 游戏重启, 但不重新载入ROM
v0 D/ Z$ w+ z, N0 w' N5 N# f8 A% o. K6 y! ^/ z7 y) H' J3 r
hardreset3 K/ x i. J- n& Z
游戏重启, 且重新载入ROM
4 V# W" H% e8 M
6 K5 e. x7 g1 S" y s5 y snap xxx.png4 K! C2 {* y t' ^ D
截图为xxx.png
; Y( b n+ A, Z8 m! h8 Q0 B; n/ z, ]+ K) f. l2 w% y% t$ x
' `- B3 ^6 V% I6 E+ k5 t4 J
% s, J- j+ A- b. M : I. n$ T, c+ T1 Y5 p
热键:8 v. n3 b: O5 `8 n. z9 ?: f" m
~ 中断游戏& j, y$ J/ n/ \& Q
F5 运行游戏
, u6 B4 \0 H: B' Y0 o F12 运行游戏且隐藏调试窗口3 z( f" K/ t$ p
F11 步入, 单步执行, 会进入子程序) j9 j- x U2 v: M/ d: y
F10 步过, 单步执行, 不会进入子程序
/ p3 Y$ q. N8 Y5 Z Shift+F11 执行到子程序返回& n( `2 |, Z- v* C
Ctrl+M 内存浏览窗口
3 W# I8 K$ Y. `: l* s# W9 [ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 n8 B9 p( E& k( D: L$ I) g1 K. c5 ]' n$ D: C: }( y
{:4_94:}
; n+ g$ e3 W' L- e0 O0 O
: ?% I9 {% |+ {+ y- x |
评分
-
1
查看全部评分
-
|