|
|
+ |- m4 g" G7 \2 {$ q# Z- ]很快速的整理我自己常用的指令. h; n7 a) G; ]& {" H" X" B
% y4 P5 N n4 n) Q( e
{:4_112:} N! }. E5 Y! X' J5 I
. q6 B+ f, R" E/ F$ J
MAME DEBUG常用指令
6 L# j! T1 x, f3 l8 e
: q# ]( P8 @5 `' e3 r内存搜寻: ci, cn, cl! D7 E5 N% }1 Q' N; w* S' x- Q
0 z# O# X, {+ \9 l7 Q) Q/ C ci- N$ A7 U! M3 O8 [+ h3 \2 _. T
搜寻任务初始化, 每次搜寻一开始一定要输入这指令" V8 \ u$ P" Z8 T$ O. h7 B+ i
+ l/ C+ J7 E# j4 T; @: J1 B, f
cn, t9 E. ]! v% K3 S( z1 J
搜寻指令
- n9 s- ~( w( Z# u' X 例子:0 A+ Y# ]: W3 @5 l& f
cn eq,60( I- }- x4 F: R' b
搜寻目标等于60 (十六进制)1 n1 m+ @/ d3 }( C
) n$ Q+ i' d: c$ Q# o' v4 q
cn eq,#96$ D! \0 U& E, R& x$ C9 s( m
搜寻目标等于96 (十进制)) m0 [6 J5 }" k1 O% q
) }# W& D4 {2 s c- K, T/ h cn eq* y( B4 y8 i5 Z& Q
搜寻目标的数值没有变化( [* S7 d3 s q3 @* {
) c$ d- ^3 M& d+ {! W" ~ j
cn ne3 ~4 y1 {/ B: D
搜寻目标的数值有变化
, E9 C3 ^# l' m3 R" l
0 |3 a1 n0 R" ^$ { cn +
. |* @& E" r, j7 V6 \ 搜寻目标的数值增加
8 W# D; X8 w8 u5 }! a& Q3 p
* E4 ?) i- Q7 z4 K6 N q! V/ ]; |% J0 ~ cn -1 H' i+ c' I. J( H3 \& \
搜寻目标的数值减少
: G' B p# q8 F" w* ?2 o# a# s
- y& i9 q+ V, m' } cn +,3
4 T7 L: M' K7 ^9 y3 s8 u8 \3 ~ 搜寻目标的数值增加3 (十六进制)) W# M! D/ W1 o8 w
, o1 _* h9 W3 m2 K) d9 N
cl" S- b. ~- A- Y+ [' s- N6 |6 c
列出所有搜寻结果5 x/ O5 R6 c5 W0 w( k8 Q
- i! Q' L, @6 \! Y! F6 z cl xxx.txt
1 s6 t1 Q5 w3 G 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 {. o. R+ i, x: C" v" O
! k1 z" x, C# X" C+ b* L
9 X" a! t- L5 y1 R内存监视点指令: wp, wplist, wpclear2 e' U; {" t4 `
例子:
; t$ B+ q5 P; P8 \# v. H wp 1234,1,r
; B# n# Z1 K( d" [$ O 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1+ I# E; c" Q% d5 H( I$ j
0 }9 g4 J4 ?; X6 i2 |; p9 k8 O wp 1234,2,w
$ g5 n$ r Z( j6 `) \+ ] 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 I% i' \7 n, x. G% u2 i
0 y: Y8 U! L1 ^' o5 y4 E, q1 z6 B4 e
wp 1234,6,rw
8 m) V# Z* n2 d2 j# J! d' f% D 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
- w9 D/ R. C) \6 e( n# ?! q9 u1 S- M. P3 s# I- M
wp 23456,a,w,wpdata == 1
0 C1 Q9 S) |5 i7 A 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ N! X0 s- a& [
* @. n; Z3 z$ J wplist
9 V8 d" x; B- J2 K. C, ]( G& k2 ~ 列出所有监视点) T3 K" t7 B7 z' x# V3 y
, U) w/ |# g6 T
wpclear 3' g9 h3 [ B5 _6 p" F: x
删除编号3的监视点
. L0 b2 H1 i' h0 |
X2 l* o. A1 k" ?0 ?) m" _ wpclear! ?1 x0 Y+ e' D( n) N
删除所有监视点
. G- m) O0 ]8 w9 l, E+ S! o7 V2 b( d, u T# k1 l7 m$ x7 o
/ p9 V: h' a; N# Q- t3 l# o3 ]+ Q S) _7 V& o
程序断点指令: bp, bplist, bpclear0 ~4 \0 W( K" ?! }
例子:
$ Z& M" |6 [$ y; W, T bp 1234" B# T# `, `9 |& Y6 q' N
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 [+ j' f: q" G
- s5 ]$ b1 V, m4 h bp 23456,a0 == 0 && a1 == 0# @& \9 `9 e$ |3 E
在地址23456下断, 且中断条件为a0等于0以及a1等于0
L7 |( z( L3 ?2 h+ Q8 s. z- W' R. E" ^8 L- o z" V
bplist
( `$ f9 b. I6 T, m* \1 @ 列出所有断点0 `* O+ U$ C3 U, _( ]" y9 @! V% k' o6 o
$ u% p: n# C3 Z6 k# u. Q
bpclear 3! p' ]% k( A2 H; k. d
删除编号3的断点& K3 E, q; W* T" y3 O+ D
, K# U& E- G& _
bpclear
. P, X$ A+ c N 删除所有断点
* J3 a; y x3 ]4 o, o! l) h' I s5 B" \6 W* g6 G
( e) g6 c* @9 @3 k* [* R$ I3 B
6 e' B# X5 b7 K5 n5 m: v- A跟蹤紀錄指令: trace3 h; X1 X) V" l" t6 G
例子:/ T1 T/ `- p8 Q0 y5 g
trace 01.txt5 ]. I+ C8 z) V' w% k" ^& v
跟踪当前CPU运行的所有代码, 输出至文件01.txt
% v [$ t6 l7 X3 E
0 C9 e2 y! @( q: ^ trace off8 `$ z: ^) x, [" k
停止跟踪, 并且关闭文件
5 l4 m* Q! P6 ~+ ]0 w3 l; `4 Z4 {& V- n& d
trace 01.txt,0' l% A- M. `- Q' ^$ ~3 X
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% ]: [8 M3 Q, `
: D, P" o* ^) u+ W; r% r3 m trace off,0
2 O* T& L8 g1 y! D3 T% Q2 K 停止跟踪编号为0的CPU, 并且关闭文件
- U& L' g, ]& r$ T$ E0 s; K# S% q1 y5 {! j! `9 R6 l
trace 01.txt,0,{tracelog "A=%02X ",a}
; w0 |3 S) c& l, U) Z$ M7 ]/ z) r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
s! T- q; \ e0 W$ U 并且在每一行的前面, 写上"A=a "
; w* K$ g. M/ v, D9 z; ~0 @ "A=%02X ",a为一个C语言printf函数常用的输出格式
, l, u4 q) R# s7 ? 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入+ Z( ?3 K# d* P0 j. a; U
X表示为大写十六进制数/ e$ ]$ r; Y% J& M
4 O0 C% a2 |1 R3 s# ?
! m' t+ m# N0 S& ~; ]5 ~$ z% m0 [3 w- U) {; b
内存直接写入指令: maincpu
$ o2 j3 r" `& o% [. ^ 格式为 maincpu.[][]@地址=数据6 ~2 B* m( t, a. W7 Y
第一个[]:
/ s7 ^1 o- I! F& }# n1 A( g6 R o 表示ROM地址
* W, _7 K, Q. n. L' f p 表示RAM地址& B7 c3 w' H5 n/ M
; x- N2 u- L4 ~: S' v 第二个[]:9 \/ t1 ?& S& h$ i
d 表示4字节
1 z" x9 e- @; a: C w 表示2字节
- Q( E0 I: O* v4 ~5 v b 表示1字节
]) q# r( r, Z1 I) @" D) Y% Z) ~# d3 L5 N+ h
例子:# b+ i, k7 Q0 ?9 }: |
maincpu.ob@1234=FF. i5 t# O& F4 i& f. u% B- Y
在ROM地址1234处, 写入FF一个字节9 A$ K: }$ ^: r1 B" U# v# J
$ Q) l7 a: P9 H6 g l9 g maincpu.ow@1234=4E719 x! c: ^( i/ n, }/ {
在ROM地址1234处, 写入4E 71两个字节+ d' w5 I5 D: ~+ r
. W" K. v. Q; f' o' M R
maincpu.od@1234=600A4E71
& I' c) l8 N+ b- h7 D3 D* h 在ROM地址1234处, 写入60 0A 4E 71四个字节: k$ R$ t, ~3 \0 o, I+ P
" p- P F6 {; I+ u2 J 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
k# v4 k2 Z* c/ G3 F ) l" O5 ~5 {5 K! [) J8 O
; a; b4 P" m6 d3 M! l! `8 V其他:
/ T9 b, O9 E' r dasm 输出档案名,地址,长度0 ~% v0 K* |2 l9 g% B
输出程序的反汇编代码
2 l0 f' e+ E. G 例子:
3 k& f H" ]5 P; e dasm 01.txt,0,100000
. `) A! F7 Q# F! d7 ]4 m4 e 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, b) E( |7 Y: ?" _1 G) {/ m( p* C/ o
9 v4 O# b( g4 U) }* d! ? softreset5 b8 r' r$ n- W" [! R% `
游戏重启, 但不重新载入ROM1 W7 M: T4 D! x6 ^* C+ u& R
0 y- Y2 n* z: o* W1 d" q
hardreset
# C! W) x9 j- r% `' n7 J3 y6 k4 b 游戏重启, 且重新载入ROM% X, t8 p6 D+ L3 C7 Q& w0 ]
8 l: `! c! |! ]4 H9 u
snap xxx.png0 Q2 ?- C: q) S9 r
截图为xxx.png# l+ ~, a; X5 I$ w3 x" \
8 U" @& J/ ? m( P/ l9 i8 f
' y2 I5 H0 {5 X4 w* w' x
7 @8 M! i+ J! z: l
: \( O9 s1 N/ c: |
热键:4 X4 |; A9 H: A8 c5 A/ F+ I2 u8 J
~ 中断游戏
) j3 D3 Z! J: U& c3 A- g1 \6 E- R+ E F5 运行游戏8 j# J: A2 Z# z! {/ i! T5 z# p1 w# q+ Q
F12 运行游戏且隐藏调试窗口5 w5 x6 y: t! z3 w9 R" b7 s- E- u
F11 步入, 单步执行, 会进入子程序/ \ \ G8 f( Z/ e: x" t
F10 步过, 单步执行, 不会进入子程序& U% U1 Z: @2 v6 ^4 J
Shift+F11 执行到子程序返回) z1 D8 _& P$ V3 O
Ctrl+M 内存浏览窗口# `2 D; |. X$ ?1 \ A* X! P1 `
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU |1 _; a" q! m, k1 `" q
8 e" z3 n% u, F{:4_94:}
2 r. Z! d) T! J+ J; K7 H. R! m- ^3 P" T) u
|
评分
-
1
查看全部评分
-
|