|
) U$ w/ ~5 J+ a Q. ~( N很快速的整理我自己常用的指令
4 J! O3 p: f# f7 v. ~ x, h O; ~
1 |1 m5 y' A9 O/ b{:4_112:}
7 Z6 j7 J0 e8 ^/ v, X3 l! L7 s! u% Z" k6 E3 e ^* s m
MAME DEBUG常用指令7 Z5 l5 _4 U" v, P4 [
+ h2 [7 U' r! P4 n9 w8 W内存搜寻: ci, cn, cl
0 X0 [8 f4 m% X( G: O
! h/ l7 r5 H( I8 r* Z- y ci3 V3 V, L( ^# x: L, {5 |
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. I6 A0 u/ i9 @3 t# J8 j' y& A- S! h+ @3 W
cn
. ~6 _/ ^* R# E- w" S; Q, H# b 搜寻指令
' ]; V) L) z& w 例子:
. M# K1 r+ {- h* F0 U! @& V cn eq,604 c) r! K" ~0 K2 ^' A8 f# t
搜寻目标等于60 (十六进制)
" Y" F5 d7 b; F) G
0 u9 x- T# k( E cn eq,#96
4 S2 i; k$ p, |2 M" c8 a 搜寻目标等于96 (十进制)) \: P$ x" x" w% F3 B! I" _! \) g
* y6 {) h5 w3 {+ K0 @5 P' T u! G cn eq
" w1 S$ D1 a3 w) a! D 搜寻目标的数值没有变化
! m5 e k: r9 {' P
$ A; k( M) K, p7 U: ?0 ], S) r+ E cn ne* S6 @- ]5 B/ [4 b8 o
搜寻目标的数值有变化: P4 N/ |* w9 @( c" u
+ @' A; B5 q& O cn +2 a' p2 {; L6 `4 n5 X$ W
搜寻目标的数值增加, z3 o. D/ o. k$ m$ o5 ], E
% }$ i7 M5 c& C
cn -
! G* w- t' |$ z0 @. `/ C7 A* p 搜寻目标的数值减少7 l) O* F1 m/ c/ ~' `8 ^
) ~5 `: o+ c& P P0 a cn +,3. M( O# u4 }" I& `4 D; E3 K* A4 b% L
搜寻目标的数值增加3 (十六进制)
( z$ {; d, z9 W. ]/ v' J( U. Y/ B
cl
% A) S, \3 x2 U/ Z0 k) R 列出所有搜寻结果$ \' k O. P, a* Y l4 ]) N' J. ^
3 @7 s- v# e! N9 D' s' N cl xxx.txt: q- F0 z3 n$ l1 T" g. B
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: v6 A, ~& a6 w
2 v9 L% u! b/ v. @) O* ?3 o4 A% ?
$ q& {6 t+ J; J. ^; t- u, \8 _内存监视点指令: wp, wplist, wpclear
% E( _5 J( W; E+ @( U2 H5 X 例子:
& ?; O9 c6 H3 o0 }' z$ k3 |7 G wp 1234,1,r: y1 |. D* ^" ]5 S" a
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 \$ L, N5 B# z2 {. y2 B* w* Q+ L" n, R' p
wp 1234,2,w$ _/ I7 m# |1 G ~; K& \
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
7 }1 o1 R6 K4 d: H
( M' q6 i0 d5 q% [0 X- ]4 N+ E wp 1234,6,rw4 `8 P; F5 \& A: b. v/ O
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ Z2 G" {% d$ t* w' x% @; D4 s7 @! _0 s- n& H) _/ K
wp 23456,a,w,wpdata == 16 I. V! p `2 I8 {/ F
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
5 C/ n4 c5 ?, J0 Z. V( j8 Z4 A S, `, Y3 H% F1 x
wplist
- Q8 Z3 u2 z1 l, k 列出所有监视点. i' p O! [( j! \# e' L4 j) e
' t1 l# F' P V# F
wpclear 3 ?, }3 y5 K- x
删除编号3的监视点$ |( R3 \9 x5 ~( P
1 S% B# p9 z: [
wpclear
9 |3 ^# S+ p. W: r, j) w. W 删除所有监视点, n; R: |+ R) B6 o. t0 J
. `. q, k# Z, {7 J
& S8 p; v+ w0 V3 j: W& f. p7 r2 B$ m2 L- a
程序断点指令: bp, bplist, bpclear7 G. ]- g9 k; U7 x- k
例子:. _8 M/ A1 {4 I) w6 Q
bp 12341 C/ v( g; ~+ C" p) L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! B+ h3 R3 r7 P7 x- w" K# ^4 c9 ?
bp 23456,a0 == 0 && a1 == 0
' B8 B8 X" u% i: d; M 在地址23456下断, 且中断条件为a0等于0以及a1等于0
( J( q+ L6 G$ g& i/ g2 O9 P* U! @! |" u
bplist' x, Y% q) v( o% v1 [! T
列出所有断点8 D: a' r8 U' _; D1 M! ~
) K m! V2 ^/ n0 G bpclear 3% V* M6 f, h/ s& @8 n
删除编号3的断点7 M* m y) ^0 U1 S3 H) q: O
F3 V+ i7 t# q4 t1 b: X }% U
bpclear8 m' o& ~/ v: p) u' D* Z+ I4 {
删除所有断点, d8 ^) B+ y) z- z0 H& ~6 L- i5 M, b
9 l2 [" @" n7 B8 n& A5 T) W* U 6 v* @1 I) T ]
: G) @) _' d' J* g* S8 a! i跟蹤紀錄指令: trace, ]+ n1 z# q/ l2 n% S
例子:
7 V2 d6 n+ `! q& A+ c! _* s1 T8 ?' g trace 01.txt
( v1 K5 S, c, \ 跟踪当前CPU运行的所有代码, 输出至文件01.txt9 @/ F" z; F9 a- S( u0 W
6 Q2 d0 A5 o) s- p: k0 c/ q
trace off
9 j) F! v- H0 F" {7 Y+ J A! V 停止跟踪, 并且关闭文件1 {; g& A8 L5 w
( {0 ]" h* g* `- N0 Y) R% @3 ] trace 01.txt,0
% x0 ^6 L. L; W5 q 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( N" E! G$ F# j" \9 k
4 M0 P7 d5 H1 E+ r' n
trace off,04 P! k& T) J8 I1 t2 U& s W
停止跟踪编号为0的CPU, 并且关闭文件
) a0 G+ p7 l0 {; W
, ]) p% J" i) ~; I trace 01.txt,0,{tracelog "A=%02X ",a}& u& G0 L1 I$ z4 ]8 `
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt * p. I% V- t2 j; H4 M
并且在每一行的前面, 写上"A=a "( f/ S$ ]# _ ^) m& N2 s
"A=%02X ",a为一个C语言printf函数常用的输出格式- ~' }( }1 x+ D- ?3 m' q4 j
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
9 j- H: A: Z# ~# U L9 n: J X表示为大写十六进制数; E& o& W7 p5 r9 y2 `9 E1 ^7 r# o
2 X# |5 i- X! l0 ?1 n
! \; s6 Z& L7 ?- O
( ^% a% _2 \$ s- i) Q
内存直接写入指令: maincpu$ S! K9 S* A$ X
格式为 maincpu.[][]@地址=数据6 _! k: N" j- B v- c
第一个[]:: v% ^1 R& G n7 W8 G
o 表示ROM地址4 N0 |- [: q+ o$ p4 G% e
p 表示RAM地址
2 m9 S7 W! F4 i( b$ ]# \! x& |. X- [! ^: p' K9 P
第二个[]:
( K" I/ k$ l: b6 m d 表示4字节
' Z8 F: ^8 s+ `; V w 表示2字节
) h# [; R* D Q b 表示1字节/ G. U4 Z( G5 H: ?% Q9 w
1 |' y( |# W X8 n! L! a/ X
例子:# Q4 ^) g5 O3 L# y
maincpu.ob@1234=FF
S3 \" c; _. w 在ROM地址1234处, 写入FF一个字节! v% M; ]. R- ]! x5 q4 Y
& @6 L, J( y6 {! P" z+ h9 d( ? maincpu.ow@1234=4E71/ e V- [( s# I' ]/ c8 i
在ROM地址1234处, 写入4E 71两个字节! `- ^. w* B# l% E9 ]0 F5 _
5 g0 K8 i e/ o4 O* @ V
maincpu.od@1234=600A4E71
9 ]7 O5 h, T. q5 Q4 B; A; C3 j- z- Z 在ROM地址1234处, 写入60 0A 4E 71四个字节
1 i1 i5 H" m& f! t3 k2 t# b
9 T) s9 o. @ x$ ? 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: G5 f1 _/ M( l& w$ p3 m! K) \
/ Q3 h4 y, I. w: i! d1 W# D- c4 ]8 o0 Z, F, R& s2 \' m
其他:2 u" m, k& @; O6 z( r- X4 f
dasm 输出档案名,地址,长度
5 W1 c: Z, i4 q6 ]0 C' M$ r5 F 输出程序的反汇编代码
1 f/ a- ^2 L& Y2 I* F# U9 U) z: l 例子:
& J3 }3 l! U/ Z dasm 01.txt,0,100000* r) j1 |+ ~2 i8 C& u/ E4 X
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 i3 G, ]8 x1 }: D. A
: N# b) N; N; y [. I$ r( S softreset
z3 F! P$ X2 Q1 b5 E1 [# ~, } 游戏重启, 但不重新载入ROM p! }- {' ^$ _
2 _$ h( q% c) l5 e P* l
hardreset& p" ]* E8 }0 z8 S% `
游戏重启, 且重新载入ROM7 a. A; k1 f/ Z2 ^0 r+ F% c3 S( |3 N
P. F# U7 i, S snap xxx.png1 t G' S9 u6 j# s' N" }
截图为xxx.png8 A$ h2 b0 A5 J+ a! w- a. V: c p
- B+ X, U- }+ F5 O5 p4 b& S
+ r: C* s; G3 Y5 [8 Y, r ^7 v9 t6 w- g
, z, n) B# q0 O* G6 Q/ I; Z
热键:
R8 j: C0 O1 Q3 B9 i. x4 P ~ 中断游戏- L1 M' R- k/ d0 T
F5 运行游戏( l, X4 i Y9 ]+ B7 r5 U; h
F12 运行游戏且隐藏调试窗口4 x) R) ]( r4 V& M
F11 步入, 单步执行, 会进入子程序# ^! _1 G5 k+ v( E3 U
F10 步过, 单步执行, 不会进入子程序
) D( x% t. Z3 L Shift+F11 执行到子程序返回
8 X( F' @8 _( z Ctrl+M 内存浏览窗口
6 Y$ d4 s: I- q Y$ n F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
7 `- E/ M+ `- V& a0 J. U1 g6 \
( z! R- D @6 D3 z( y{:4_94:} 5 u2 k) R8 w$ J
+ Y5 z. X C6 L8 I% N. X: d$ S
|
评分
-
1
查看全部评分
-
|