|
|
+ S! \1 i( N) W ?! M& ~! N很快速的整理我自己常用的指令% I( \9 f+ [7 ]' u! @) C" \
8 [) U; o# s, \
{:4_112:} _; O6 f' } }2 r3 D2 B
D6 H+ I8 }! T3 A. _1 }9 f
MAME DEBUG常用指令2 @# h5 C6 D: s1 V
, e) L* I2 T# n3 Y/ C2 @; j内存搜寻: ci, cn, cl
; q5 \- H% Y5 O* B# t/ A0 W, z5 P: p5 B! v) k8 h
ci
& m, f* P- @% b. F 搜寻任务初始化, 每次搜寻一开始一定要输入这指令( Z2 F8 r% x: C: M
' e+ g) G& F* c7 R, g; n2 I cn& S6 b5 a: }8 U2 r/ r2 R
搜寻指令6 p* C, N, v) X& ]! {
例子:
, ~# y3 s9 ~2 b! }! c cn eq,601 P. T' a# t6 z
搜寻目标等于60 (十六进制)
. x( b) v2 ?: Q( i1 A7 y5 h . |; Y1 I: H) q' E0 I& o0 j
cn eq,#96
: ^8 n3 _3 G& g" v( F/ w& q& B7 H 搜寻目标等于96 (十进制)2 H; _. _( V. G2 A% A0 Q
. L) r# c* i8 p+ @5 u/ F3 h
cn eq' m; m+ K& u7 p9 v$ W& s( N
搜寻目标的数值没有变化
5 i0 q' o9 [: F. B# k
- u9 w, g4 D( C; Z O% V# k cn ne/ r# `5 _" I/ Y4 n* \# Z/ m1 O0 l
搜寻目标的数值有变化* C/ j) |' m5 t) ~
6 ^7 i- B) q& _# F
cn +
' I. z' b3 f6 [* l4 W6 l1 ~; O 搜寻目标的数值增加
7 g* S, B6 T# A% G n% p3 Y7 `
# t. y& I9 d3 d& @3 d \ v, K5 | cn -1 L* Q# n( j, ^* c5 H' c! h- L+ o
搜寻目标的数值减少. [: A& Y3 s. K% f1 \; t! p
* x& z, u7 b* A5 f6 Y; m cn +,3
$ `' J' F/ p s9 ~' C 搜寻目标的数值增加3 (十六进制)
7 b7 J- |) P( b( O9 |2 H: l# l& M) |
! D9 K6 A8 V u cl
/ A# P$ ]' Q# q& e 列出所有搜寻结果) _0 t4 Z7 b0 b3 W
+ G0 @4 A$ j: Y; [/ y
cl xxx.txt
6 m \8 @+ j1 r 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" K7 Y7 p7 U5 X) x* r! |
: e+ w% U4 `, ~
5 p, v) ?7 U3 ]) S" A内存监视点指令: wp, wplist, wpclear
0 \: Q# J8 j, L/ y# n8 W! j, Z4 { Y 例子:
4 U0 p& w5 ^) e/ t wp 1234,1,r
) M9 O4 P5 d, T$ ` 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度12 r4 ~7 C! d- _3 s3 ~8 s* P
- `, z' p5 A3 E: Z5 D5 w wp 1234,2,w/ k9 |. v; D' m$ D3 r$ W
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 k; L+ ~6 D! b& p! G- E3 d' c
' p& G/ Y+ G- S9 D( a2 @% ~1 ]
wp 1234,6,rw
) Y+ K* w; p2 s( s 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) a1 P8 R5 h& O) E
% O/ m1 {+ F! F e wp 23456,a,w,wpdata == 1
+ P. p; C: \" f6 w& q' Q( B 在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 n) ~9 W$ A, B. R9 i( ]
; u' \. O1 Z1 n! ^7 g f' ^' t
wplist% ^+ d2 N3 s' X& |* u) o
列出所有监视点
& W" q* o3 `5 d# R Z' m4 f2 I6 A, p. ~, \0 g& c* s5 H4 t ?$ C0 N
wpclear 3' o. S: M \- J. Q# x. Z
删除编号3的监视点; b# n% a- f+ m2 z8 _
! y1 T/ b6 b$ {: v. n
wpclear$ s5 O4 i: p8 p" p- M" X6 A
删除所有监视点+ A& M+ D9 [! f. H4 x$ J1 G
; M: K* g5 ?+ `) d: _3 Y1 ~' G
- @# \; C7 J4 P M3 p, y; K# ~6 {' d& q
程序断点指令: bp, bplist, bpclear
* M! ^ d& R3 x8 A 例子:9 b1 e6 x8 D& t0 U0 z! ?
bp 1234
/ J3 M5 Z+ r2 l6 J- W# G j 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% j/ ^% F M; l
4 {" s* `4 X5 w3 h bp 23456,a0 == 0 && a1 == 0 X1 F8 q, m* b9 V
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; Y9 u# T: \( [2 C0 c+ e# p6 j8 n7 i" e& b/ ?
bplist1 l( {- a r( |) l( Z' o
列出所有断点* \' v6 m t; n- r* J$ J/ K
) z6 G/ P. g) U, m
bpclear 3
) q- w, G3 I+ D$ @4 p: M 删除编号3的断点
7 o+ V, o0 h8 o! D. L t5 \! S0 c3 G
bpclear
% E. m, t! M7 a& O' H 删除所有断点
8 ] C4 H, {5 ]# T1 N. V! t0 ]6 y+ L8 Y5 g) |1 I
% K! |9 v/ W9 R0 F
* ?& b! ? z5 {6 Q跟蹤紀錄指令: trace3 X+ J3 l% W c& r; a
例子:- V( N. z$ N) B2 q
trace 01.txt
7 k' `7 Z: X! J& ~# \ 跟踪当前CPU运行的所有代码, 输出至文件01.txt" d% @8 w9 |) k* S" ` j/ T
/ S3 E+ S0 \2 c/ I trace off
. M7 h( t2 E$ {' y* t) W 停止跟踪, 并且关闭文件3 ]8 t( J, a9 u" P# E% a
2 x- k& R X# i' }/ F
trace 01.txt,0* v" _- A4 u# g/ g" h: l
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 W2 |& f1 ~; f& `. A* c; E$ o2 C: Z3 p/ E& y
trace off,03 t2 E5 k# ~6 T( ^
停止跟踪编号为0的CPU, 并且关闭文件0 U$ y* |; u3 W: Y" ?' j6 G
8 }( y+ \" @$ {3 U trace 01.txt,0,{tracelog "A=%02X ",a}
- r! M" t9 h+ I 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" {( r2 r# h/ M1 W1 ?. D 并且在每一行的前面, 写上"A=a "
d/ f! `0 t& V! V "A=%02X ",a为一个C语言printf函数常用的输出格式" z( p7 h& l1 E7 f. ]/ q
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ i( w9 I: d7 C# Q2 B) w
X表示为大写十六进制数0 _+ i& j$ \: l3 v
7 O6 W2 S, @( [1 n
% x. X( N$ l3 `8 M/ [2 f, |) y% m, f- M4 D% t
内存直接写入指令: maincpu
& B/ x6 G, [* z1 j" t 格式为 maincpu.[][]@地址=数据
5 e" v( H! R8 } 第一个[]:% ]) D8 i T! v
o 表示ROM地址
; H, X8 U% e6 j% Y# W p 表示RAM地址, y# l) j+ m. p( y" i P/ C
2 q1 V, P; O) o+ [7 R3 y5 H/ U
第二个[]:
( Z3 Y% r# r' u d 表示4字节5 P; q3 `4 r0 w, C
w 表示2字节
% Z# O" t, `$ ]0 w* l; q b 表示1字节. N+ l4 ]: Z" r, G% ]+ ~ O
% b( {( y0 i& A0 k* w 例子:
2 _% ^4 Y4 v4 z' ^7 x" }8 B6 O maincpu.ob@1234=FF
$ L3 _/ z0 ^/ H6 ?' m 在ROM地址1234处, 写入FF一个字节
' r; Q! [% x8 g, h+ S/ }* D! w: y" I2 D$ ?) }' C& g1 S
maincpu.ow@1234=4E71, S1 |4 F+ Y: G2 Q4 U' J
在ROM地址1234处, 写入4E 71两个字节
6 t1 t. `& l2 I5 P7 y- T, e& w
M( `, g2 u* U$ y! Q7 \3 c maincpu.od@1234=600A4E71* i8 b+ ?1 G! G
在ROM地址1234处, 写入60 0A 4E 71四个字节0 _ h* o0 d2 w% h! n: M
$ g" A! L3 b; k3 J5 k7 |- j 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. f# L; l( x0 j' ?+ H* x! I
f; K2 q( l7 J* d2 c3 t/ a$ [
) d, q0 R7 w0 O, J1 W5 X2 q
其他:0 q% O+ g- s8 M8 z& k1 \5 T8 D2 I
dasm 输出档案名,地址,长度
! U$ g) [ q" l 输出程序的反汇编代码5 t/ D/ {/ v8 j, U5 Y
例子:; W$ S7 Y- D8 m9 h( p, e# C; `
dasm 01.txt,0,1000006 j/ d* K! u- s, A# x( j2 N
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( S o: L* K5 Y) Q, [4 X1 P- i% k/ ]; U, }# J7 ~+ _$ r, K
softreset- j- ], C4 K/ O o, t
游戏重启, 但不重新载入ROM' c9 Y1 A3 E+ ^6 W) r5 i2 m
) u# j3 D% u+ k9 U& V1 U9 I
hardreset
) g1 O( ?6 b& ~! w4 a | 游戏重启, 且重新载入ROM2 B2 W G1 w- b+ \; t8 Z: Q
( D6 ?" h- c* r/ f5 H0 q! ~
snap xxx.png
6 D8 r" M: k4 N. @0 l4 j. E9 Q- b8 H 截图为xxx.png
$ y8 f$ d% V+ P9 v( f8 {/ F. k- z, A+ h7 y
6 }$ @! N" C& y- X9 O* p * V* X0 u6 G3 \5 ^" u+ z8 z; U* I
' X# B" R- z7 x; ]8 r& b) O! t热键:
3 z( t% Q7 v# q ~ 中断游戏
" w% J+ Q7 Q0 {: {% v F5 运行游戏
9 E, Q1 C+ g& X1 E, c& T F12 运行游戏且隐藏调试窗口& x) _9 c( z1 x
F11 步入, 单步执行, 会进入子程序
! ]: Y. v+ {1 G F10 步过, 单步执行, 不会进入子程序0 d& f, ]& w, T, a" @- s( M
Shift+F11 执行到子程序返回! l# R% v0 `; h& @* Q2 ^
Ctrl+M 内存浏览窗口; a! T k8 e4 B
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
- p% }3 c, w9 }& B4 Q1 A5 K* V4 L6 f# _! Q: G" B; F
{:4_94:} . P+ N, ?; l2 v D0 z: y2 O
& `7 |1 R9 _( x% `1 L
|
评分
-
1
查看全部评分
-
|