|
|
( o2 e0 A9 X& i/ D0 @很快速的整理我自己常用的指令
# C2 i; j. E- S, l
" F( A$ U9 O( i4 g{:4_112:}
2 E/ E' D S) T" ?# I2 b: ?7 ^) z* F* ~ H" q' j* T7 W
MAME DEBUG常用指令/ j% q# l9 j0 O3 d* y/ ]7 e& ~
& i8 Y5 f# K1 Y6 Z) A! f
内存搜寻: ci, cn, cl
: D- K# s* z# |2 H9 `+ i' E, ~2 `- j! c
ci* M* C! u& J# L' S& c# \/ f
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
1 @" A A' G; P
$ D% k3 y5 F% a cn0 }% ^3 H3 j: r8 H6 j
搜寻指令, q/ a! R2 P) u+ P
例子:. K5 J+ o; _9 B9 w
cn eq,60
- v. ~! a! d5 z. f 搜寻目标等于60 (十六进制) C! D8 A+ U4 h( D6 q* j
6 S$ _/ ^' n7 J# A7 n, {
cn eq,#96
* [+ O0 E+ j5 _ 搜寻目标等于96 (十进制)
% v8 F9 ]" a8 e+ d7 Y/ _+ E/ p
cn eq8 |' Q& P9 |- a2 X; s4 O |
搜寻目标的数值没有变化) h# j. p) Z1 X' m7 O: h
9 `- S! H9 {! T- N# \: n cn ne
: o8 a- ^7 \; m2 M0 d+ W* | 搜寻目标的数值有变化
/ g, C, ]' o; l% |# i. c: _ G' a9 d L, q1 o
cn +
$ q& m4 ?) R; F4 T2 N 搜寻目标的数值增加
6 `9 J# s5 Y6 X& F, t- X % X' @- u3 m2 o3 C1 x9 Y) z
cn -
9 }0 y* l( n0 }' d w3 k 搜寻目标的数值减少
( A5 N* O3 r' W$ h" h" g3 Q+ l $ y, L8 n) C) j/ Z
cn +,3
8 Y. m) @! h6 n6 k" l# S 搜寻目标的数值增加3 (十六进制)) w B- Z1 K9 p! `+ A5 J- t
. x0 m* N1 W7 } B
cl
$ v4 Q" A$ C# I 列出所有搜寻结果
\3 k! D, ~, O7 ]; ]1 S0 c' o7 A( ]4 O' ^$ j% R1 R- o8 Z( V
cl xxx.txt
( i; u; H& k7 r* f( V: O9 Z& ` 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
4 T; h9 L2 _3 \- J" D( q8 E) s$ g
6 H4 g1 ?% [! E' S' n" I/ [2 F9 p
' t% J% C) C9 |) x$ O, C8 L内存监视点指令: wp, wplist, wpclear- U2 Q( F# b+ J8 ?# G3 k6 ^
例子:
* l8 ~+ X+ U1 E' D0 T wp 1234,1,r2 o7 W& @& K' X1 @8 z- I6 X9 `
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 P. [7 I3 d- b
( P, _3 N2 W& f& B wp 1234,2,w, e$ ?+ k8 T! M3 o
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ e: d1 ~, v% Z: h8 |/ j * B# |5 n7 g0 k/ F, U2 n- z% @
wp 1234,6,rw0 N" J% M" u3 H5 u6 b! z
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 Y; R p, P$ B5 V$ n" c9 a' q5 ^$ h: Y( ~
wp 23456,a,w,wpdata == 1
8 K6 i5 u: k9 w 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; G! Z9 Q8 P! N0 A3 Z: j) s1 N P
* M6 ?! q" d& B9 b
wplist6 m. t4 j+ P* O3 P3 O
列出所有监视点
1 N. k& v5 B: j) M6 U: y. f* i/ k& {+ d7 t, B, _- i9 d5 @2 y8 {
wpclear 3
$ }) p/ H0 v+ H9 d! r! N% U! \+ [ 删除编号3的监视点
3 Q9 o. R9 @' b/ w6 Z* K3 J5 r
1 e8 z+ a* {; k* G7 x wpclear, f/ D5 B" A2 M9 o$ n7 _0 G1 }
删除所有监视点
+ ]% F8 ]& f7 n* i. c# Q5 T! T5 Q$ ~% V! a9 r7 Y2 i( ?
& x6 n# [2 \" R
: ~ l% s6 U" g% n7 w+ l5 n程序断点指令: bp, bplist, bpclear2 h x, l/ r4 ?. w
例子:* \( I# ~0 z" v- |5 f' ?! P
bp 1234- t+ W2 v/ @3 h. G& P7 U/ C8 T5 L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
; ]' S5 v( [+ G$ d" V F5 v l, J. K7 k
bp 23456,a0 == 0 && a1 == 0/ s# n! ^* L" _4 _
在地址23456下断, 且中断条件为a0等于0以及a1等于0
# E7 [: D6 f1 z8 E6 |9 `) |
7 |. g( Z0 `5 U4 r9 P bplist
/ k; ~, k! Z* J# \ 列出所有断点
# C; |' f4 W6 L: c, O0 G% H# U) S, @' {5 g5 G0 C
bpclear 3 I0 z( P* }$ S
删除编号3的断点
1 M ^/ N0 ]% B" X$ O( l/ ^9 ^$ b
. `9 q7 C3 _! }# G- A | bpclear
4 I/ ^9 Y6 B( g! k 删除所有断点) C5 v! v( W; \/ a
% v+ p! x9 o8 Y" W6 h8 s
% J; Z. K' a$ b" O+ L, i4 c* {
( Q2 `3 x. k% T- r* u- N跟蹤紀錄指令: trace
8 m6 i2 D! a7 X" h1 ~: o 例子:
3 }; E/ H! ?+ n8 i. ? trace 01.txt
% t/ X) `; ]5 V 跟踪当前CPU运行的所有代码, 输出至文件01.txt3 D. F) J% m0 G2 n5 _
) ^6 G/ T0 c$ o8 a2 ~' q trace off
, o) Z: ~; F2 M* w$ N3 p" H1 u0 Z 停止跟踪, 并且关闭文件 @/ _- _# e2 x7 ^6 p
, A0 Q2 ]' D6 h4 ?, Z2 o$ ?
trace 01.txt,05 F; K1 ^' p$ q0 q$ e- y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 O @" d, y8 d1 }
& ^* z) E6 A# V: S% _( q8 B. s trace off,0
5 x$ \! u) V g: R: v" _ 停止跟踪编号为0的CPU, 并且关闭文件, w/ V$ v0 h& o3 w0 D3 s
- J/ x, W1 [* e0 i4 R
trace 01.txt,0,{tracelog "A=%02X ",a}( i% t7 s% ?, W8 ]: g. t
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 V* I4 H! ]: l' [+ F 并且在每一行的前面, 写上"A=a "
# E) b8 o" |9 A, a( p/ q: i4 P "A=%02X ",a为一个C语言printf函数常用的输出格式
) C8 W3 g {4 ]4 [3 }# X 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 z& U% d4 Z7 Z) [( c" v. A
X表示为大写十六进制数& u+ `+ {) [: A7 N
u% O S# ?. v5 D+ p* I, ^
1 @$ r* u4 y( a/ \6 C# ^
2 D% w( m& n1 ?内存直接写入指令: maincpu0 l0 N5 f+ r8 u
格式为 maincpu.[][]@地址=数据8 }: M; s" o% A! K! U" b h
第一个[]:: k+ F8 G% J6 \5 F- M
o 表示ROM地址
( U# m; q3 z/ i1 ~8 L p 表示RAM地址
# e5 b _( D' {6 ~7 P+ M4 G: _) Z+ u+ p
( V9 j- S: z, L2 S" N" l 第二个[]:
+ W3 o# j. k5 h. e$ u d 表示4字节
B- h4 h0 J# w- G w 表示2字节- e0 p) J$ V9 Q
b 表示1字节" B( t; C; L& w8 d' x
- U, [4 I9 g2 w- Y: ^' `
例子:
% A/ t3 o2 _* B b: D maincpu.ob@1234=FF' X; A" ^& F, y+ Y* [
在ROM地址1234处, 写入FF一个字节* z0 u! \/ P9 c! D& k, H
: R; T4 [+ T0 S1 r$ o
maincpu.ow@1234=4E71
! H0 w1 `. g4 v5 y, b) P% X" | 在ROM地址1234处, 写入4E 71两个字节: U/ U* [* i. Z1 }/ X
5 G/ Y+ `# |, g2 T. E0 Z2 C
maincpu.od@1234=600A4E715 @# s, t5 Z# _2 b6 E
在ROM地址1234处, 写入60 0A 4E 71四个字节
; }0 d' t( W$ ?% b0 c& v) A: L) Q: K8 d7 H! q: T+ v1 b
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 ]; J! V# H: s9 c, K+ E/ P
* \( q% n; J3 N P
) g V/ d& }: B% s/ [# ^% |. Z, v p其他:
6 y( c: n0 q/ w8 Z7 `' W dasm 输出档案名,地址,长度
1 T$ N; d% M% ^1 ^1 q" m 输出程序的反汇编代码2 Q- @( L$ w$ W1 J- A- [& t
例子:- i" t9 e7 z# f" f. W2 x- K3 Q5 K
dasm 01.txt,0,100000
" K0 c6 N& A f& O 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
1 f8 O3 e3 M$ p c+ X5 d1 P ^ @0 k& s5 T& P9 i+ g+ Z
softreset
! T. \. @. A6 {' ] 游戏重启, 但不重新载入ROM! k8 a3 E2 P' J1 u" o. U
2 h0 w2 {5 z* ^* r/ t+ I
hardreset2 A- l- s( y8 F' c& T
游戏重启, 且重新载入ROM8 n5 B* W1 A0 Y
7 Z; U9 F( c0 Q( ^& C) f5 t0 y1 D
snap xxx.png* M" @* j- b- U
截图为xxx.png/ p* j9 ^, y9 Q+ ~- y& w N0 m. [9 V
, Q$ G& Q+ D5 E, v3 ^- x" Q v
* t" m* e1 V9 Y. l
7 m' O2 s5 H" [5 [; m) Q. N2 Q : I. ?( q/ ?1 |+ P4 O% j% E
热键:
6 l3 }; m O* _9 B, V ~ 中断游戏1 S2 z* v/ u, \* `8 A! S& f* J4 K
F5 运行游戏/ o: z3 ^0 ?4 ?7 p$ S) q
F12 运行游戏且隐藏调试窗口
8 y o- S3 ^/ e. J: Z+ G( j- j4 ?! ] F11 步入, 单步执行, 会进入子程序) v2 E; I' U# A+ g# P) b
F10 步过, 单步执行, 不会进入子程序
: r5 p+ D. p/ b: b# O; b Shift+F11 执行到子程序返回6 z8 ]. ?4 ~" K: Y! A- A
Ctrl+M 内存浏览窗口
" a7 Z; ~# f8 \. D g' n F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
( m' U4 i& R. [* G( U& N9 |7 M9 W' ?8 {3 b* ? D+ S. {
{:4_94:}
@+ R/ S5 S+ Z8 _( D
" \) y; @8 }0 T, z. Z |
评分
-
1
查看全部评分
-
|