|
|
% j2 ~9 L" F( c7 V3 |6 c( M5 w
很快速的整理我自己常用的指令
: I3 r B+ R/ o! B
s7 J/ r& \; Y' [: v; G{:4_112:} 8 h# \- c" q& l( z+ k2 z) [
v7 g4 i( H; J. P& J% R$ X# ]MAME DEBUG常用指令
@9 ]& ?5 N: D$ M4 K. S2 v
$ U: \+ Z2 ?& S; ~2 v- z5 ~内存搜寻: ci, cn, cl" u( U5 o1 x3 H/ G" L
0 p$ x3 \, c w# z( @+ @ ci& K3 m& B: x) M) s- `
搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 D% K' ?% f5 m- Q3 U+ u
6 b: Z! d& s8 E: Q9 @ cn% U. U7 F ~# J, W# i- F/ Z" t
搜寻指令
/ h4 r6 Z, y f) O/ f 例子:
3 Y7 [3 Z6 {7 I cn eq,60
2 E3 }+ D) e7 B9 }$ ]8 N! m* _ 搜寻目标等于60 (十六进制)7 G9 n: B, B$ n6 z' k7 L# Y. L8 O
& I( J' n& R+ o5 N- Q cn eq,#967 K" @# e; ?8 F; ^. F x3 C
搜寻目标等于96 (十进制)
& k) {$ S3 t, b3 `# {+ O
# V) _) z _* l/ w9 p. x3 ? P: ?7 R+ w- g cn eq
6 W P" x- F% v" g; H+ G+ f m 搜寻目标的数值没有变化
, V9 l# o; E# Y" p$ U: U9 A J4 V2 V- ~) _' U
cn ne7 c( e% c9 W9 K( j9 Z# i: |
搜寻目标的数值有变化
) q- m$ y0 y a: o . r# @1 k& h% ?& V# z2 k' s
cn +! R) X4 N2 o' x2 ~0 r: N. E" R- V5 l
搜寻目标的数值增加
5 W0 {; o$ }& x" u9 e& e " I4 l* S! J7 T0 |" Y
cn -2 x J" z& Z4 e" U8 s
搜寻目标的数值减少 x% U$ l T2 F# B
2 a3 i; _# ~6 p% h, W$ b, u cn +,38 J* y3 R, o h3 V+ H
搜寻目标的数值增加3 (十六进制)
' G1 Z8 n+ o8 x& f5 R- \1 t% |( U
: [% x, j- H: z4 `2 G cl: u$ T1 R& B, q
列出所有搜寻结果
# r9 v- D/ D- Q/ l% T5 S6 p8 d7 R' a
cl xxx.txt
5 @5 m9 M+ b; a; O% ^4 B0 I 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 S3 \/ w" |% r& s6 r
* z) ` C& [; x ! Q& }2 A) G( A1 V
内存监视点指令: wp, wplist, wpclear5 ~8 x9 `, ^" F$ ]0 r
例子:
2 K H- j9 E7 z0 T; k7 x wp 1234,1,r8 ^6 c0 o6 F0 I4 _8 a, Y! O
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 g! Y3 C; W; w) O: n. [
* n: L4 |7 A' P. U Q2 }/ `+ B+ N2 i
wp 1234,2,w
% y) l" D: O4 p0 L0 B- V 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 h, I" l: I D% b9 J: | ! P! A( }; {8 _
wp 1234,6,rw) n. o( l( N7 C. i3 R/ H2 G F
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 }* H q2 e7 Y" T2 \" c R) ?6 N1 M/ n
wp 23456,a,w,wpdata == 1
: \0 w; B# H1 b) a9 t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 [3 }% T |: W; C
9 l# P6 c3 T9 Z4 z2 L% |6 m( w wplist. y/ O W1 k7 |) v9 e
列出所有监视点
, n. o9 f+ r) t1 z+ f- ?, D6 a( I+ h0 o* Z
wpclear 3
S: l4 ~3 ]( x9 o' Y2 E. p, [ 删除编号3的监视点: _2 ?/ d) C4 e0 Y( f1 G
5 e, \. Z" ~/ C1 H5 i$ E0 l wpclear s) _( w9 s, T! K% C
删除所有监视点0 _! P- k6 r9 t# o1 C
" U7 ^! i% X- E; l1 Q- ]: N
5 G. S5 B5 D) n- f2 a; l: J2 R
" T" J. @2 {3 A% {' K程序断点指令: bp, bplist, bpclear% h! |( C+ [# N
例子:( C" v1 G, w/ |" _4 N" {+ O: W
bp 1234
) ?' J( L% ~5 x$ E; E& y. P; Z 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
% B* M0 H% T3 y( ~# a1 A
6 J# Y$ ?0 _0 S# ^* R bp 23456,a0 == 0 && a1 == 04 N& Y2 h$ M, g% m" f
在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 W- o4 D! s2 j, v7 I2 ]/ ~
1 `8 i& B) m5 y/ D; T* U bplist/ R8 x" o* `/ p+ P( o" j x: i
列出所有断点
- H( f- w6 z: D7 d# e" ` ^6 h* ~/ i5 \' `/ v- g; r% j! @
bpclear 3
, J2 t* v& V Q/ p6 z 删除编号3的断点5 a, v# `: S3 `/ y8 O3 t! J
4 [' Y0 o+ u" m0 X, {- x
bpclear: a& x/ t Z) F1 }
删除所有断点
+ k; m9 ^; v6 Q1 ]7 b$ f4 c; p# [$ x+ C3 j; P+ X
, X: X2 o- W, h6 l
& e- ~; r0 P W, B, Y V' N5 m0 N跟蹤紀錄指令: trace! J! q$ A' C5 W9 X& A8 e
例子:1 N/ [ G# f0 `
trace 01.txt
8 A4 a9 y# r; m; n 跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 u7 U, r. U# i- c$ w9 V7 l7 [ z3 {
trace off" ^) }; G8 E3 K2 _
停止跟踪, 并且关闭文件
- E# y5 \# v+ I( A2 V
; X/ }3 s! y% \& t3 Q* P3 S; a- O trace 01.txt,0" ^( v" h$ t$ d7 o5 s1 C1 O
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. K' {1 T) H. a- [; D* ^7 M
) m; H8 l* r; ?$ ~# F trace off,0$ T5 X# q9 @7 g4 M) S+ y% p% Z5 y
停止跟踪编号为0的CPU, 并且关闭文件
: ]# D& j* W4 a+ d* z3 G @9 q& T9 w( J
trace 01.txt,0,{tracelog "A=%02X ",a}
* g7 X$ D6 V7 @0 ]4 Z$ m* Q8 L 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 5 h$ ]' E! X+ e
并且在每一行的前面, 写上"A=a "
" s& f! F' H; A "A=%02X ",a为一个C语言printf函数常用的输出格式
8 U+ d, v2 O* k6 R 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! D2 z9 R; O# k2 w; J# c4 `
X表示为大写十六进制数
& \2 ^" }+ h5 @+ v: j) `, y5 \6 w7 M3 r9 G+ v
) \9 ~, b }. X; g- ^+ S. a
, r9 R8 G3 L5 X# n
内存直接写入指令: maincpu
; z8 H9 s$ O+ E6 _$ x: I- ^, E) z 格式为 maincpu.[][]@地址=数据6 ?/ i, V3 l6 t7 \) u2 f9 f/ W! Z
第一个[]:6 v6 _) J) A- g
o 表示ROM地址
- l/ w/ Z% {# o% N+ F p 表示RAM地址
- Y1 c# G4 g* s' Q) |6 P5 ]) V) m3 F
第二个[]:
8 m, i J- C a$ x d 表示4字节8 C5 ]( e/ J: a& [
w 表示2字节
9 v" d" f- s6 l/ i0 Z b 表示1字节+ L( ~$ S3 S9 D3 Y# o" T$ t
4 z+ U, A; \# v' v7 q. Q
例子:
/ P6 A( z8 p7 D- W maincpu.ob@1234=FF
4 } X7 A, r, h! |% j! V 在ROM地址1234处, 写入FF一个字节
8 l4 L8 I3 u6 `
% I* t! l1 ~9 J( Z maincpu.ow@1234=4E71 F" n: D5 @" p1 s* G
在ROM地址1234处, 写入4E 71两个字节
; g2 _+ V6 E" ?: A6 b+ P$ G6 o D5 ~6 G# u# K' t) X$ a2 _
maincpu.od@1234=600A4E71
' A" v6 {7 ~+ S- Y; w4 `- ^ 在ROM地址1234处, 写入60 0A 4E 71四个字节% u) I, `8 f' I, L$ e
% v3 f8 f/ W) }3 G 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% j* k8 G* P o6 n7 G1 k, w ; a; U7 X( V2 H- w! Q
- u' i/ R* s0 o其他:
2 v, R) ?9 W6 R. L! I dasm 输出档案名,地址,长度
* D$ x, I% A$ n5 S: R 输出程序的反汇编代码
1 B `0 D- n+ F( }8 f) w 例子:- x/ W ?( i9 ?2 g) {) L) P* F
dasm 01.txt,0,100000
4 G# A! \4 h, r 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- T& C; `2 U( U; J
# L% f" r/ x; w0 u1 } softreset. A9 Y) V# x, }/ ?. Q
游戏重启, 但不重新载入ROM
. h5 k/ p) @/ J3 U; W+ l- ?0 h0 |) ^1 G- C# p
hardreset
; s8 V, F& l% v; f# X, S7 H1 d6 O 游戏重启, 且重新载入ROM
% H3 b' [* y5 o) `+ x
- o/ A* U6 ]+ u snap xxx.png
: k3 Y) n5 K4 ^$ e H, P' t 截图为xxx.png% K( D( S* n: K) ?+ `0 E9 B# F
8 a& q; ~) B, S) L; E
& I, O: A5 P0 C( ]+ h 8 |# _6 E4 F y: i
! O5 D- Z2 [1 q/ w1 t
热键:2 k2 \/ o/ b* }. M( y
~ 中断游戏
- |' Z5 T6 P, g. `* ~5 I& J8 B F5 运行游戏0 b* D+ P- }% w, o: ~* {) X% h. f& k
F12 运行游戏且隐藏调试窗口 m" E/ p% P( _: g
F11 步入, 单步执行, 会进入子程序
+ X* T$ e1 {+ p8 I/ }. X F10 步过, 单步执行, 不会进入子程序" {1 R0 p M% e3 A3 j0 M
Shift+F11 执行到子程序返回
; G0 \- n8 E5 W- B b Ctrl+M 内存浏览窗口
( M; u( f1 d5 ?) }' }2 H/ v* n- W F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; i" b& J2 |+ ?2 O. e
4 M: J1 P/ ]! @{:4_94:}
7 n% _; d' H# ^5 w! s9 ?1 G8 n
|
评分
-
1
查看全部评分
-
|