|
6 U+ K3 K; N2 `; v0 d8 N6 k
很快速的整理我自己常用的指令 E) r) x4 j- c$ {$ I K
. @/ R4 g* k* \{:4_112:} 1 G0 l+ Y+ g8 S: y9 D7 X
$ z' ~& ?' c+ r% x2 C
MAME DEBUG常用指令
! d* G3 M: F# y4 B3 \9 _5 @
5 Y- k% f, s& k9 W4 ]6 y内存搜寻: ci, cn, cl- }% t x; H" K' f1 s! M) T/ h
: p' i8 W) \ K3 M* g2 ?$ N ci
9 X- O! S+ X9 s# L8 B& {& P9 g6 k4 I 搜寻任务初始化, 每次搜寻一开始一定要输入这指令- n& S3 |" q. ?7 y# {2 W$ E
/ `4 d) f. h" w. t, H cn
% E. t8 Y, I7 Z. d/ j) A2 v 搜寻指令& z7 Z7 z8 b5 u$ S& m* I( u
例子:2 ~/ y) f+ f5 c, f$ \
cn eq,60
e2 d8 h8 h3 B9 M; A# U. G% n 搜寻目标等于60 (十六进制)
6 S( I3 t6 G7 c4 Y
( V, d5 ?; I/ `* _0 W4 _. F5 o cn eq,#96# ^# V3 K* {* l$ } m! a$ Z. L, [5 N
搜寻目标等于96 (十进制)
* N& D) c2 C" u" P W2 I
, N2 f. e. P" a7 U cn eq( m0 b4 w5 c7 O6 J( S; ^
搜寻目标的数值没有变化' S, Z1 {5 \ P N; i
) [' z" P0 D$ N$ N, Y2 R( N cn ne
6 D5 U% `: t: c: C. X 搜寻目标的数值有变化
$ O& e3 S" U8 G6 C8 r
0 s T9 l2 p" b' V1 e7 K cn +
' U( o! B9 d a3 A6 `1 R 搜寻目标的数值增加5 x; J9 [. l) w+ {+ S% H' w% f N i
/ W T! q' G9 X1 |2 a cn -
, @; j! \! B' P" C 搜寻目标的数值减少
: n# M# B! a& g" a 7 O3 \( ?+ p% h
cn +,3
8 D1 |7 A f" r+ a 搜寻目标的数值增加3 (十六进制)
( F" |9 y, R9 }4 }; `; A
6 T" O- C5 f% \8 v2 F M cl
% l+ S% U, F/ _ 列出所有搜寻结果, J Z" l0 v8 ]2 b: R; \
2 L0 h" e8 j. t
cl xxx.txt
. X9 y c- U4 t% g2 w6 _ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- W: K% w% N+ q: o
- _* g+ E/ \1 Y: Q$ m: m) n5 w ! _0 R- S+ G6 @: T0 a
内存监视点指令: wp, wplist, wpclear
2 R3 B/ x, a' S0 U4 z; ~ 例子:: w5 N" v0 Z1 \$ ~
wp 1234,1,r, Y, G0 ?( _, l* Q+ S
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) P4 c1 h7 l' M4 X4 F' M; w: }5 i$ ]
) T& Y5 W: A: t( p
wp 1234,2,w- Y9 L. p/ P% y" V. C- A
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* S# M0 _* {2 d# |
: G" [; Z3 e4 p wp 1234,6,rw
( s. Y/ o5 L3 y6 ?% O- v 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
) ~) L5 P' a$ E% r% ]
, B- e" O' U# C wp 23456,a,w,wpdata == 1( T% y( m3 T4 U
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
/ G. B- O3 G4 n. o& B0 [
. [0 R8 j" m( s# j- K( O wplist' |9 d; D2 Z; Q7 _: x/ ?3 d' n
列出所有监视点/ |+ V2 f/ V% ?: s
& x i& F' E9 r* l
wpclear 3- S. i: @: o9 Z1 F) E
删除编号3的监视点
6 B J+ H5 K$ q
' N- A) _7 d0 H% [" y6 M wpclear
) l, H) M6 |! A 删除所有监视点
& e% ^6 U' m. Z) `3 f
$ |% H8 Y/ i K
4 P, C' [) A8 b. j) k' \& n+ n T0 q% u! c
程序断点指令: bp, bplist, bpclear
; i' _' L$ k$ ?; e( ?% H: o 例子:7 d) O6 G& ]* v$ G8 P W* O
bp 1234) Z" t9 W, u) u R$ F
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ }! ^, u1 _ S/ S, ]1 m4 P3 @
7 H$ V$ {" A1 q: I* }( B
bp 23456,a0 == 0 && a1 == 0
" ^. v6 M Q( X; B 在地址23456下断, 且中断条件为a0等于0以及a1等于0; z1 l" Y( H1 A7 k" a* T
% B3 {7 X/ f3 f
bplist: |+ v& Z, g- r
列出所有断点9 h) E. y. i+ ]7 C- ]- E
. W/ I0 m+ g) l* V bpclear 3- R5 E7 M0 y. _) d! _: p
删除编号3的断点9 U" S5 o& I- \' I, L( d/ D) i
4 |7 M1 T) C7 G* C$ |# J3 z
bpclear
0 H- e6 N- b' I% h* s- n" g 删除所有断点
N& @( Y$ V, V* \1 R% r) u) I' B# w$ M( `' e2 k Y7 K
* d& S. w3 v3 _: W
4 Z8 L8 c* \: |. d: g* w! v跟蹤紀錄指令: trace; V5 R: c! f2 O2 Z7 [: ?6 V
例子:- Y* N) W# J* h+ l$ F- E- x
trace 01.txt- u3 R4 w& n. E( e# q- n
跟踪当前CPU运行的所有代码, 输出至文件01.txt0 t* P N+ x$ g" x
, R/ w, [/ k* P A% |( p* U# ]
trace off
0 {& g; ~0 x0 ?8 N 停止跟踪, 并且关闭文件
5 a" n8 y& w* [' s+ D t* Y$ {$ n( H
trace 01.txt,06 _1 n. _: T( w- S$ a2 J
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 b9 K# C3 D7 e+ C, ~7 L
# j: s9 Q6 E* Q2 g; _. A+ f
trace off,0
( n2 O* G* O, s2 m! k* z8 r2 R1 d 停止跟踪编号为0的CPU, 并且关闭文件
( ^$ ^( _) u+ F% L$ h* C5 {. N3 @, T% t4 z, J0 @
trace 01.txt,0,{tracelog "A=%02X ",a}+ Y) y4 D, {, k' \: y" K, A7 o
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt % C" y! ~, s S7 R) s$ B, B
并且在每一行的前面, 写上"A=a "7 a7 Y; X$ `: `. O$ O% m
"A=%02X ",a为一个C语言printf函数常用的输出格式! c9 M" E7 H9 n$ H' ~" x
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ |9 e* B! G5 k- ?4 I3 [) k8 ?
X表示为大写十六进制数
- } c# ?$ N6 ? u
Y% ^7 ] [1 b7 \% f8 m2 W8 j/ x! u3 L! Z6 a! q
- e' _, [( f6 _% R0 g5 ~内存直接写入指令: maincpu, ^2 s3 j" @6 L1 L- y# ^) c
格式为 maincpu.[][]@地址=数据
6 x5 m# j; a" s5 k6 R; M 第一个[]:$ p2 I- H- }; V( k1 @+ g9 D/ u* I
o 表示ROM地址: W6 D) }5 c: {$ ~1 N* z- ?
p 表示RAM地址
" d i! q' H A7 f
1 `- z2 x! i* ]8 V% X% r 第二个[]:9 D: U5 p+ k8 c% l4 X& i( j
d 表示4字节
# i" s7 I$ z1 Q* V( n9 j4 t2 C w 表示2字节
( M' ?3 ?0 l0 U0 b+ [" \ E( E/ F b 表示1字节, \, `, o' W/ Q' f3 J0 }
" e [. L/ y% v# X5 l/ `+ a- h 例子:
- l- r# s0 D, R* X9 G* I& T maincpu.ob@1234=FF
- u2 t3 `& ^5 ^. e 在ROM地址1234处, 写入FF一个字节
, M( I2 i& X' {6 b# _7 q& V7 D8 p* l/ `9 S& B2 [. S" R6 ?8 c
maincpu.ow@1234=4E71
+ c) ]) a2 V2 E- R# s 在ROM地址1234处, 写入4E 71两个字节
# {- t% G' H+ ^ f
: |, h4 B3 f! M maincpu.od@1234=600A4E71# ~* h5 R7 E; y4 D
在ROM地址1234处, 写入60 0A 4E 71四个字节, F/ S7 A+ @: ?- y
4 [! j/ B' A+ e- I; w Q; \2 G
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& Q9 O6 C+ D: j * l) ]" w. E N
, D- c3 f& u& s. C
其他:
" W: q; a/ V0 e9 Q dasm 输出档案名,地址,长度- Y: X# t0 O% d% E
输出程序的反汇编代码5 ]4 z: W3 t" B$ Z
例子:2 ` [8 K6 t& ~- o; q
dasm 01.txt,0,1000004 L2 N/ z) N$ B8 W6 v
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
, t% S( M: O8 c; V P5 ^- \5 W |0 H2 G. O$ T) X# N
softreset7 \/ M; [8 B8 m& q" d; V9 p
游戏重启, 但不重新载入ROM
! L6 | ^8 U, b' t' E9 P) N* L! E1 | k/ R* ?7 m
hardreset
7 n! n. E, ?: n# g8 W 游戏重启, 且重新载入ROM( s+ K2 ?- o7 s x |, o& v
. C( H0 m/ ]; ?( E w+ y4 I, K# e8 |
snap xxx.png
% w, F! }1 f8 i7 y/ O 截图为xxx.png6 W: h( ]/ w$ e0 N# P
: b" d! E& `! l+ V% e) v: g% A
3 Z3 {7 M! H& Q
5 o% _( s% }: y2 r& p* F$ r
& |# u/ j h9 j; I: o+ L热键:
' A' f& A) s) p/ i ~ 中断游戏
- [6 p" A" T: r9 T F5 运行游戏5 g' F0 P1 ?) W) { D2 A
F12 运行游戏且隐藏调试窗口
& R0 `6 x- b7 { d F11 步入, 单步执行, 会进入子程序
3 r4 l* |4 C, ]2 s' ]- P F10 步过, 单步执行, 不会进入子程序: X, ~$ Y6 Z9 w- B; O
Shift+F11 执行到子程序返回
( _3 B# l) |. U: ?% Z9 j0 p Ctrl+M 内存浏览窗口$ H/ u+ R& Q# M) R+ ?5 S1 y
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU8 \; [7 X$ r1 b$ _# y( m
2 _; K- w) J# a4 G8 D& g+ m& l
{:4_94:}
5 N4 [2 ]" ^; i) t7 {4 P* D# T$ V
* T. p7 W5 B1 _+ C. z8 y9 A5 r |
评分
-
1
查看全部评分
-
|