|
|
0 J8 D8 v. w3 t! S5 k- A4 N* b
很快速的整理我自己常用的指令
1 k) ^- G8 O6 ^' c
; j2 K/ }3 T- W; E5 R{:4_112:} + x6 O0 u! t v e) G
% Q+ P# b" I. Y; u) y( ]2 hMAME DEBUG常用指令
, \: M; e3 K+ F3 D& V( M% E7 h( v% G3 T+ O
V( x! q3 m: | c8 i) H- ]内存搜寻: ci, cn, cl3 M) d! F V& O& w( G
* k, j3 _! E" B8 H# f
ci
! L* @/ K$ @& `, _7 X ? 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: I1 l, R/ u: }/ J3 P z6 m9 Y3 `6 w7 ~% B8 [
cn1 x5 T# d* i+ f' e, o; {# t
搜寻指令
$ ~* q) Y! t4 H1 L. m6 [ 例子:
3 S5 d1 A1 N1 m' F6 _* Y3 _ cn eq,60
. j; v* u9 e/ k, V7 e `, ^# r 搜寻目标等于60 (十六进制)$ }5 `" D) K! b5 l5 `/ }& V- r4 I
* O+ C6 P1 M) j- c cn eq,#96+ _1 n4 O0 [( x
搜寻目标等于96 (十进制)
9 z3 {" ~- {9 B/ F
1 g( Q/ \! q/ r$ ], F cn eq$ U- P: m, D, x& j; N& b! l1 ^
搜寻目标的数值没有变化
* Z, H0 n2 A$ f' _2 H. P/ b$ E7 d6 a$ K9 r% Y& \& Z W
cn ne( v6 g" ^2 R' b9 b. I% h5 C" }
搜寻目标的数值有变化3 h1 f g& [3 m$ V! W0 F3 z
" l- @9 D# I/ ^8 U2 m) @
cn +3 ~ y8 N0 ?1 K' n: b
搜寻目标的数值增加2 a( q& R5 C% T: @ P: U. } R! k
1 B9 X# \5 ~, w+ M" S9 k5 @ cn -( L! g* c0 {6 q% ?5 f5 \
搜寻目标的数值减少
2 x9 L) a# c7 @ ) A1 N% ~3 U, E" x& _& O
cn +,3
7 R) `, w4 d) K6 K 搜寻目标的数值增加3 (十六进制)" K4 S1 y7 {7 {' c! _
9 n9 W+ N* B) L/ Q# { cl0 T2 F& r. S* K4 P! ]: J, w, u
列出所有搜寻结果2 z# k2 G, l4 G$ y, B3 b/ ?
" ?& k3 u% g5 i# {
cl xxx.txt
2 m' B( B! P3 d* b 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 q( Z3 S1 l! [2 e. y2 w
7 [2 T/ `, T n" ]2 v" m 1 p- b9 l; O3 S9 |; V& h+ {$ j g* m
内存监视点指令: wp, wplist, wpclear
" p7 y6 \* d: [' X- q' R1 @% U5 g T 例子:
$ b$ T$ N. W: @+ I' n% B- _ wp 1234,1,r
) o# X, i. y) m 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
( D2 r, S" K" k1 l! O$ y; Q) ]% K) S3 m( t
wp 1234,2,w* y4 q' h6 i a/ L/ _; T% o7 _6 B
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 Z" e; k6 a* u8 m R6 X3 U ; t3 X: u) h$ K# K- f# h) A. v
wp 1234,6,rw4 o& i( V3 k+ t0 O* Q$ W
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ i& G: k; w" }
& r4 G: H* I* d e" j4 E, G5 j wp 23456,a,w,wpdata == 16 D" q- u4 z+ C+ O
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. g( n3 z1 e0 @+ G
1 F0 N9 A% |! s' Z& e6 Y0 s3 b& U
wplist9 p6 a4 x/ @ M$ V. @/ q$ I
列出所有监视点6 E- P3 e5 R% u+ r0 U
/ h' T, r7 ^; M( H3 U6 e# H wpclear 3$ Z4 C$ i x& T v, H; W9 [4 O4 N) {, c- ~
删除编号3的监视点
7 m4 c- ]# B5 q( l" M {
M1 Y& l X3 U2 J9 C3 H& x" b. n; d wpclear
9 o) j/ q& M, Q+ |# y 删除所有监视点
$ w- |8 f9 G$ ], ]# M/ W2 J% J$ \' O
5 z9 k4 V. E5 @: _! @' J. J+ P) Z1 F) Q3 ?
程序断点指令: bp, bplist, bpclear3 d8 d1 t' r+ H) Q
例子:
1 I' Z0 t. Z1 i# O bp 1234
! ` {- G3 V4 _( U 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断( D+ G+ e( F- p
" F9 @# L4 o5 E) D7 ]: X/ r
bp 23456,a0 == 0 && a1 == 0- ~; R2 j/ |* u7 b4 |* q
在地址23456下断, 且中断条件为a0等于0以及a1等于0% |0 Y- u1 ^3 g, F
( T/ _9 a! W8 k$ p/ E1 \
bplist9 Y v( s2 T# T! N9 G9 C7 J9 Z: o
列出所有断点) I( w( z" ] w% B* N, T
; e1 k: i+ @; }% w: R( _
bpclear 3: i5 S: d9 Y6 A. r: O' T7 _! n
删除编号3的断点
2 T/ D. R( P9 r _
' l8 [# V _9 x8 g2 R bpclear
7 `4 ^% O& g% }7 P3 f3 g. x; x 删除所有断点
! E z7 O- ^2 I" Q
* G0 ], F" Q2 q' B0 w' T/ a
# n% U% q+ j# a5 J# R 4 J. X5 ~5 |& j) A! M% G$ k, u* I/ m
跟蹤紀錄指令: trace+ r" w' T$ Z. G" P% O. B) |6 J
例子:) U3 r v% Q0 H' U# _5 d8 M$ l
trace 01.txt
+ z2 d e# L% f6 F 跟踪当前CPU运行的所有代码, 输出至文件01.txt- j$ r9 h- c7 J F X
2 [ n$ X% u4 G, p1 R% l$ S
trace off- \; }2 B! C1 ^) o9 t/ c3 j
停止跟踪, 并且关闭文件/ s8 [6 M9 S7 p5 W! v
1 d H+ O; ?& u6 P. p$ L trace 01.txt,0 c. M% {3 I2 Q4 g* s3 K& A
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" m# }' r6 W- H- X
1 i* G0 v# t# t2 A+ ~% P
trace off,00 \# F# P4 @3 W8 B
停止跟踪编号为0的CPU, 并且关闭文件
0 X! F* i: v x0 b7 [7 c+ U) F4 {; F; U# [) A* p* n
trace 01.txt,0,{tracelog "A=%02X ",a}' m4 E( [, n1 p% t
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ' B2 ?; n# m+ P+ z' {3 T4 D
并且在每一行的前面, 写上"A=a "3 F8 W( V* M. R1 r5 G
"A=%02X ",a为一个C语言printf函数常用的输出格式
) t- ` E. h$ `5 P* q7 R 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 c9 g3 I0 u" o5 M: P X表示为大写十六进制数
/ V% B. D4 V$ |; {2 A# v
, ^; L5 u' `/ r ^8 a
% u3 V5 G# M, \" m0 R" U s: u/ `( o! u
内存直接写入指令: maincpu
, U' F/ S, y- [+ } 格式为 maincpu.[][]@地址=数据9 l1 D- r5 {) Y2 J1 I4 P6 q
第一个[]:
- Q1 K- L; C( v4 G. A7 v* | o 表示ROM地址: A8 k8 |# b, Q8 u8 q+ R
p 表示RAM地址& @0 x& N6 q8 ~- i& r
9 f6 |, V/ Y7 O, d3 K 第二个[]:
}. I6 \ a8 N+ I! e7 s d 表示4字节
" _! {( F! f% L" G+ k" H w 表示2字节. z: ?( M" l! ?5 u
b 表示1字节. l# Y/ Q4 `" t9 \# d+ a
; u: _% l/ N# ~! s1 E 例子:, D1 y" F9 v' U; K! E
maincpu.ob@1234=FF
8 d+ J6 s9 {: H1 y 在ROM地址1234处, 写入FF一个字节( G5 A% y! @" A N) e7 E
# ~$ z* _# s1 Z1 ]7 i/ l; i* @ maincpu.ow@1234=4E71
9 ~* O( G6 p5 l" X! U& ?) E 在ROM地址1234处, 写入4E 71两个字节2 I: Y8 M) m) |
' z% u% i) r2 W9 Z* a" b. X
maincpu.od@1234=600A4E71
# E y! a! ~ \% R# t M 在ROM地址1234处, 写入60 0A 4E 71四个字节* r8 J3 U/ ^9 G, \, I t
3 n: _3 h6 r; \. J& a2 j0 R
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 F4 C" b8 @5 `, K: s% u) y
, M+ L& z, o' L2 v$ e: v
4 t1 w5 r7 V6 q" l. z
其他:
7 N9 f# k1 h" X I/ ^5 B dasm 输出档案名,地址,长度+ Z3 |5 K$ r' Y4 D! V7 p
输出程序的反汇编代码. @1 h2 C6 O4 U" ?5 Y8 @
例子:* q( S4 ^" _" C- u* l! i
dasm 01.txt,0,100000- l+ o/ y5 N& J- M' X: c2 M* E
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; i8 ^$ i) Y; J/ Y" o8 g# b; k
8 H9 T- y& U! ]
softreset
7 f9 x& t* m. X! Y# { 游戏重启, 但不重新载入ROM
3 E* a6 o' Z& V ?* t& O3 ~( ]5 N7 O" x
hardreset
7 v: ?- J d' O4 d; j 游戏重启, 且重新载入ROM
) V- H1 _) B8 A) O/ p
, D, h( a& b: C) _6 Y snap xxx.png: m8 ]: `; c# r7 [6 `8 u6 W# ~3 X
截图为xxx.png# c0 I5 n, S; y( B
5 o) j8 \' q/ A: K/ }3 ^
# O7 z8 b8 P6 e# r0 f
- e) c c9 P2 V" J8 J6 U
" z- {, i9 d! _1 r7 Y/ h2 D热键:
. q# Y1 u5 Y# ~9 @$ k ~ 中断游戏5 ?+ T+ \6 o2 n
F5 运行游戏
, w& w- h- a* c F12 运行游戏且隐藏调试窗口6 x+ ^2 T6 f& Q( w
F11 步入, 单步执行, 会进入子程序0 C, }% v# ]0 ]. k" i: z" r
F10 步过, 单步执行, 不会进入子程序
& m3 s6 o: y! c Shift+F11 执行到子程序返回
) H8 D5 l9 N- L! e) N Ctrl+M 内存浏览窗口
" M& b5 P0 E4 `6 U F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
3 h3 H2 P5 ^6 I- x) a: c1 k) e
+ F3 a+ D9 o: j! u{:4_94:}
* l. U; o7 J; f& l! g/ r5 w, t% R9 G1 a
2 O1 R5 m0 J6 C" d- L) }. W' I |
评分
-
1
查看全部评分
-
|