|
|
. V+ a# N9 W- D# t$ S2 H很快速的整理我自己常用的指令
# e k h2 O( i" ?. H! w# W7 F6 N: C& q' J5 I/ t5 t
{:4_112:}
- T. @. t. m+ A8 h2 ?$ P& j+ E: [) w0 k% D
MAME DEBUG常用指令
& f+ L; \7 V. O$ [% O
" N1 i/ C6 J0 }4 B内存搜寻: ci, cn, cl9 j: B7 z, A# U2 h F
3 D2 O U, i, s0 O ci
( _4 b( ~& ^! W* o3 Q 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
+ n0 I* G+ d. Q) b' P( o3 J; x, ] x* p7 o0 u
cn
7 T( _$ M6 c1 V0 v; O7 u* U- t# A 搜寻指令; I- D! i) n$ Y; E* X* W7 T; {: _
例子:! T6 n+ K) Y4 U2 P% I" W
cn eq,606 Z% ]- i0 v9 O- ]( [- _
搜寻目标等于60 (十六进制)! m3 K5 b; h: Y- @ N) A* c9 E1 F: `
5 x" w( `0 p- z% x( ?9 S cn eq,#966 t$ {6 m0 [) T+ {
搜寻目标等于96 (十进制)
+ [, o, N U* v, O+ B3 D. U
! v- P- |5 _4 K9 E* F0 {& } cn eq Y% x2 x4 `5 Y Y3 ?
搜寻目标的数值没有变化! z7 M. |) C* _& r9 G% Q
- O$ {! b1 h: d
cn ne: W- D% r! p: l& t
搜寻目标的数值有变化
+ ]; l/ Y6 W% ^: Z$ B
$ E) N) ` I. E cn +
& c2 M3 J9 h$ k 搜寻目标的数值增加
; g' b1 U" V# m% _" h& J" k& Z
7 G& m8 i9 h4 D cn -1 l' D- w2 Z! p; {! r% [3 n
搜寻目标的数值减少* ^: s% y$ L5 z7 }1 b
" _9 e$ A$ a6 ? M& J
cn +,3" M9 I* g3 I) x" [
搜寻目标的数值增加3 (十六进制)
4 _! e1 n/ L" q: A4 X* Z
8 D' Q1 d5 n' F: T; K! d3 K cl. B9 \: f% U0 r6 y0 k {
列出所有搜寻结果' ~5 H+ J5 N: ^) p
- G J3 i& ]# [# ^9 O. e cl xxx.txt
8 S& Z4 b6 v @7 \ ? 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 ] {0 h8 t* w9 v9 J
7 q# _" a7 J7 `! }4 m& a 3 S6 q3 G: f9 m. ~; v
内存监视点指令: wp, wplist, wpclear8 s' _* O( T; y E& Y
例子:
# E+ M+ i& s/ P% U N. z wp 1234,1,r1 [# r( H8 S! j0 g- X. g9 m
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) N0 \8 `0 S! [( L- e6 {/ E
1 y; H9 x9 e" z
wp 1234,2,w4 j6 D' l7 m- K$ `5 {& {; I
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ t( V! E2 V+ |" l1 G+ M
- W" p; d O" k5 l5 Y' v$ ?
wp 1234,6,rw( _& O5 {! m6 G4 G7 E5 t0 x
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& |' d: j% w4 A' {
8 R9 w& d: Y4 N* }: \5 g wp 23456,a,w,wpdata == 1# T3 p7 u0 `: W' g6 b0 I8 `1 G
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1( k# Y3 T1 |, o% C0 C: e# y; e/ f
. y) K& s6 H: [! I$ M
wplist! l: n/ N( U6 y5 Q: f2 Q2 x
列出所有监视点; m% g1 Q: t: @& K1 j
1 w N2 Z0 @8 b6 [, S! { wpclear 30 b" Q+ O3 P7 m: a4 w
删除编号3的监视点
- M' G' h: j3 S) q7 D: _1 W
0 @+ `! E( |: a' e# l) J wpclear% `% L% t" l5 \/ j, |5 ]6 }$ e
删除所有监视点5 k7 x; S1 n( ^: u
4 l( M% ^/ f& S) x8 u3 p5 {
1 `8 h' h- L. \
1 `" F1 q1 W1 r- r" {$ Y8 U1 B
程序断点指令: bp, bplist, bpclear
E* ~! t" o4 Y 例子:' t4 o* u/ V- [# \
bp 1234
5 G" d& }. ]6 M. Q: u 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 W. | B: O4 F' I! p% Y2 P' |% e8 v/ J7 J3 C4 I
bp 23456,a0 == 0 && a1 == 0
4 J2 t+ ]/ k- C7 g9 {4 f! ~ 在地址23456下断, 且中断条件为a0等于0以及a1等于0! V Y% n" a! c. W( b: A
7 p: q! x- n, l' W. v% Y" P0 Q( d( c
bplist
3 E4 Q) l% D: e( m 列出所有断点3 x" D. e) j; P. I/ w/ Z `- ?* Y
/ W1 l0 t( V7 t9 W
bpclear 3
2 L- C& Z! ^: y 删除编号3的断点2 I* {8 J- q3 L
0 V, R1 F5 f- m i) i7 }
bpclear
6 c) Q( N! k! q V/ K. U' w 删除所有断点
( f, Z$ V* G. X5 e& e9 W8 @5 H
3 z+ G' u' O, V% e8 } $ ^8 w' M/ T5 E9 }4 Y
, V: Q0 G- X! b: ]- R$ ?# C2 J跟蹤紀錄指令: trace
O9 n* F1 i+ w5 `% Q 例子:9 [9 `, u+ x: ?. W/ D$ N
trace 01.txt* l: a5 ~5 }! z+ \6 V
跟踪当前CPU运行的所有代码, 输出至文件01.txt3 T0 c, V5 T! @$ b
/ V( A( x1 h N. L0 M1 f, |( @ trace off- ^7 ~6 S9 q) ?( r- l- o# [6 [
停止跟踪, 并且关闭文件( _& H: n+ i' G1 X" ~8 l
9 m' F7 K4 j, q- J trace 01.txt,0) F& u* k# N7 z0 ^: Z4 B
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# \# M: y- l2 D d3 Z: A2 F0 c5 S0 I" z: O
trace off,0
) d; I- f7 W- m 停止跟踪编号为0的CPU, 并且关闭文件 n) H5 F2 w1 h: s
; q/ B8 Y' l3 J8 O0 ~4 }6 W
trace 01.txt,0,{tracelog "A=%02X ",a}( c) t( U/ x% V- O3 ]
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 V1 Y$ s9 l; k7 l& D9 V \
并且在每一行的前面, 写上"A=a "
3 }8 n1 _' J0 |2 R/ b. o$ ]! n "A=%02X ",a为一个C语言printf函数常用的输出格式, Y; r! `( t2 ^! K$ \; }: V2 o
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 ?3 a9 W1 D* h* p7 L! @
X表示为大写十六进制数# N; o1 P$ R0 x1 z: `
, Q# a( P) D. |2 w; X
$ Y* L' M, p& L& k8 V; P$ H# ]% _, x4 p# B$ I" \8 \6 `
内存直接写入指令: maincpu u* U% v. |: z/ A8 s
格式为 maincpu.[][]@地址=数据- u% a5 S" Z. `0 h% y' N
第一个[]:; u" ]7 e( a# }) P' r' k2 X
o 表示ROM地址" r$ a* U6 x9 N* V7 E
p 表示RAM地址
% J1 F4 l( A+ E( x" d
5 b! X0 b7 { J, P5 ?5 T 第二个[]: C& Q( s7 {* c! O2 h6 h
d 表示4字节& ^+ ?; \/ [+ R( d: E) L1 ^
w 表示2字节
]% L% z' s B2 R: P b 表示1字节8 v3 J4 S! g6 U- r# ^! V
1 l- V; f9 L2 k 例子:
: o7 m* C- u& s& I/ L5 Y4 z& P maincpu.ob@1234=FF
: m8 f# b [, I" g: l" a* @0 i8 W 在ROM地址1234处, 写入FF一个字节8 r. x- _5 Z( Y' l# ]# A$ h
( r2 L+ t5 ?7 T; v maincpu.ow@1234=4E71" Z3 I, ~* [ [3 Q( k; V
在ROM地址1234处, 写入4E 71两个字节
7 G& A) O" Y% y) |, k
* n* L% s. U! K6 J maincpu.od@1234=600A4E71: c' x1 r5 ~& e/ h
在ROM地址1234处, 写入60 0A 4E 71四个字节
v5 U7 i9 ^' D( h+ B$ o6 U. c
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写0 W" d$ l/ U! I; ~: z: X! L
& W: o% Q# ~7 k e9 B$ R* T& i1 A9 \6 X K3 ]4 p# k
其他:9 B% a/ a8 P6 V" P2 U# {5 f
dasm 输出档案名,地址,长度
1 O" j6 f' G& R' h$ A+ D 输出程序的反汇编代码( d1 G) S9 T' ?& P- e0 g
例子:
% C8 Z1 s' X" y dasm 01.txt,0,100000
7 w" M1 W8 ^- f: n# p5 G- h+ ?+ O, L. n' u 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
6 W+ x$ J& G1 ~) T: I. J* u# Y$ h
4 b: w' S8 X) [) @# g6 ?3 D softreset
0 t$ R% @9 H5 \/ u7 E6 F 游戏重启, 但不重新载入ROM, {- P( t& e) n1 l, D, W/ H
4 B: {) r4 h$ \- V# G, X4 O( s hardreset
0 ^% j# v k. o( \. A3 v" q1 B7 D, w 游戏重启, 且重新载入ROM; M0 z) R' j& {* Z8 o# T
* I# [ o" b; ~+ r% F1 b: y$ j snap xxx.png [, g ~; _2 N a1 y- `) D4 U# e
截图为xxx.png3 O3 A$ t. o5 H0 d% K$ U
& i/ I' @* w: q5 e' ^/ _; Q3 k
$ D. ^+ W$ x* L: Y* H8 j& d6 M$ L+ \
0 B+ S% Q( S+ k; X- ]
$ h& m: M/ D; z3 M4 ~( e; I" B热键:
+ R0 v$ E; [/ B6 W! H- Y, u3 V ~ 中断游戏
0 z, ]5 z; E- K# u7 s2 G, j F5 运行游戏( |% |, J! d2 I1 c( {# {9 N0 U1 R
F12 运行游戏且隐藏调试窗口- Y- C+ f: \/ |
F11 步入, 单步执行, 会进入子程序
# g8 M# {) X; Q! l F10 步过, 单步执行, 不会进入子程序
; S0 M; r# f! n' T3 R0 `' K Shift+F11 执行到子程序返回
. I$ y+ x7 a9 @- b7 N5 G Ctrl+M 内存浏览窗口
) _. p/ o$ T; T F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% ?5 `8 l3 y3 X, d( ]
, O+ ]: Z m, ~, E: q{:4_94:}
2 N( ~- Y. w7 Y/ C# J9 [
% R6 h- ^$ @4 P) t0 s- @ |
评分
-
1
查看全部评分
-
|