|
|
0 F, y" e2 s0 l/ `4 e很快速的整理我自己常用的指令
0 _( N5 R _4 ]+ W
9 a4 O" z: F2 y/ C" M9 t5 o% O{:4_112:} : z" l: [( y3 h
6 k% ^0 ^( R6 x7 w- {5 P' cMAME DEBUG常用指令
" F* w d! }- X T' o s* g3 ~6 r6 |# r: C% d4 }, A! [9 }; Y3 \$ `
内存搜寻: ci, cn, cl2 A5 F4 q# N" g) J% ?, s: q
5 ^2 F& ]1 Y9 U: @3 L2 h! ?1 | B
ci
2 j$ N$ L q$ f7 i. c5 V6 a 搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 C+ n$ o3 O }% l; V& R
( `4 E* ]1 y( ]1 i7 s
cn
# U E, [6 t: I 搜寻指令
0 H+ _# Q0 K3 @0 V5 t1 ^' w9 ?9 A% S8 e) r 例子:; A. H( C- ]; u* y: _: v
cn eq,60
! t" q: Q1 x8 h9 \( D* ? 搜寻目标等于60 (十六进制)
2 z& ?* }. W, q: L. K6 N# o
5 g' m: G& F( l6 V" a2 j1 U cn eq,#967 J( S" r( x4 l
搜寻目标等于96 (十进制)
7 w- c8 n2 j! ?' u: t- R
" L: o5 c6 I" e, v- y cn eq
8 v( j7 M8 O/ n' O 搜寻目标的数值没有变化: E% T. e. J# S% b. L4 P6 z1 ^
3 w! L5 J6 U. \; B cn ne/ c# X) C1 \" ?7 S4 c
搜寻目标的数值有变化
7 z. ?2 J7 B1 Z: X 7 h* J! J7 U0 m1 z+ Y
cn +1 N! m5 c2 z3 I* ?4 J |' W
搜寻目标的数值增加 i# T2 P# u2 I% O- S3 E
3 o2 L9 |3 V9 U0 w: H. p& l cn -
; `( X+ E8 y/ M( [. ^ 搜寻目标的数值减少/ w6 C' m6 t$ v3 g% `
: _' i' h0 s/ [" k- Y( X
cn +,3
, p9 N6 f% t3 s+ g D1 F 搜寻目标的数值增加3 (十六进制), q5 f8 B" }4 w( _( f% H
1 L4 u" E3 m `! J: t cl
' y& @, Q" b; h 列出所有搜寻结果" W" s6 b( z5 o& W
# Y, y" e8 K6 i" Z% g% J1 @
cl xxx.txt: r- ^" m! a# T* G
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式( l- V x3 c4 E# | L1 y3 E
5 `8 \$ U: W! y
$ g) s" D4 Y% l5 L K4 o
内存监视点指令: wp, wplist, wpclear
0 s3 n$ g) {! w0 z: Y9 L 例子:: P! s2 V d* B. ?
wp 1234,1,r2 _, ~) {3 K8 u. [$ h, r% M
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1" ?* ]) G6 c, h( f7 C' {
! `( G( }6 x8 Z7 h
wp 1234,2,w0 x* s/ t2 [ M
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* j# r% W7 ]; @3 S. ?( t, ]
( W" m8 V1 ^, J: X0 G
wp 1234,6,rw
; Q2 B; W/ |. X4 T( [# X+ p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 Q4 i1 g d) z2 z& G
" i% S+ J, j4 r5 V0 {
wp 23456,a,w,wpdata == 1
: c0 h8 g2 p" E! F2 B 在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 C! {1 s/ `4 ?7 s
- u; Y9 }3 x H2 P wplist9 A1 ~: `: f9 }% I( R
列出所有监视点$ \: t* {: b% _8 P a
! a6 p* c! _, D- Z" ~3 g0 A
wpclear 3
; \: Z1 K6 S/ f9 [. o 删除编号3的监视点
; T& C7 T4 W( n% }$ L
+ b8 x) M% @9 J2 X+ ~8 P( { wpclear
) K4 a5 X' F% _& w( ] E0 s 删除所有监视点
. @# l( H$ R; }6 h4 l, d6 n
4 [0 v) W* L$ D- ^5 T! \ " \ G2 R& x& s- a
6 ]' v& X; Q. s8 x+ j9 k程序断点指令: bp, bplist, bpclear
1 x2 D1 x r9 o( A4 a) [( q$ x 例子:
4 Z* s2 e' K' T: m$ A bp 1234
% b1 X2 _$ X+ g# ~ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 T( k e/ s9 b, A8 U2 Z0 k9 K" F- H4 U$ q5 w( P
bp 23456,a0 == 0 && a1 == 0
+ S& p4 M9 G' a* j 在地址23456下断, 且中断条件为a0等于0以及a1等于0 c7 C6 F6 M. O, j9 d7 q9 ?8 f
% @5 {' K$ e; z. r. q) {9 Y bplist. u `0 z' `0 _1 b; h" K
列出所有断点
# t4 [6 K, I# H7 m2 a. W; }/ U
bpclear 3! ~: J% M! o% e: R6 d9 L
删除编号3的断点0 K. K/ T- p. A E- U, i0 p7 d
6 E# D# t5 n) Q: a, \
bpclear
) @. L. y0 I6 @: C5 R1 S 删除所有断点- ]/ p) Q; @" g' g4 z$ }6 R1 i
+ f" a" S' C3 C3 a/ t 3 |, g" v6 F- N2 b; i; J
4 Q$ P; {/ M+ }, X6 Q跟蹤紀錄指令: trace
3 V' A8 [( z# {4 x 例子:% T2 w/ Q7 H- v
trace 01.txt) F Q2 B" M5 m
跟踪当前CPU运行的所有代码, 输出至文件01.txt/ t6 ~) K8 p }7 d2 x8 o; e8 B
2 i5 d6 [/ h6 [1 L7 O
trace off
" h2 n7 m r# a9 D% [ 停止跟踪, 并且关闭文件' d& R, C# c- k! ^; r
, k1 z1 h2 ?: v' a& [
trace 01.txt,0& B b$ l: w; H* w
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; M. l) b# }' x! K9 w
1 h0 E' r4 q5 z9 L+ I, M% Z trace off,0
) p/ P& ?5 I8 c+ _ 停止跟踪编号为0的CPU, 并且关闭文件
* A) `, f' f) L0 ?! P2 @- }" Y& F5 P1 O
trace 01.txt,0,{tracelog "A=%02X ",a}
6 m8 @- ?* D4 P, y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & F9 D, T/ d% e& r0 P& w
并且在每一行的前面, 写上"A=a "6 w+ {7 L3 o- j( d& u7 L
"A=%02X ",a为一个C语言printf函数常用的输出格式1 ]4 Y& r1 w8 j
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 h" F% h5 Z, Z: ], o8 w X表示为大写十六进制数$ i1 k0 ~$ ]4 e9 i# z1 k8 q
7 b' ?5 {' f. C3 R9 _( j. G G( b7 |0 H* o I% l& d. P
2 E: J4 Y& t$ g8 M/ a6 j
内存直接写入指令: maincpu9 F& l& ?+ I% N# W
格式为 maincpu.[][]@地址=数据# L& k" Y( ~, I# q) R! E
第一个[]:$ @8 V& i( e7 D$ a. q( n
o 表示ROM地址
2 M/ t) u* S" E% d" H, J ^9 X6 y p 表示RAM地址, T& o- M j# n- Z
3 V- @: K8 I: i) ? 第二个[]:
4 R, y2 Z! q$ d d 表示4字节: w; E2 [% e& ]3 y
w 表示2字节
) s% T$ O" d, G, F: k, Y! j; ?+ y b 表示1字节
& j0 ?3 h+ L5 P( {3 c' s* V' T! E+ I) ~0 n9 M0 k
例子:
% C- R2 h3 ]* {/ R5 a2 F) B6 U maincpu.ob@1234=FF
8 O/ i4 ~ [7 I' N; H u 在ROM地址1234处, 写入FF一个字节+ z9 h- f B* j R
* G9 ^' }8 d( M5 t0 A( M* _0 N maincpu.ow@1234=4E71
0 J: ~# Y' ]0 P+ U1 z 在ROM地址1234处, 写入4E 71两个字节+ h; E. q* _% ~
0 d, C5 u1 f( ^
maincpu.od@1234=600A4E71
4 ^* B% A3 D8 y7 U; h 在ROM地址1234处, 写入60 0A 4E 71四个字节. m, ]) U P0 ?" a* X- [( A# G, M
8 p A" ^- F2 n 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 Y- b, h! b, u
4 \' G y0 k' \$ R
?& ^4 r( a2 [1 B, \! ~* ?, g7 m; m3 B4 U其他:
) P! M+ P8 \4 m7 X: G dasm 输出档案名,地址,长度
$ d, g" c: |6 _6 }4 c# T4 } 输出程序的反汇编代码1 U. H) t* X) k( q& a9 U0 I
例子:3 f+ H* N4 M7 q: v! W4 o& @( R
dasm 01.txt,0,100000
/ m3 {# I2 K8 v! r0 d* U& l; N 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
7 B: z5 J4 L: v& J, X
9 @. |- X1 R5 N9 I3 e% w softreset
8 P$ S. [# l h* l; G 游戏重启, 但不重新载入ROM
1 d2 T. d9 E3 o7 V4 J2 a. r1 t# S5 T" k/ |" ]' P3 D
hardreset% Z9 i2 u3 C, I/ o0 b4 }! f4 u
游戏重启, 且重新载入ROM
: N! I" A4 ^3 Q( N9 w5 T) t: |3 I9 R, R3 a3 O+ S
snap xxx.png
; j; |: U5 _) O$ l: E+ A+ m 截图为xxx.png
. ]: H1 l2 e4 i$ o' o2 ]4 V: p0 S9 Q* t" v% h
+ S( `3 K" X) f- { 3 c, v w" c* |5 |9 M& N, i
/ e; D: m: r( H8 `. C热键:
" u; P, N& R+ b ~ 中断游戏
0 l% a" C2 l+ ]$ t F5 运行游戏* c$ P4 D- \6 y0 _1 y
F12 运行游戏且隐藏调试窗口
3 [7 W% y7 d" X/ a- J# X F11 步入, 单步执行, 会进入子程序3 q6 u5 Z0 p' A% V! K5 u' a
F10 步过, 单步执行, 不会进入子程序
# N! A6 y+ j3 D7 K/ |( ^ P2 } Shift+F11 执行到子程序返回
' l/ V7 F0 u2 V. Q# E0 N Ctrl+M 内存浏览窗口 w9 q$ q) Y6 ]. ?5 }- o% K4 r
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; x7 s/ y. i6 A3 V6 E
; g, ]0 d. c9 `0 L& [{:4_94:} % [1 x! ?1 L: d7 {
! T8 \5 p3 f7 z% @
|
评分
-
1
查看全部评分
-
|