|
|
7 e; e8 j0 F5 t4 z5 l" t
很快速的整理我自己常用的指令0 a9 Q! y/ F* ?! @" @
( x# ?% j- |, {! S, j7 R! E
{:4_112:} $ R; J: p# z3 v" w
/ r& X) n* {7 Y3 q" D( u* Y/ N, z1 U
MAME DEBUG常用指令: W7 Q- w3 ?4 t6 o, ?
1 ]! }7 X: u8 a7 R8 z9 K内存搜寻: ci, cn, cl( X+ X) a; J/ I8 Z H
0 |6 L7 e1 | A# f2 | ci
. _. L8 T: L+ M$ u% h7 J: W 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, j; G+ ]9 F& k) t8 Y- j0 L9 @
7 o; d5 Q* r! l$ Q$ S6 ^5 N3 F- T cn
3 Q1 K* g5 K. n2 K _ 搜寻指令
9 | Q) I( `& D, Z, _ 例子:
0 [9 m/ S0 E8 G1 C; t9 E0 g. @ cn eq,603 d9 | o$ I7 U- l' |; e: k+ c
搜寻目标等于60 (十六进制)
; [, T8 ~/ e# n! j* j% r+ c
& M) R+ A" w8 T1 a cn eq,#96
' J- [$ L0 Y1 a& q/ F0 p 搜寻目标等于96 (十进制)
/ x+ Z5 e/ ~, V( Z2 N
" _3 D( f' q. t7 i% j$ P1 F0 \' ] cn eq7 _! m1 c: A3 V! I4 ^0 @& j
搜寻目标的数值没有变化
/ o/ b8 M5 n2 ^2 |! E5 D
' I8 Y- Q+ t* n6 f9 h" t cn ne' V0 e; k; |% i8 a2 d2 S
搜寻目标的数值有变化
" t. K# G, C1 @$ ~( D, Y
' u2 d6 m1 ]3 ~1 Q& Y5 S cn +: `2 V& B' Q3 L Q5 s6 `1 q
搜寻目标的数值增加9 G- r7 n( O) A! D" U5 \+ v
1 P, q( R R: r# N) I: f
cn -8 e7 k8 b1 p, }; B* D
搜寻目标的数值减少2 S( B% J5 }% |, Z
& @& x% C/ G0 L/ g6 {% z( n cn +,3- H6 k7 V6 C8 g) B/ l$ e2 k
搜寻目标的数值增加3 (十六进制)6 e- Q$ I P0 }. D1 i4 }2 r
' c2 F. L) o8 }# R% A. |% z' X cl
. ^& x, b( n1 u! l 列出所有搜寻结果9 [: |1 w' d2 `) e: j3 F! ^# B
7 }. L6 O. m2 t" J, T cl xxx.txt6 D9 B; R) r' q$ p$ n& i) W
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
' g- m3 O' m: x% N9 A; l
% w; Z/ {4 k( c S' g1 t" L + Z) `- @: d5 z1 |. M& S: U
内存监视点指令: wp, wplist, wpclear" Q6 s# x& Q0 a6 e+ \3 O: X1 [$ v
例子:4 G0 K- V. q/ |( {
wp 1234,1,r( ]& C5 h4 T/ Y8 j6 P @
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ \; ^/ u1 O& ~4 C9 t- j& `/ ~( t
o9 P4 u9 f! C wp 1234,2,w
5 {1 _ [* O$ q. z6 a8 N, I 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 r9 x- o$ {/ E+ d b
5 ]- u) k# ^1 [3 D% M wp 1234,6,rw( ~* f8 ]; u- x* R! ?
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6. l4 H! i# j- y/ w" h
5 G5 H! F& ?9 s wp 23456,a,w,wpdata == 1
& B) C) L' ~) t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. A( j+ Q3 L6 V" v7 `3 p
. o2 [: K$ P( s wplist5 [8 y6 A) C: }$ y Q
列出所有监视点
" `9 |; {) C) O( }+ U& _( B" [" a8 W) ^
wpclear 37 O# C$ ^6 w4 I& U8 O: k( p" I
删除编号3的监视点
" o3 s8 h( U% Z8 G! N+ J
1 N5 B3 @* Z* X7 |5 M wpclear5 w8 a! \4 s& ]
删除所有监视点
, J; X7 u* c1 b/ F4 S$ E) p4 e& K: s5 y
, V- ~1 s- V) v8 D/ v) X
3 G% w% O- t4 `, N+ F
程序断点指令: bp, bplist, bpclear8 B5 S: d* a% M. N! M' @% X9 N
例子:
! C# a6 e( L% U' I' g bp 1234( u, B n$ y" ^" j
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
6 Q5 E. a( s3 R3 y8 I D E1 i* n* E* d2 t# j% v+ s1 u
bp 23456,a0 == 0 && a1 == 0
/ l' H; ~1 j* _7 P( t 在地址23456下断, 且中断条件为a0等于0以及a1等于0
/ D$ n8 U9 p1 x& ?6 j, y3 d+ z7 F$ N% c" X$ [6 @
bplist
1 x8 F* p; R5 r! |" n$ K% m 列出所有断点
4 _& t" B& x, G& }3 h4 d) i2 w& w: A" R" c9 w; {+ l) a
bpclear 3# }' w9 }2 B; W( G4 A3 D
删除编号3的断点8 `% I3 d/ I, N5 {
" \: {1 m- }2 t" e
bpclear# k3 G9 Z, Z0 t0 [7 v2 ^
删除所有断点
1 r! a- f+ h5 N0 C8 C/ e. n; t
( a3 V" T9 O! M0 ~4 h e* F+ m- ?# [
9 @& w% A9 O4 l9 k 8 [- r5 U K! ^1 n
跟蹤紀錄指令: trace% R! _4 x% Z/ k0 r/ H
例子:4 a1 _& E7 d( H( R
trace 01.txt* v( x: G2 p1 [+ |
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 }. u" G. t7 R
, m5 K M7 t6 h9 s/ b' X2 U; Y) P trace off
7 t. ~; S# t1 e4 i) t: ~ 停止跟踪, 并且关闭文件8 t, T B2 M/ j9 D3 ^5 h3 R) p
* Q5 T. e# O- a trace 01.txt,01 y; K8 e/ T8 h! H+ g1 a: _+ O9 Y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! m+ S; p: I. S$ I8 D p; c6 `, x+ G' j" h# d! w8 a$ [
trace off,0
. P' h& i; j$ f: Q 停止跟踪编号为0的CPU, 并且关闭文件! S+ S% s# T0 i+ @8 c
: J% n# I$ D, j6 D% x3 q2 [- k trace 01.txt,0,{tracelog "A=%02X ",a}
( d( [* G3 h i1 Y: L! o 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 Z, l* }" B/ |* m 并且在每一行的前面, 写上"A=a "
7 ]& x$ L1 B3 U, `7 s* } "A=%02X ",a为一个C语言printf函数常用的输出格式
- O4 |6 v W7 |& D) f 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* M( Z% N4 I" H2 J# P& [4 E& w" P) g
X表示为大写十六进制数
" S3 C3 D9 n8 }2 C2 p; Z5 M& C! ~
- y; y; p4 I' z! H1 s& O( t, \/ a; h, N$ u9 T+ d6 ]
% P; b% K0 |% p& M) k0 {" w) M
内存直接写入指令: maincpu% {; b# s. b) P8 v- R
格式为 maincpu.[][]@地址=数据
7 _- Q, u& x' c% Y0 c 第一个[]:
) @* F; x ^5 @& f o 表示ROM地址
, B! V; A% @- J) S$ e4 e3 d p 表示RAM地址) a# S9 u5 |+ H) E& A5 Z6 P! [, o: U
& J$ }8 n3 B- [- j/ [" _4 M7 [0 b 第二个[]:
' f! j0 s0 K8 F, _; f) b' V- c d 表示4字节/ U, h4 t5 Z$ v( w& B
w 表示2字节
: K1 q) c0 }% h b 表示1字节
! s/ C* Q( e* A8 l: F% @: z2 V3 b( C
) w; t# c+ f7 v. M# x6 b# | 例子:! T) f- f; u: q
maincpu.ob@1234=FF
- R6 Z: t5 [" A# E* P' j3 w 在ROM地址1234处, 写入FF一个字节9 q/ o! ]3 B/ m( K
( M/ m( F0 c+ Z: W maincpu.ow@1234=4E712 l8 `# ~% O4 _& w+ M6 o& o
在ROM地址1234处, 写入4E 71两个字节
2 P. G# |. t" Z& S0 O. ~/ ^8 L" }! L8 ^; Q0 M1 C: b
maincpu.od@1234=600A4E71
! E1 s( }+ f4 \# Q- g 在ROM地址1234处, 写入60 0A 4E 71四个字节/ [, K; {/ [ o+ A" [3 P$ y
! J6 s5 m% h1 P2 [% D" e 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: x* A# b z# h# G; V0 Q 8 ]1 w1 e) N7 v8 m" g
* J* f3 V6 m* P4 f# o+ n {4 x其他:; k! ]2 C: v9 v) c, D2 P, m
dasm 输出档案名,地址,长度
w* | a2 \( z* m; H4 j 输出程序的反汇编代码
" [( }/ R* q7 c2 W8 Y4 { 例子:! v8 w/ S# E6 r- S; |, ?% e
dasm 01.txt,0,100000' F% k/ ~7 o, e" a8 B) j9 e
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt I2 [9 z3 ~# ^
7 D Y- Z6 P5 B: g+ J7 I
softreset
( l! Z, d, v( p9 N$ w. k- Y 游戏重启, 但不重新载入ROM
3 H4 M2 M4 x' ~ x7 L2 K2 G" @6 W3 f. m
hardreset, M7 @, v( m9 \, |( o ?
游戏重启, 且重新载入ROM0 q9 l' H4 R4 m( n
2 E& i4 o5 \9 h3 A
snap xxx.png
: U& w5 h3 j z, P X 截图为xxx.png
8 I' O9 W& G) ]6 y0 K
; c" ]/ u4 A) H2 o
$ t1 P! k5 r2 q( H 2 k% C' f8 D: X- f& d
/ E) M+ _: V) l( D% T4 H热键:5 c# }* ]8 L5 A7 C! d
~ 中断游戏
, H& N# ^" G! G" C: }0 ^& p8 { F5 运行游戏8 r7 |9 W* Y! [1 b, _ g
F12 运行游戏且隐藏调试窗口
& v) |3 w/ ]4 M! I, a, G F11 步入, 单步执行, 会进入子程序
7 n H' o+ Q$ s9 f F10 步过, 单步执行, 不会进入子程序. t7 l" |& ?% v" I# k8 s+ I5 [" S
Shift+F11 执行到子程序返回# Z3 i6 E9 |9 A& e0 L4 s: N& M
Ctrl+M 内存浏览窗口! t) u8 @! N3 x' H8 a0 R Y
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU0 N" H6 e6 K! d' p# r5 N
- f* R, D x# J& k T: @
{:4_94:} 1 Y7 g% A, A; M( @# p$ g5 U; }) L
$ y3 @ |5 e. N5 P( U5 m( N
|
评分
-
1
查看全部评分
-
|