|
|
x8 o. i8 U! p" J
很快速的整理我自己常用的指令
: q3 H2 u2 j( \9 |* I% V
+ B" v0 C! f* ? \" w& M1 X{:4_112:}
5 y4 w2 V/ V7 I$ }
. O. u3 t3 q- z. C2 [1 B6 X2 ^( b$ {MAME DEBUG常用指令
- D6 {/ d& j! K8 Z/ B% K9 ~ w# @1 V8 ^- M5 f) I; g7 e
内存搜寻: ci, cn, cl. O& V0 r' x. c5 m/ [( N: f- b
3 j d4 A5 [8 r* r ci6 }) O3 I& ?0 F
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* B7 c- [5 ]" E& ?% a. Q# M* Q: S! o: i& O: e5 \5 P, j
cn
! b4 Z( I' O6 v- U, H 搜寻指令
! b" R# r3 T. K: q- ^( |3 K 例子:
/ P: o, L8 R+ G4 _, a+ h; D b# r2 t cn eq,60& B4 X, m7 W5 J8 r$ R8 J+ Z. T1 R
搜寻目标等于60 (十六进制)8 r% t% j6 `+ G# A) e
6 t2 j1 M- `# O4 Y& V2 Y
cn eq,#96
9 U5 w: B7 r6 ] 搜寻目标等于96 (十进制)
* c L T" H; x( _& k# e3 u3 M/ L( m: C4 q+ z/ v7 }/ a; W. h4 l
cn eq
% l) X6 ~) W4 \9 U$ I 搜寻目标的数值没有变化& m q3 _2 V3 R3 V3 }
" B: B' I" q8 v3 V, v% V cn ne
" g% \5 j7 Q, m# ]9 z" Z, n2 m 搜寻目标的数值有变化) @8 ?. P0 s# b
' d9 P8 w1 f- I; \ cn +
! ~: D- O8 D/ i) A5 J D 搜寻目标的数值增加& N' u1 w6 I& o$ N6 \" T
* ^7 D3 \( |8 S cn -
; Z. ^/ {# ~. E' D2 y' S 搜寻目标的数值减少
; @* D4 ~: d. }0 N. D+ F
, |) q( A \* J( S' Q" Q. P! V" ` | cn +,3
$ {6 s/ [$ p7 @ 搜寻目标的数值增加3 (十六进制)% [5 J( K2 N) `! H& e8 e) |
% t, p# ~) x! n- ]5 O cl# K3 e5 W# v5 J5 p) V$ I/ a
列出所有搜寻结果
4 y. k$ V+ N3 M+ ]8 u: K/ @+ N* n9 S1 S/ R; q/ M! n
cl xxx.txt
' D2 @4 ^+ \8 s4 Z 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
2 l& _& K, v/ G- y, o h* D. K1 p; X5 L7 G
$ L4 e% n1 ^+ p4 d+ B4 `! Z! v内存监视点指令: wp, wplist, wpclear
; R2 U5 w" N7 O! V 例子:
) [, n% ~, }( A0 B wp 1234,1,r1 W0 h& k6 P0 a5 [' u
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; u2 u& T1 O# |% z0 P) M' @
& B* e+ M. @: l+ e4 U" }% P
wp 1234,2,w
- u1 ?! x9 O. w 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& s+ S! w) l. H # l p( \1 H0 x, C
wp 1234,6,rw& z. V, ~' @: r/ u
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度65 `" d5 P8 h- I! n' i- R
0 e5 g, r8 w% g/ r8 i wp 23456,a,w,wpdata == 1% f0 [( n, r+ |' |
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" B+ w% d2 J- \ t4 s: ]0 I9 q) [! N& W- a/ T# q) }
wplist
; X0 T- J J7 W/ s( E 列出所有监视点: ?) g0 X; p, {
( J6 p- r( J' G. v wpclear 33 E# t/ ~& l4 u1 ~% D
删除编号3的监视点
& }" w$ `: C; G4 {5 L) l" A. v! R
wpclear' o6 \! B8 j6 u
删除所有监视点3 P3 y& y, w5 s7 y. F+ G( k
! x! F! c- ` U; {+ O6 M5 ]
- i! ]' C8 q k* `/ B! x3 a
' O8 `. ], C9 ?& H& v0 f5 |3 E程序断点指令: bp, bplist, bpclear9 Y" M( @ U" U% [9 t2 E8 |
例子: |. h" C/ j( b8 [6 S- s1 Q( H
bp 1234; W1 S. K% o6 ?9 s
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) ~0 d4 E1 b" u0 z& d0 Y6 R- d! l' ? [- u0 d. k
bp 23456,a0 == 0 && a1 == 09 X$ V! Z% \2 R4 P8 u* M4 j
在地址23456下断, 且中断条件为a0等于0以及a1等于0
6 N; Q! g; y8 Y/ r0 r- Y
! a# U i9 s- I. N' a; T( z; r bplist4 G' O- x3 L; @+ t: D: V
列出所有断点6 n) Z+ z+ ]- K* }6 n; A
! y" ]! b7 Z* C4 C* ~- g- v$ n bpclear 39 Y. F' J8 K' p8 ?6 c6 a; M. F
删除编号3的断点
6 S1 S) `0 s( _) u6 V5 f$ P5 Z; E1 M+ k6 \( [* j* o. b Z4 K
bpclear8 X% H7 R9 o/ A" e# F0 `. a/ A S
删除所有断点
" [6 b, j5 j0 {4 I2 O
1 p0 ?+ p* P5 [0 W 2 w! G. @, P4 g0 s. L
% n) }2 }: n/ \跟蹤紀錄指令: trace
8 v+ x# |& b$ E6 M/ z4 L$ o 例子:- ^* W9 {( y+ S z$ |
trace 01.txt& F" e; e+ D7 S) T
跟踪当前CPU运行的所有代码, 输出至文件01.txt: n4 L+ Z2 A9 O# W4 f/ w& A2 q: K
2 [3 b$ B+ ?- T, ~ trace off# j6 A2 C. j. w2 A
停止跟踪, 并且关闭文件" r. `3 B. o- W( ?* v8 }- r7 c) y" G
5 N9 z5 D5 @7 ]1 k. H+ E Z. t trace 01.txt,04 D/ \! u J4 `1 S5 I' S
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; J% z: d, I: s
3 c! Q+ a& B/ Y0 W trace off,0! d, y3 @/ r& ]9 t* p
停止跟踪编号为0的CPU, 并且关闭文件2 l. v9 H; L0 \( ~
' a$ U2 @! s5 k trace 01.txt,0,{tracelog "A=%02X ",a}5 v( ~+ s0 x& M/ w3 I$ h7 ]
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ' A$ \% d+ R9 ]- w/ X. T f0 Z; _5 D
并且在每一行的前面, 写上"A=a "% n1 F% }: _0 |/ s
"A=%02X ",a为一个C语言printf函数常用的输出格式% W1 i- {/ o% A
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 Z9 e( o) F, c/ X8 {
X表示为大写十六进制数0 _( I0 a' `* V2 x, A, G: v3 S
0 B8 y+ [, z1 q' I2 x# N+ ?6 K
9 r1 @; n/ e& F1 M' U- L; m" D2 D3 y; m L& p: n. y3 }
内存直接写入指令: maincpu( L9 {0 \2 V- J* v8 A' @
格式为 maincpu.[][]@地址=数据
" s& ]) b" O7 z8 }. J h) M4 A0 j 第一个[]:+ [. E3 H; N- Q4 u3 \
o 表示ROM地址
]. N- J9 V+ U4 l, ] p 表示RAM地址9 k. ?* b# `8 G% R
1 s6 F! t$ H) w9 b: e* ]/ f
第二个[]:3 q7 j0 G, v; i# m% T
d 表示4字节. O1 ]2 S8 U \) @
w 表示2字节
: u1 e* N5 D- R o5 d ?5 t! U2 E b 表示1字节7 r) T3 l" B. g5 d. L
4 K; l5 T0 {, u9 R& @" D
例子: X8 A% _6 F- u. k+ l; G
maincpu.ob@1234=FF
+ H& ?( i, k5 E. V! N0 N7 U 在ROM地址1234处, 写入FF一个字节
) n& P' O* a7 S$ S1 c1 {+ l. X& _
# ]) q7 o" U- }% U maincpu.ow@1234=4E71, y( l- P8 h' [3 N8 g
在ROM地址1234处, 写入4E 71两个字节) U( N* w |/ }; V( E s3 q" A: e
7 L& Y J4 C9 l7 o0 h# f, n( V9 }
maincpu.od@1234=600A4E71
7 Y7 y, ]) w+ x% V* l3 @4 j* J 在ROM地址1234处, 写入60 0A 4E 71四个字节9 K1 S# S( l- [: o1 {) s
4 g% K L* z0 Q( y' ~, }) W$ V. d3 ] 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 k; d6 t. Z* n6 f
, C3 }8 X* f3 ^. u$ ~
& _$ [0 |* i7 p4 G: l6 v6 c其他:
" V# L& Q/ L) C# w/ y; H3 t6 N* L% J2 c dasm 输出档案名,地址,长度
5 H- o6 s/ T, h9 U2 V8 I5 ^: h 输出程序的反汇编代码, c+ |3 F7 @2 R% {) A4 N
例子: H( N; g% E5 X( h6 u$ a
dasm 01.txt,0,100000
+ B8 \3 e4 g @$ U 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) U' h9 x1 ]6 f4 k6 L* Z; X" H) v! H7 W( Y) H3 _ v
softreset
" y* G D" m, t# w 游戏重启, 但不重新载入ROM
6 K$ _/ i* J" f0 n4 K" E ~% u$ {! u$ L; f) S7 }9 Q+ n9 k' h
hardreset
+ D0 m' f# F6 Z% T8 U 游戏重启, 且重新载入ROM
- H# {: v, s. g2 x1 `3 ~! Y( N8 ]1 `3 ^" m w
snap xxx.png
+ L8 E+ ~. S4 Q& z4 f 截图为xxx.png# p: ]: v" L d' B; P8 ]; G. V
6 |' U7 n1 ]- [* Y: K- v* j* \ , f4 C; i9 T7 O1 J t/ M
5 V, V& y/ }! Z, Z- U3 I
; P! c' {6 l+ \5 x0 l4 M热键:* c' G5 ~, N; F* b+ B
~ 中断游戏0 z" m) [9 f: l$ {) w O
F5 运行游戏0 y# a& ^# d, `
F12 运行游戏且隐藏调试窗口
/ ]2 F( J3 x, z& ^6 }, P F11 步入, 单步执行, 会进入子程序
$ p2 S+ P; o; i4 N% A F10 步过, 单步执行, 不会进入子程序; q1 i; N) [+ O _! S
Shift+F11 执行到子程序返回
( R. B( a" k0 W! U# A$ {: p Ctrl+M 内存浏览窗口5 v+ _! u# F, N4 X8 {% }$ h
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) P; a5 G$ @1 D2 _* B& w; b: L
# F* Y: o: F0 x" G* C{:4_94:}
$ U4 \' q1 v, R. t# Y. W. C3 I' `7 I/ G8 |
|
评分
-
1
查看全部评分
-
|