|
|
- B) E4 }: N: O6 [. U- f& ~) G很快速的整理我自己常用的指令. s l1 f1 [, X3 m- n" G% G
9 ~1 h# L- j/ s |' m
{:4_112:}
% S/ |7 P7 P+ K$ K- J# |( n1 ?' y* P4 ]% x
MAME DEBUG常用指令& r, w7 C+ r8 s
; Z% l: g7 i$ f; P2 x9 D内存搜寻: ci, cn, cl. h$ U$ j( f6 \/ s9 S0 l
( I1 U$ i* X4 I( j8 w* v+ |/ D
ci
. S. v) C- c0 U0 \7 u* M 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
9 S& a z8 p+ t) |5 T! q# e# m
~. @. s2 ~) H. i3 P# t# B cn$ G6 C( u* A& F& L
搜寻指令
6 h5 G& ?2 D) Q8 F- f) ] 例子:
: _1 G- \1 N. ~7 U9 Y6 B* \# ? cn eq,60! i+ R5 B q6 H9 Y% D
搜寻目标等于60 (十六进制)+ G7 q: v* m/ G5 k
' w8 N2 q3 M7 Y) P3 c$ D
cn eq,#96
* ]+ d7 d r. _& u( h 搜寻目标等于96 (十进制)
: d5 ?- u; \' E: e! U
& P9 H" ?' Y% b# V cn eq! _( B; y# M0 `- o# a
搜寻目标的数值没有变化* w( [7 D, C* t6 e; @' X
9 F) u* l; _3 @; ^. ~8 @: ]$ I cn ne
! H7 o: D" y. t D 搜寻目标的数值有变化8 |) X2 o" G& `1 s
]& ~$ _1 e5 p
cn +0 t9 o! c/ c+ l6 q( J% {
搜寻目标的数值增加
! J& L4 s, o6 r3 @- |; l- Q; ?1 ^6 Z % K ?& S7 }) z7 e
cn -& Z5 t/ q+ Z+ h& B
搜寻目标的数值减少2 d3 V2 c" G3 W5 d, i% l% |
) ]/ S3 Y0 j$ Y$ I! b cn +,3! y. C- |/ e8 B, U5 }
搜寻目标的数值增加3 (十六进制)2 O# I$ O& N- Q: w; U
H ]) V# F) a- p% m N! ~
cl
% [4 g* X9 `+ D) H, E, S& G7 ~# R 列出所有搜寻结果
4 i/ V8 @9 J4 \) T' p( Q; |9 P7 R0 s" J
cl xxx.txt7 ?* K, O) J1 f, g5 h
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" ?! t% h5 _0 J/ M- k. ]) Y8 s+ \, o
9 ~5 f" L6 V; i& R5 I- r. O+ t ?内存监视点指令: wp, wplist, wpclear' D2 ^9 M% Q8 n: H3 m& j& f) V/ d; R" \6 [
例子:: _0 i3 {, y: {" C D6 d
wp 1234,1,r
4 Q, l! q! W: w+ h( c, U* q 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 C8 t; i$ A1 W8 O/ B7 x2 w9 p, o/ e7 d/ g
wp 1234,2,w# w+ x/ a' a% `: D1 K: C, |. a, x
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- w: T* K1 u9 Q K/ t- f: `
4 m8 g) o" d3 Y" k- a wp 1234,6,rw
8 I4 Y( a& b% ?- z+ O 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6 V, ], Y7 b1 [! j
: v* |) {8 T [# w/ a! Q4 e9 T wp 23456,a,w,wpdata == 1
" k6 q5 k& j: o: |6 V: n0 Y# L 在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 q" t2 p( z( Y
" h+ h0 `* _8 Y2 f5 {, H wplist/ f4 J) [3 W3 T$ ^
列出所有监视点) o) D. y8 z3 w, M) \) [* X
8 ]: A. J, y- O1 Q B wpclear 36 Z' s2 W9 C, W! r- H
删除编号3的监视点
, t2 h% S) Y! A0 E/ C
0 g& D! Q# s! y" v s wpclear
: U6 b2 v9 E0 W A: |: w 删除所有监视点
, c& q$ X6 _- s5 `
# O1 Z9 m2 p, l1 {
1 Q/ p) k5 U, S. E, y
! m7 d2 l+ h$ H2 |+ Y8 A8 A程序断点指令: bp, bplist, bpclear
1 A0 G* w, y$ z 例子:
6 A! {/ I: I' X9 s bp 1234
- {0 x! g4 o8 O+ F 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断1 y5 j. ]5 s; c/ c* L
1 }6 U. W0 v4 r. n: \6 N bp 23456,a0 == 0 && a1 == 0' B2 r( m2 w1 [2 g4 C2 m
在地址23456下断, 且中断条件为a0等于0以及a1等于0& v _2 W! W2 i; Q8 H! @+ A
1 [) U0 | n. p, m# h; D; n bplist# W# @2 f" t+ p' E' D, n, k% k
列出所有断点
" r* K! u1 @% w. @6 H3 `5 l) @- p$ H0 O& m2 G# J' Q( H6 @7 s: O3 g
bpclear 3
3 z! D6 x7 x' _; |" P1 O8 e 删除编号3的断点
% g3 |+ X0 r5 |8 Z# s$ R9 e& m! Y2 o% N0 @4 l' D& j
bpclear8 E: J' P5 R: E9 f# `
删除所有断点
0 I; z: Q1 J g) U# T- P+ c Z' h; H1 c, j3 M
0 u& A9 F4 l- G: P$ _5 Y+ {! _8 @
* n+ n3 U/ O5 T
跟蹤紀錄指令: trace
/ q$ `5 H8 e! K* l 例子:
, r6 G% K1 v( m" u( D trace 01.txt2 `& W+ H% D7 v: O
跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ p* L0 a/ A+ ~$ t L# }7 u- j3 j# @' h2 U6 t% P
trace off6 |: G4 L5 Z( C: j, D3 f) c: g; d
停止跟踪, 并且关闭文件# N1 T5 x6 ^/ V# {, @. ~
! O4 t8 C! p7 i# T2 P0 P% | trace 01.txt,04 \$ l- j8 |/ {
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 U1 r0 o" a4 i& x; i8 O) V- q5 x$ b- E% v7 f- G5 M& m
trace off,0
' N% B* G2 A$ p) H( I 停止跟踪编号为0的CPU, 并且关闭文件
8 j0 j7 B0 x/ U) l5 C" V/ f2 u5 `8 T/ V# k9 [, g
trace 01.txt,0,{tracelog "A=%02X ",a}
3 F6 @% p( i( ?+ i$ c& U! x3 i 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( C' e. e% ]- Z B: b( i
并且在每一行的前面, 写上"A=a "
; x" X) P4 N) i" p$ |1 ~' V& N "A=%02X ",a为一个C语言printf函数常用的输出格式3 O4 s8 m( C( y8 V+ K, y
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! N0 z. q' \+ r6 I# q3 }! s
X表示为大写十六进制数! c8 ]. O( ^' c+ Z B
2 V8 r/ I, v9 E9 h5 l! e8 @: Q Q% A; ?! S2 E4 ?; a, _
1 |" s; c/ r. d
内存直接写入指令: maincpu
/ l* Q7 D8 p9 b( c( h! X 格式为 maincpu.[][]@地址=数据
; U1 F' v% b2 }/ n1 j 第一个[]:
0 z; @7 o! d! V! W/ T+ |/ E, h o 表示ROM地址4 a$ {) c9 v; ?- z, ~
p 表示RAM地址
5 L5 g. f: ]+ e l2 G$ c/ P# e/ \1 a- o6 m# h' s
第二个[]:5 V! I- q% v1 o$ u" ~$ _& f8 p
d 表示4字节
" r" ~$ f! A1 ~7 e% R+ c, U; L* _" b w 表示2字节& c2 b7 f5 x |, X% F
b 表示1字节
8 Z1 N% Z: p: q5 S' C9 l p
. W, w' S* k! R0 r 例子:& x* K8 e ]8 o7 m* e2 s
maincpu.ob@1234=FF
X( C% D- d8 B) X+ S5 R 在ROM地址1234处, 写入FF一个字节; h7 J) l: g4 {) M O
7 y7 Y& D. d/ W# U: i; V
maincpu.ow@1234=4E71
- U& g1 k$ y$ p: `' l7 a" U. ?; q 在ROM地址1234处, 写入4E 71两个字节
# b' N; Y5 A- ~8 }* R# h2 u; p" X; \
maincpu.od@1234=600A4E71
3 A1 u! L. x; L {4 y8 k, o$ I& l 在ROM地址1234处, 写入60 0A 4E 71四个字节, t1 A4 R$ g Z6 B, f! E/ ]- v
v2 x/ J* J/ u2 y! e4 n7 c 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写/ y: y2 t# ~# @- h) ~& ~. P h
: B( V5 U2 W0 J/ s
) y# i- _# [2 [+ n6 R7 P% K其他:
: q7 f o6 d# `( ?8 x0 ?% I# t$ W! S dasm 输出档案名,地址,长度
Y4 I# q3 j" l) V6 y9 U* W& Z$ U 输出程序的反汇编代码
3 o# e5 F+ H: y2 w 例子:
- V" i/ `- J6 r5 \9 I0 J/ V# g dasm 01.txt,0,100000
) S1 D$ Q, M+ f 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% ~' v1 X6 Q" T7 K/ ~7 m
% w: }' |6 G2 r" P
softreset
b8 P0 @& a; n9 I4 I 游戏重启, 但不重新载入ROM* {; S' _: U5 y5 H+ `$ x. j
, `: }3 H8 u3 g/ }
hardreset
# s2 m7 I- o% [' Q+ z: |: H 游戏重启, 且重新载入ROM/ L1 ?$ l) n. e- O
$ F. k& K2 I6 J
snap xxx.png
4 u! {7 G0 [, ?* K" }3 y3 Q z 截图为xxx.png
. U' d7 s/ V0 g# _7 V, Q1 |3 i6 U3 d @; n; b; C
|( E9 Y2 u; @ {
6 R/ K9 ? S# n 4 C- V# Q n4 { R4 _- q
热键:: S, h& Y" c, C! ?( ^3 |
~ 中断游戏
1 e0 a9 G- O0 O/ A8 g; R. P8 l F5 运行游戏. D4 j/ r" d2 {% h9 ]
F12 运行游戏且隐藏调试窗口/ h7 y6 o9 u: T5 Y4 q k, g# q5 E
F11 步入, 单步执行, 会进入子程序+ g- G. d9 }0 `, i* }# S
F10 步过, 单步执行, 不会进入子程序
5 ^6 v/ l; r( b5 D. e' {( M Shift+F11 执行到子程序返回
1 N6 a# i+ f' ^( V$ j, N, g4 s Ctrl+M 内存浏览窗口1 u& A& r0 A4 F c2 Y5 q, }
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( t4 W8 Z9 w4 a
0 T9 V) Z; E: b' v
{:4_94:} & @+ u, e/ {% I5 ]9 i0 x8 t
3 S5 R5 g6 I- a |
评分
-
1
查看全部评分
-
|