|
9 a# {7 @5 i& X j
很快速的整理我自己常用的指令
6 L2 S; w, s9 l8 v* K4 k' `
; _. z" \( F' B. l& M; v' n* E) m{:4_112:} 9 [: ?" H9 d9 E& q
2 e5 f) D! z4 u2 R( }
MAME DEBUG常用指令
/ m' {' Q6 B/ e; Z$ L2 D8 v0 Y( F$ Y
内存搜寻: ci, cn, cl. T. `# c8 \$ {* h) L j
6 \5 s$ z/ X% r' Y) n* O* k ci1 @" l: G9 H" K
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* k, D* i0 P# J: z8 C1 J3 _, L, o: B+ D8 A# Z) l
cn
& D+ Q1 a! _% | 搜寻指令, @6 s* b, g; v' t/ F
例子:* }! j+ @# P2 F& t
cn eq,60: p7 Q$ s5 w9 a9 R7 `
搜寻目标等于60 (十六进制)9 W% l' D Y) k' \
8 S* n- |: h0 |$ U8 v" Y cn eq,#96) {& ^/ }" h7 o' ]% B4 Z
搜寻目标等于96 (十进制)
Y* f& t0 q0 @. Q2 {: k) d
1 ^6 u' M1 Y0 @8 y cn eq
" F7 i! [ _2 b. G$ x 搜寻目标的数值没有变化; A4 Q, j# e Z" n0 X
( D' Z z* l. s, ?$ B
cn ne2 |2 G. f6 ?0 N0 j8 e; e
搜寻目标的数值有变化
9 F) N; F$ L1 C" E( S! ?
9 c1 n" k" A8 S5 `9 y9 j6 _3 } cn ++ A9 {, l w; z; x' O& r
搜寻目标的数值增加9 n. L: ^9 }6 ~6 L8 F' P0 E8 U2 @8 Z
# z' e0 W& q% s9 J% W' ?; X cn -
. ^/ A* y" P$ p9 Q @& E 搜寻目标的数值减少
: T( T6 T! s$ M# F 7 { h1 W/ j# F# b% U w) ~8 y
cn +,3% K8 T; ~/ \0 h% g0 i9 Z0 a
搜寻目标的数值增加3 (十六进制)9 ?2 ]; N3 p6 Z1 G
# @* u. Z7 J: A0 b1 R% n/ m
cl
- W# d9 {2 @5 B T 列出所有搜寻结果9 x; E9 O, @) B" u: {4 T
1 d# k& [& x. `9 P
cl xxx.txt# e$ l2 V/ q) W/ p
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 J* c+ m: K" y1 t* p4 j- |- ?
# S# I. n1 D) }
) D2 ?$ a* x% t$ c* d& d6 W内存监视点指令: wp, wplist, wpclear) R3 R, R6 M* Z; T, w& N( v
例子:& _7 W( Q, c, L; a/ a
wp 1234,1,r
+ e8 q W2 j- {" n 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. {' ^1 I) j! ]& H5 g9 p+ a7 z; X! h( L* |8 g
wp 1234,2,w! D4 T1 r5 O; t" `7 H
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 }& O- M! `- K0 y( ~
2 I* C M+ q* j5 W$ C
wp 1234,6,rw! p4 o( d8 A2 L4 l T) D
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6 q4 L$ h6 w j- C
: M! W7 Q. g8 e% d wp 23456,a,w,wpdata == 1
( l/ N; p: w: r ?* ] 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) _% C: c7 |( w0 P8 m$ d; m; U, w, y6 c6 x
wplist& {- D% u! R4 w7 y
列出所有监视点$ R& ?3 t4 a$ \: j8 ^$ a' I1 V
`2 U* j: `* \) ^3 D0 w wpclear 3
7 v6 A7 r/ x; d# v/ F 删除编号3的监视点0 _: {" c- [8 z1 {
4 R/ J1 T% W: b7 l# f7 ?
wpclear
+ u) q) Z D4 B9 O) F. l. U1 \ 删除所有监视点
+ h$ |' ?* W, V* W. m& }5 t. _" j6 Y" b
. g% S$ S! y' L v
# T5 ]& d; H% @( X8 q' _程序断点指令: bp, bplist, bpclear
: R( |& @, t% {- q 例子:% F6 {2 G: B. S) a$ C
bp 12349 }- g3 l6 q y* a* U
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断; p) Z' [" [6 i7 i# |2 a# j' y
5 y# Z' M, y4 l; P bp 23456,a0 == 0 && a1 == 0* ?+ D. l1 U* n+ _& U7 b& R( }4 M6 E
在地址23456下断, 且中断条件为a0等于0以及a1等于0
' x0 g9 T$ C) @- G1 f
9 ~1 N* M1 A8 \8 o9 \9 L/ N, h bplist
9 {, m1 B# s* n2 H 列出所有断点
* M+ R+ Y, y7 Q# b
) B' V$ G3 x! S, b/ R bpclear 3
' E- V6 U( R& P4 } 删除编号3的断点
0 [ R( a7 x9 {3 |; m) M2 e% l2 r* X1 c9 }
bpclear& `3 w* Y2 I) i1 J% L: b) e' g
删除所有断点( K9 k9 B& B0 O2 ^+ k5 V9 v
6 i# j R# J& }! E6 t7 M4 Q8 z2 w
. p! n0 D8 ~& m 3 c3 }+ O8 Y+ u$ J5 W+ i |
跟蹤紀錄指令: trace! O8 b* I6 k5 {: I. h, H( P
例子:# e4 w/ @/ B. q0 n# l1 r
trace 01.txt! D- y2 p3 D; c- P% d& F/ ]
跟踪当前CPU运行的所有代码, 输出至文件01.txt+ Z! n$ ~- o I+ ~9 {
" f8 ~ g6 V- T9 G7 @" h trace off" z' m. ]) M3 \) j5 x; K
停止跟踪, 并且关闭文件, q5 o c7 v. h- u' e3 t
% h- U) l; L( F5 O9 D5 p
trace 01.txt,0
) Y2 G; ~+ h/ d# @. z: X% O5 q 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# }5 N! A: A$ ^) C! ?8 ~; o4 q5 N, n+ ]+ j1 n
trace off,0# b" `. y9 ]! u: Y
停止跟踪编号为0的CPU, 并且关闭文件' l& ?6 Z$ {! o. s, K' b
9 R( w% K, x. r8 i trace 01.txt,0,{tracelog "A=%02X ",a}
* O7 q) f2 q+ I3 f% ^4 { 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 U3 w) I3 n' a 并且在每一行的前面, 写上"A=a "2 U: ^" l2 Y |1 m0 _
"A=%02X ",a为一个C语言printf函数常用的输出格式+ a7 ` }+ T8 g8 I: q9 L2 i
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
8 D, p) i( u, z/ F: j X表示为大写十六进制数
& f \, C0 `9 R; M- H1 {: h7 S3 |5 v2 J
8 [' N, [# Z) m7 d/ ?
; I; ?, D! s, L4 Z内存直接写入指令: maincpu8 T9 O8 c3 H6 V9 n
格式为 maincpu.[][]@地址=数据; w! Y+ d, y. y" m
第一个[]:
2 C n3 l& }1 M1 `; A1 O o 表示ROM地址
; _4 l9 W1 v' g3 D p 表示RAM地址 l" m0 V% H* J7 ]: _
2 [6 a2 b) D* l3 x# K. p7 k 第二个[]:8 x, e& j. ^8 ~$ N3 L1 v7 ~
d 表示4字节( k# q* e( o2 Z, q$ L2 p
w 表示2字节7 V# G' p6 i7 |
b 表示1字节, U# G* D* ]4 Q! e4 a
Q4 z( \# x) N) Y
例子:2 W2 {" C5 _2 n* u: z# c5 L
maincpu.ob@1234=FF+ Q5 e4 Z9 H, M, W' D
在ROM地址1234处, 写入FF一个字节0 k7 U7 t" y) a. k
: r8 R2 J( ~) g& l5 G) j maincpu.ow@1234=4E71
1 L: O& F. \' v. U 在ROM地址1234处, 写入4E 71两个字节
. {4 @9 T1 K( \, Y* K# y! M% W1 D6 v
7 f1 z' ]% N7 e: g# b8 [) K maincpu.od@1234=600A4E71
( r* o5 M# { N7 N2 G2 j6 O 在ROM地址1234处, 写入60 0A 4E 71四个字节$ y! p9 [9 O z e( l- f5 d& q
: F" Q& E5 h4 Y 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
* b9 y% Q. M; ]+ u* W( r 1 L M e0 h( G- b4 }, m: W
8 ~- I! n) m1 R/ y: Z1 D" A其他:/ `: ?8 V% J1 {* x
dasm 输出档案名,地址,长度. J# b5 |6 X! v1 @9 f$ y. J
输出程序的反汇编代码
0 i- {7 o- \+ [. ] 例子:3 ?$ U1 i! w5 I, [! L9 \
dasm 01.txt,0,100000
+ L5 n8 ?& b! `6 V 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt: ^2 X( z/ j: S) P C
+ c" K+ u5 Q6 O! E1 l" |) P softreset; i3 A9 V5 Z8 L. M4 b- ~
游戏重启, 但不重新载入ROM' f5 z: Z; H( D* J, H
3 C8 Z. E$ z \ hardreset+ [, X, H+ g1 ]- }' \/ G' g, J
游戏重启, 且重新载入ROM
Q% e2 J1 u$ q& Q5 H; D
* V, Y/ ]- _9 W% N* ?0 I snap xxx.png7 \8 K" g5 g |. `
截图为xxx.png
2 w2 x5 \% t5 z% A8 y1 Z+ Q
# n9 I* T4 s2 r5 U
' E: P# C& Y5 x G" A T4 J 5 z" ^6 Q3 b' L' f, e1 z
: p4 Q# ?( Y0 S
热键:* B/ `) ^5 T& e$ A2 Z" F+ d5 \
~ 中断游戏* O0 K; U3 c6 `. A1 J- e. y2 \
F5 运行游戏
- }5 C% a) K) o# K F12 运行游戏且隐藏调试窗口5 q) b8 p. t, I
F11 步入, 单步执行, 会进入子程序
1 p+ S2 G7 c) u, g+ K* D F10 步过, 单步执行, 不会进入子程序
4 Q- _6 j4 v7 F4 l Shift+F11 执行到子程序返回
h) e i3 W E* R' o Ctrl+M 内存浏览窗口# e. Y- g P# i7 J
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! a0 B- S: N d5 ?) S
& b1 [& S; k! f/ u. s9 t) M; o{:4_94:}
2 a" a& C0 [3 |4 ^' C' R0 [7 s' @; _0 t6 c$ p I
|
评分
-
1
查看全部评分
-
|