|
|
5 \1 o3 P( b+ R$ L) t
很快速的整理我自己常用的指令2 u! T8 ?9 n% t5 c
! t* k" k# t3 x" C
{:4_112:} 0 X [8 D z' v0 A1 t5 f
0 A& q5 z1 F! ~' i/ A6 r5 b
MAME DEBUG常用指令
" @- I! h! P, V7 p' B; q' }: H5 V1 W& k% ]: K
内存搜寻: ci, cn, cl
6 y- g, O$ X1 w- g' H7 J. e2 e$ q% J
ci
3 n9 r L7 A2 @/ Z% c; K 搜寻任务初始化, 每次搜寻一开始一定要输入这指令/ \# R5 z# z# U8 B! j0 j
9 y: F: X* X% `( j6 g3 a& } cn. Y* {* @( l( {9 @* u
搜寻指令
, F$ h- k2 J7 e, X" A 例子:# f$ d8 u3 Z( I5 ?+ \% n3 J
cn eq,60
, z% e+ J9 w$ r3 x 搜寻目标等于60 (十六进制)
' U9 a8 U' f J # i0 B, {4 N+ D7 D
cn eq,#96
* U8 ?7 E3 {# V 搜寻目标等于96 (十进制)
+ n: q+ R5 m0 U: E2 U! ~! m/ N3 b/ t3 f% C9 S7 k! T
cn eq
- W% _- |. s4 k 搜寻目标的数值没有变化
# c! F, b" I! I$ ?% T; v/ [& K% \$ Z9 W. U& [8 i
cn ne
# [# M( E6 T) v9 i0 U 搜寻目标的数值有变化
: t# l* K" C2 p, I9 C: f, H0 h
# A; V& ]6 ?+ q j. | cn +
. x! C: _5 R) r3 B1 ?# S7 B 搜寻目标的数值增加" F% d# K' E' ^- |, z
1 N; I! @, t9 i0 Y0 w! K9 @
cn -
9 F- Y; s# v' L3 j5 J ]4 k 搜寻目标的数值减少
) \' q0 m) X: s, B. Q2 ]( P$ |
& d- Z0 ^% e$ Y% n) z; J( o cn +,32 W4 d, S* [2 u7 {
搜寻目标的数值增加3 (十六进制)
; E) w8 v! |0 G. c5 O/ b; F/ _6 s* t( f' i
cl7 J1 o9 u- a- E. \3 F/ N
列出所有搜寻结果; E) q2 `2 P: ?4 J: E3 V
~. a! T) t0 g. p" @2 A
cl xxx.txt$ ]3 j/ o8 K5 {. z4 T
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式/ M& U' R$ ~5 l1 S" ?. g
+ D. X+ n P9 Y! K/ M' g @
( ^5 S. N9 U$ u T. I. r" h$ L内存监视点指令: wp, wplist, wpclear
. Z2 p# y* w) J+ b- e) E0 V 例子:% `- l5 P) O. p% Z2 J+ d
wp 1234,1,r5 U" r9 K, y6 v$ v# L& N
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ W6 Z2 l3 v3 Z5 N* B. I( M9 v, Y
wp 1234,2,w- }+ g* K" P6 B# ^
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
. z( x% C$ x6 g' S# B( f. `! {
3 b! @$ `; ^5 m* Q& `! T# X wp 1234,6,rw
. \! O: X* R9 H' a6 l 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 O0 v9 f* Q3 P! ?. i1 ^
4 s8 f2 V$ ?9 W7 ?" e# e! O) X- X wp 23456,a,w,wpdata == 1
& X/ s: N1 P+ k+ j 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 Z) b, w1 z0 z2 I2 x# p+ A0 U1 a
8 Q2 ^8 I, s( m- E2 I wplist
1 J* d S4 n& Z( V( [* y 列出所有监视点" s2 P3 I4 u+ _% Q
8 m3 r x+ {+ p5 q
wpclear 3
+ r9 q/ @8 w2 S- z& H 删除编号3的监视点) d& t7 `/ y5 D8 q
2 k/ b+ s! _$ ]4 m/ i7 c wpclear
2 o: }6 M! C9 A) u V* v9 _ 删除所有监视点/ ?/ J; c/ L p9 W4 r( @. ~5 Y$ \
; A. l- I( C- O0 t: r% o/ c ; l" X5 T/ N5 t7 F
4 L7 L$ S9 o/ L) I- I程序断点指令: bp, bplist, bpclear- F2 w! M5 a2 f2 x! Z" R# ]
例子:& q$ Y5 ~' w+ I# ], Y5 x# D
bp 1234
% L a2 B! y3 ^: y: @6 x 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 y) M4 R' X! t; n8 C
+ e& k# l# P1 L# B0 |9 l bp 23456,a0 == 0 && a1 == 0
) R0 B! j; J; F1 n 在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 U# a9 v4 H+ K. | Y) j% M+ {$ Z. m" J/ Q3 U8 k; Y
bplist/ _; V0 q7 g q; M F, K6 \
列出所有断点
% F% G# ?" y" @, P( Q" v- W
+ x+ \8 h2 W# {9 r5 e# M bpclear 3
8 W) H0 N5 K6 Q% G 删除编号3的断点
+ p* v& A5 g0 \5 q: }1 O
, E, Y* A; [9 U4 o+ X bpclear1 ~0 t* \! J& ~# d
删除所有断点6 j( S# } u2 ^* }- v' Z
$ a& F; f9 q& \* h
& o+ H4 x. t" o$ ^/ o0 |! s; [ * K4 z) S- h c/ x. g& S
跟蹤紀錄指令: trace
" r4 k ]) ]' y7 f 例子:
* ], b4 `4 H8 g4 Z$ `2 } trace 01.txt
2 g% E4 X- _8 \3 Z) ] 跟踪当前CPU运行的所有代码, 输出至文件01.txt
* O# P' S6 b! G2 h8 Y
9 F# K; z5 I9 P trace off' X m5 W& G4 k. D {+ i
停止跟踪, 并且关闭文件, G K% }: n8 [, o. u8 }
; o& m. I, G i4 t7 c' `7 k5 y
trace 01.txt,0
5 S" B. K. B0 h9 \ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt5 d- n+ a e9 h+ S' [) g0 }
& r& n1 d* ~; s: ?8 D5 t( S0 S trace off,09 X1 Z3 ^; h$ c" j6 ] c9 r: e2 u
停止跟踪编号为0的CPU, 并且关闭文件3 D0 W) W9 @/ f2 `% L
v) S3 s; Z2 E
trace 01.txt,0,{tracelog "A=%02X ",a}: I$ c6 Y% l$ U0 U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , n1 O6 M! y: Q, J
并且在每一行的前面, 写上"A=a "
! W5 A5 W% M) D7 h Q6 k "A=%02X ",a为一个C语言printf函数常用的输出格式% r2 T q2 V- r5 Q/ A1 k6 k2 p. l
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入, q' P* }( Z1 p1 N. | G
X表示为大写十六进制数. b$ H! h9 e2 _$ m8 O3 ]- ~
& B, \, a6 h3 K" E) p/ o* C; q5 t m( ^% N
! p& G: {- h2 S7 ]2 u5 u7 I: o; p" z7 T内存直接写入指令: maincpu
5 {3 ^/ ^8 B! Z% N 格式为 maincpu.[][]@地址=数据
l8 {( V& @& F/ }* j1 u 第一个[]:
: G/ b" L5 |% M/ R o 表示ROM地址
/ \4 [% O1 C% ~ p 表示RAM地址% L( g! ~( z% r6 M
& Y Y3 I& l1 x+ y# z 第二个[]:5 k+ h0 ]9 O" i
d 表示4字节
9 a0 W. c% K' ^; g% w5 d w 表示2字节5 Z: f' P2 l- Z6 H) n# h
b 表示1字节7 \ ?1 f* U7 s5 t
; L# V; G# U* i6 q% t! c7 P4 @
例子:
" i% Z6 I& f8 [% o" b maincpu.ob@1234=FF
$ W$ H: A' l. O3 _7 a$ r2 S( i 在ROM地址1234处, 写入FF一个字节
% X/ K% H3 V2 G- k; |4 ]# g) E
2 C/ R' O$ O% j' p maincpu.ow@1234=4E71
; ?/ v$ Q' f+ n. m, s2 k5 x# j 在ROM地址1234处, 写入4E 71两个字节" \6 o) ]7 p5 f1 Q. C
$ z+ D! B4 N0 w9 J% z8 {
maincpu.od@1234=600A4E713 W& z9 u# x) }% r! j! \3 y
在ROM地址1234处, 写入60 0A 4E 71四个字节
/ h( U+ r# a# j( Z
3 i h* y' t/ X7 O 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) d4 S7 G5 p- a E/ u* g& d + V6 e9 Q2 P& I6 T9 n" d4 {
' P$ I/ F& t0 r; _1 W0 B3 {: U3 l其他:+ J& d6 z( V( z. L
dasm 输出档案名,地址,长度! j: O7 `8 Q+ [% I$ p+ x
输出程序的反汇编代码
! N: t, n1 |+ `5 ~ 例子:5 j- [8 u2 W& |6 o1 v8 r6 j3 ~6 w. \
dasm 01.txt,0,100000* u, L0 I3 M1 h, p) j
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 w2 l+ o% r! F2 ]
! L- ~3 q# \) K! W, Q; V: S. N softreset' l. Y4 t2 H4 S+ I/ r
游戏重启, 但不重新载入ROM
3 X- A+ @% s9 x
9 [6 U$ D" U$ \$ x4 U6 [! \ hardreset6 x' z) O1 o+ Y( w1 }5 s9 {
游戏重启, 且重新载入ROM
9 R! I- E9 ^: [7 d H+ ]* e$ C$ ]. j6 p# A# E# W
snap xxx.png. ^- `, ?- y7 J, J( l+ M
截图为xxx.png7 Z7 i; i; J4 ?; y- ]' { r3 s- n- j+ r
4 Q! G* L* j- `7 r! a
" W) _5 @# U% A) d/ o# K5 R ) }/ X: p' r' [/ O! c& W0 \, _0 k
4 o. z0 Q$ I) ]( ?热键:
2 Y6 |( S- ^/ V U ~ 中断游戏6 D' O5 y2 H4 S/ N2 ~
F5 运行游戏
1 a( l( h% s, m. J+ [ F12 运行游戏且隐藏调试窗口/ v7 x) t0 O, Y4 `
F11 步入, 单步执行, 会进入子程序 \$ A$ j2 x; \! o$ v
F10 步过, 单步执行, 不会进入子程序
2 T6 {6 X' M" r" U Shift+F11 执行到子程序返回, n$ f8 t( V6 p5 {' X" l; H1 W& _; _! {
Ctrl+M 内存浏览窗口
s% c, t7 A7 g7 o F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" H( m4 B8 e3 W! x% M' a& F' {7 t; O$ e2 _ X
{:4_94:}
1 g0 c/ \- q/ d# ]( H! S% y- l8 Y6 R0 B1 j/ K7 W
|
评分
-
1
查看全部评分
-
|