|
|
# O% V# q8 s" R$ c) T7 a很快速的整理我自己常用的指令! x5 ^% C1 u! w. h: t
# k: V C$ y5 `% r2 O5 N
{:4_112:}
5 M$ x& u% l+ O. h( t* s$ a# n" B7 B7 Z; ]7 ?
MAME DEBUG常用指令" ], Q, h/ s7 b! E3 H
Z: }9 F, V# A+ v内存搜寻: ci, cn, cl) x3 k: V9 P3 e% O8 c
# a$ J. ~' \7 w' S @
ci
! V$ r9 N: e, e7 h J 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, G R0 x1 \6 U+ _1 Y/ G3 l! a2 [7 a% `1 P6 b8 `7 X5 b$ k
cn
* {/ g0 ]: u% C! _; s) M 搜寻指令1 ^7 w. G r5 |+ ]: K
例子:+ S$ s4 I; A/ Q# k, M# Q
cn eq,60% C; T9 J2 i- `4 G/ r
搜寻目标等于60 (十六进制)/ H- }, i* l, }
! o5 h) A5 U' j; m6 L7 T! [ u cn eq,#96
! |3 g2 ]* a$ C* A 搜寻目标等于96 (十进制)% L% L7 g. t2 f, l
+ h5 ^: H5 u& K8 B4 A; f1 j
cn eq V3 Z- s8 N, [$ p" r8 E& U
搜寻目标的数值没有变化
2 n" y; E+ h( k6 N6 J# w, f/ b3 D
cn ne
# F8 r. i+ C0 j1 }- ?: {% x" j 搜寻目标的数值有变化
3 |5 u* X" _9 Y k" c: ]9 f7 P
# T* W4 P; s G( V4 u cn +4 v8 l/ w" N) y- ?* H
搜寻目标的数值增加$ V# B$ n; E8 h/ E
: k% }8 z: o; [8 k7 \) y cn -
$ [! v( `7 X: g- F, ^9 T 搜寻目标的数值减少
! g. |' y2 X7 y) _7 u) S4 C 8 n7 N# G2 F( N2 Q$ @0 T
cn +,3
: F7 R, v$ X' y- ~ 搜寻目标的数值增加3 (十六进制)5 N$ _) o6 ^3 S. q7 i& @
+ c7 N! r! j D/ F, q
cl# w0 T' v* d9 F1 c
列出所有搜寻结果
2 J5 L$ O: c0 r8 g; K. j4 p }3 u
; Z" k3 l, w& J# }! v3 S cl xxx.txt
, N7 S$ Y% w2 Z2 k3 S 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式( V9 k: S S: p8 t6 \$ s1 p' C
% u! J6 P" G" I 8 m' S5 p8 U: Y5 A8 f
内存监视点指令: wp, wplist, wpclear
. A" v" L5 b, z# H# ^' D ?1 R 例子:& e9 V/ s) N7 \$ e3 H3 {; J2 Y
wp 1234,1,r
' P, ^) p4 w8 k+ ]* X. I 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度19 {6 ]: o0 o0 t5 O# Z4 H/ p
; J) W; \! n, j# }, Q5 L wp 1234,2,w
$ D. p7 `. T/ l: v. E 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度27 c7 D7 i8 O& o1 y
v$ q8 L7 B9 i% [' t( k wp 1234,6,rw& A2 {4 v! ~& a. ?+ E/ W
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
. B5 P% U# b* a' |1 s$ l) B3 h, d: O- ]6 h4 X
wp 23456,a,w,wpdata == 1
q3 O1 d# q/ p9 c4 \: X 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
3 x6 d; V) q/ G' N3 d) a, E, N0 j" a- Q( d
wplist
1 \; G4 K& A& o& T 列出所有监视点1 c" s. U! [; i `
1 X) \. }* K2 R3 y5 s
wpclear 3# j" @* N; H. P# f( F0 K5 J* D
删除编号3的监视点
% e2 q$ [8 L1 \" t- U4 ?2 j2 m4 Q n$ C9 B# `
wpclear) [2 b3 G; X: m
删除所有监视点- u0 ^: p1 T- Z4 V& Q2 J( E
6 {! ~ R& u+ Z
+ x8 R8 l7 o- n% q0 G
7 F8 a+ V5 ~6 F) H. i- }程序断点指令: bp, bplist, bpclear
. a9 b! T5 Y d6 }: p, X 例子:
6 M# ^8 e, z. W- M bp 1234
: a/ k5 w5 ^/ f% c( j 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 N# g3 l" z! @8 ]% W. ^
: P: ] t5 B) e0 e4 u( _% ~: [
bp 23456,a0 == 0 && a1 == 05 O& q9 [2 F2 f. u6 w# v
在地址23456下断, 且中断条件为a0等于0以及a1等于0
, \9 M9 F) B8 g+ N7 L/ K! E& b" k2 ~& c: N: H3 u
bplist
4 x# W! h8 T- t8 H$ S 列出所有断点
7 ^' i! M0 X- W" _; m0 }# @- E; T" W
bpclear 3& r' T0 x W9 \& U
删除编号3的断点2 q) h, z; o$ I& l' W3 e
" w/ E# v0 L$ @ bpclear
X3 ?( j) l( _3 J) D6 F 删除所有断点
6 ~" m# g! @" g, s0 X" h1 K# q M g* H1 j* F
1 J/ Z: h+ F0 {7 |+ g, X `" H( ], i5 \9 S
) S& B# Z3 f- T$ l7 I) ?% n跟蹤紀錄指令: trace& X% P# O6 W7 S4 p7 |* |" ^
例子:
$ Z8 {1 ^# R- h/ p- _% i trace 01.txt
: b4 }+ N9 O( i$ D y# P 跟踪当前CPU运行的所有代码, 输出至文件01.txt
% @4 J! l3 C( F0 Q- {6 o/ o: K# R3 M; S) t% a
trace off
6 R: h' s! ?9 e! x% j 停止跟踪, 并且关闭文件) k: p+ f* b1 e
# }+ f$ A% s. J) I+ i trace 01.txt,0( m. d" X: b) Z4 _6 g; M' k
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% j; {, x4 f) f" I/ X- Q+ F5 i! J1 n) E4 ^/ F j
trace off,0* M H( s) B4 y7 ]8 V
停止跟踪编号为0的CPU, 并且关闭文件
, C- T U2 A j& g, ~) i) d6 ~2 d# d( B7 s9 C$ E: f+ ]! K$ ], J! e8 }
trace 01.txt,0,{tracelog "A=%02X ",a}
% N: l% J, j0 }5 t 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 ?6 Q- C+ I' _5 ~ 并且在每一行的前面, 写上"A=a "' U: p4 o0 Z3 I7 D, }. k$ Q
"A=%02X ",a为一个C语言printf函数常用的输出格式. b7 N/ v6 M6 t$ H5 N* n7 T$ v1 |" S" t
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 b m, v( {3 r, {2 u6 ]: p
X表示为大写十六进制数3 {2 `% O8 n4 _5 B
5 w0 J5 Y& v" u% n4 W0 N2 [% e6 q1 R( W1 O7 z$ G
* d- o4 F" |: M- x8 e+ M) @内存直接写入指令: maincpu; z1 F, c$ P: n0 S" l {
格式为 maincpu.[][]@地址=数据, G4 d$ U, [ c5 l
第一个[]:: ?' I% Q9 F1 T! [; `
o 表示ROM地址
7 I3 K# A% A& s( Z4 u' t# W- O p 表示RAM地址
! }1 p9 \" Y9 q* m( u9 R1 p5 `% o
) G4 y1 ^" J8 w 第二个[]:% T7 r8 I3 S$ ?* b. R: ^, k
d 表示4字节3 n; w6 c+ L4 F+ y% I
w 表示2字节6 y2 W& U0 M: M+ D
b 表示1字节
5 Y! |' a2 G9 D; t# w
0 V: i8 ~) m, b3 B1 s/ _ 例子:
2 k! ?! X7 z5 L8 z maincpu.ob@1234=FF9 w5 }4 K; g2 a0 S1 k
在ROM地址1234处, 写入FF一个字节
6 g7 k& b, }2 p
: X1 {5 E3 V" c0 i$ c2 L! E maincpu.ow@1234=4E71
@/ l" t: d4 _ 在ROM地址1234处, 写入4E 71两个字节3 A w, u7 r% w# _( E
8 i) U; u1 c, M& e5 w6 h% i8 I+ K2 p
maincpu.od@1234=600A4E71
' H) F/ d" Z% @/ y" [ 在ROM地址1234处, 写入60 0A 4E 71四个字节
4 J! g( \2 m7 M% k' S' L8 X# P! m' K
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# [! e2 {: s7 n; L2 ?
( X- ?/ d5 o# m; ~; y
% O; y" \' W) m7 C* s
其他:' s, Y y l& g: q$ B% A9 F
dasm 输出档案名,地址,长度
4 W. ^) p+ B& k/ `0 l2 q5 ~& N 输出程序的反汇编代码 Z, f8 r$ |4 @. C. P
例子:
7 X8 a( K0 o+ P: k/ ~0 w dasm 01.txt,0,100000
8 G1 a N7 X0 ]( j, b" x 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
+ q1 x4 b& E' H" o* v8 h. g$ o! f* J, w; i
softreset! d$ d: n) C5 {4 a
游戏重启, 但不重新载入ROM3 J: h G/ R" j3 S3 N
. [5 k+ `3 g4 ]( g1 n: @
hardreset* V. C. O* Q5 D- g; N
游戏重启, 且重新载入ROM
7 ^* Z3 r. S3 I' [) u7 m% y* U5 _0 a, m+ ^
snap xxx.png X, B* }! k7 D. }: e2 M `) ]
截图为xxx.png
8 x$ O2 \, N" L' `6 M1 ^
& p1 j$ T+ r$ z; Y& B/ y% }. L( ^
& R1 b/ N* I3 Z' R% o7 h 3 P8 \* U% g" _
4 L9 C) n' o# L. m7 Z
热键:
+ h6 r* ^9 ~+ a5 R ~ 中断游戏
) W9 d9 R/ K5 s2 g- f" o4 L/ M F5 运行游戏
X; T7 c! F& f4 A/ e: x" G, } F12 运行游戏且隐藏调试窗口& u* d/ B, }! V9 n) l6 q9 ?
F11 步入, 单步执行, 会进入子程序- X! U% X0 |9 _' L$ |' n# w0 B0 x
F10 步过, 单步执行, 不会进入子程序6 F9 _' {3 {5 R7 V# m
Shift+F11 执行到子程序返回) d! X6 c7 _9 A( @& p3 _9 W
Ctrl+M 内存浏览窗口7 O0 P; ]6 H* \: E
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" A; b' b% a, B5 t9 D* W C7 w/ L5 L) H: I/ I9 t* D
{:4_94:} & ^+ S* S8 T$ e0 `9 i/ j% ]: K
% _! t) D+ g9 Q |
评分
-
1
查看全部评分
-
|