|
|
1 a& Z7 {" Z) t: a' A
很快速的整理我自己常用的指令
' c9 s- ^8 {* Y ^2 e- ^' `
/ N; U0 j' z' Q: H{:4_112:}
4 U0 c" M3 k# j& k( l
; T9 w u% l2 O0 t1 g/ xMAME DEBUG常用指令4 o6 M) J0 Z0 B/ D+ C3 u5 V
! K7 F6 K. j4 r- u" h内存搜寻: ci, cn, cl
# ?7 K$ r* h' j6 C3 u' d
! w0 J8 u9 i9 B, J ci
/ o, o) B" K- W. L 搜寻任务初始化, 每次搜寻一开始一定要输入这指令, n! Q6 u% W5 h' U/ j- y/ |% f, I
0 W- ~7 A: G. `% p cn
7 q# |% C% M% N 搜寻指令
8 f4 q1 @( ]' p1 W# l 例子:
! D: Z* q- O g cn eq,60
" L6 q' n5 O# P/ R, f- d7 P$ i. i 搜寻目标等于60 (十六进制)2 Y* x& O8 A( t
0 h; v2 R5 I6 R% a/ H- x2 T# H/ ^9 N
cn eq,#96/ F4 Q0 _9 E4 K9 q! n; {( K
搜寻目标等于96 (十进制)
8 O( U, ^- L' W( x
$ E4 E% p4 r3 o! F2 t( E, U- S cn eq/ h- z- P/ X7 }' |# P
搜寻目标的数值没有变化
( E; u- _' h. ]4 `% n0 u
5 {" p: A" L- [+ R# k4 w6 m cn ne! k$ z4 {, E9 k8 C
搜寻目标的数值有变化$ n( G( G' l1 ?+ q3 c( }3 K+ G5 q
* I% B0 f- W+ y) v cn +0 M) P- y9 r' C: P8 N
搜寻目标的数值增加
2 I9 v4 I5 r. _' \ T 5 y/ n/ g+ ?* j/ T' X0 n
cn - `# p c2 f' D$ U& ~8 w; f" t" |
搜寻目标的数值减少# ?6 }( y9 d5 `5 N" B0 M; ~
, W3 \5 A" W. D/ T% C9 h
cn +,3
1 r6 \. y- y! J3 q5 M2 \* y" x# P 搜寻目标的数值增加3 (十六进制)
1 ^+ f T7 I7 P8 f( O( L1 f. Q* \; U0 e% N* c4 T$ ~$ n2 d
cl' ~ c" j7 O0 K' m3 W
列出所有搜寻结果/ f" G' h7 A) W5 f
/ O4 ]- F! \4 M) ^- W3 w cl xxx.txt1 X& y6 J1 m ]( |9 A7 R
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) }+ V7 i" d. z- E( d' K h; ^4 W
: G/ Q0 n5 k9 L% h- F C, _- n
内存监视点指令: wp, wplist, wpclear5 \ n$ q* s4 S8 _
例子:
/ n# [ _, x$ @- I7 Z2 @( _ wp 1234,1,r
3 Y' t% Z2 }; y/ ? 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* X9 ~. ^3 R; h# a# W$ B( d4 \9 a) u8 X
wp 1234,2,w& V$ O- Z" w! x4 _* Q# d
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
- {6 s- H0 q7 D$ O; R 8 i6 M4 K( L! z3 R
wp 1234,6,rw
, |( ?+ m# G [& q' Z. V# l3 `/ T 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( y) `2 @9 T% ^: [/ b8 b }5 _
5 b* H5 i" g5 X. _, r" Y wp 23456,a,w,wpdata == 17 u$ \7 ?* w3 f1 ]2 T5 e
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ {: X5 D _: Z8 k/ G1 ^
& a9 G B7 Z5 m! V wplist, j8 ?9 K5 x/ a& l1 r
列出所有监视点
) y# n4 J! P* S" q( p" J' G/ `
7 L: r5 d7 B& z& H9 |. H wpclear 3
7 u% ~: `+ w0 ]8 [0 t 删除编号3的监视点
% z2 Y7 @7 z6 V6 Q, Z; ~' d* ^; B& ^/ h# a# w3 O
wpclear
- K# f1 T& h, O I5 m( V' R' ] 删除所有监视点/ V+ g9 ^8 o& [# n! Q
% E4 k: N. {- f% k* s1 ? w 6 \) J3 [8 X) Y( C
" @- t4 i3 `% S9 U$ Q% K! {/ k+ a程序断点指令: bp, bplist, bpclear5 u# \. b; f$ @* M: Q9 T) l' z
例子:
# l v3 Q( J: h+ D2 F bp 1234
% C7 v: f) N1 ^0 n' y 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 k$ U# `( q6 g& }
& ?% d) R$ S5 G& Y" Z bp 23456,a0 == 0 && a1 == 0
/ y+ z4 O) y3 {& \ 在地址23456下断, 且中断条件为a0等于0以及a1等于0: d3 ?/ J- `. H
, X4 n1 q x3 ?* c bplist
" c- x1 Z. k: A5 S) C* m; d& k 列出所有断点$ H8 T+ \" F9 N" C( w: v
& f& K5 p; v: z* T bpclear 3
) n( |0 l$ ~6 B) F5 |) ?6 {9 v 删除编号3的断点
) h) i+ \1 z6 W5 @9 g) `, [% E% E8 Z/ X0 P4 \. s8 l
bpclear
% _/ Y7 O1 u0 t/ C+ R 删除所有断点
$ a. g* F+ R- C7 m {1 d0 A1 q0 N
5 [/ j8 u( ?& T+ s+ z2 C
' U2 ~" P5 B3 j9 w跟蹤紀錄指令: trace
# _/ r% h4 U; R9 p 例子:
: f# x' ^ i; A) z( }6 u; D trace 01.txt1 ?- L. P1 W2 I) _: v3 {0 a* r
跟踪当前CPU运行的所有代码, 输出至文件01.txt
% [2 P2 z7 E: {. c4 S" T0 c# R U8 F5 S% L) e: f$ z; B
trace off9 N" h7 E7 `6 W3 Z' i9 _/ ~
停止跟踪, 并且关闭文件$ K, N. L+ C) E U8 D
% H' {% J9 s) v. O trace 01.txt,0
3 T7 K$ d D, i7 U4 W 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) Q8 y: Y% f7 V0 r& ]2 A$ o: M, q7 H5 D5 a4 k
trace off,0# E! S* K$ Z2 W0 F8 s1 ] X1 Q
停止跟踪编号为0的CPU, 并且关闭文件, v! E0 q: B, i2 m( u
' @+ ?, O; ~5 @' V# P trace 01.txt,0,{tracelog "A=%02X ",a}
1 N4 V/ c. Z* D/ X 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : E4 k# _6 p9 _. {& P2 L$ O
并且在每一行的前面, 写上"A=a "
/ z8 X; a/ `1 D( e/ p0 M [' P "A=%02X ",a为一个C语言printf函数常用的输出格式
8 ?5 X* A3 L- ^/ [& m 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 v9 j( l/ |, P: Z$ t, @9 b |
X表示为大写十六进制数
! s! z7 ]7 w; \$ Z& X% t$ E" [3 }6 `0 _, Y) s; i1 E
" o" e# K0 c" N/ O7 @- b% P3 Z; y
: \% t) d. ~4 d内存直接写入指令: maincpu
. P, x6 e& f! F7 I 格式为 maincpu.[][]@地址=数据
. i/ P; H1 }- M7 V! O 第一个[]:
4 {' J7 D2 G( L s" \. Y" ?5 | o 表示ROM地址
# N. L; c4 E* J4 R p 表示RAM地址# Q2 h" W7 b, @' |/ u; G2 S0 L
8 N( _8 }" J; v
第二个[]:3 \ X$ B6 p% ~9 k
d 表示4字节+ g, S& e: C+ n# ~
w 表示2字节
. Y$ Z3 S# e+ a: D1 u9 l& W b 表示1字节
1 t8 w8 x! i8 V& K- T
" y& d4 Y& Q* h, d( t 例子:6 [1 u1 A/ x3 P) K) }) ?! h
maincpu.ob@1234=FF: |6 L0 X& `3 w3 \/ K V( C
在ROM地址1234处, 写入FF一个字节
1 J& d$ \4 k7 B( {2 f2 d
: w4 I- p* N/ D1 |: ?/ Y) A maincpu.ow@1234=4E71
. ?1 l% f) k1 p2 o 在ROM地址1234处, 写入4E 71两个字节0 g' ` R* y( e( m1 T6 X+ B
) r3 \1 ?) {7 V2 F( Q& L: K maincpu.od@1234=600A4E713 z$ a5 L* _ s
在ROM地址1234处, 写入60 0A 4E 71四个字节* M4 w' y! i, J9 Q1 \3 d+ P
4 S; `; G. A: _* X 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
+ ^8 Y& k! T+ B+ j8 [ . d) h+ O2 k3 O* v! P9 m% O+ X
& R5 A+ V! D) Z! A. e. z# O& f4 u其他:
& m9 {$ b- |! E: {6 W0 o/ T, S5 N dasm 输出档案名,地址,长度
9 M P3 g: Z" b: y 输出程序的反汇编代码/ A4 i' \ ?" n, _
例子:
G, @7 @4 V. P# a0 s% Z2 B( K dasm 01.txt,0,1000004 `. P: R) s- t1 x- Y3 V* x. |- o
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- ], B% ?2 B/ r2 x6 `' ?' V4 r; E
. l9 Z! T; M% b6 c8 j: A8 V
softreset
8 L4 }4 c2 e+ H2 ~' y# _( i 游戏重启, 但不重新载入ROM# j' |& j& _+ i( J+ ]
) Q0 R8 l7 w& w: y H8 v hardreset
4 J2 } ?- e1 e/ c. H2 U 游戏重启, 且重新载入ROM: B0 v/ l! A; o0 r9 t
2 L s6 x/ l J! z) V, H snap xxx.png/ j6 T- m9 @: K- b
截图为xxx.png% X' V- P( i7 c% d& t/ h9 @% t; e
n. c8 k! o! j- u5 ^8 u
( g5 ?+ s, `; l# B) T & \" y/ m) H0 w8 u/ X
( W3 a0 j ~) N热键:8 w0 }) @, \- `2 O
~ 中断游戏
1 A1 `% g' R$ D8 K ^3 T7 | F5 运行游戏/ q/ k7 C# {: j3 C9 B
F12 运行游戏且隐藏调试窗口
3 U. D, I0 R7 _! G F11 步入, 单步执行, 会进入子程序
: j9 ]& G$ j9 h$ w: W F10 步过, 单步执行, 不会进入子程序
9 v6 k0 g$ Q" B2 {' z$ y Shift+F11 执行到子程序返回8 ]+ B; Z9 {5 O7 X- v/ a1 f1 }: K. w
Ctrl+M 内存浏览窗口
7 q' i+ q) z: M' `( @4 L F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; z' h v. a$ i
. g5 z& \1 _. C1 n# \7 z, M5 N
{:4_94:}
; s# x& d6 O6 W+ L! j9 h- y% H4 V& U5 J
|
评分
-
1
查看全部评分
-
|