|
|
6 W% i2 o. y: m e
很快速的整理我自己常用的指令5 j! |7 X) v) @; a
# O6 C1 t5 T) }% |{:4_112:} 3 E4 t8 x! f1 |' e9 z
+ C# S1 T% n( {6 H, yMAME DEBUG常用指令# ~* c8 N/ C2 T" e5 s* r; z _
, N ]* \7 K! s' l8 M/ K$ |
内存搜寻: ci, cn, cl5 f- O ~5 A. N, |8 u6 ?1 b4 o: m
: M$ |) v" M# P* _
ci
8 Y Q$ e: X* u/ B( ^ 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
+ ^# ]; Z" y' p/ L* I/ O5 ?
" H |7 }, ^7 N: F+ n& T- k) Z cn+ h x4 d, r7 M9 ]
搜寻指令) W: t- q" s- T6 L
例子:
I6 o- H& e1 l* _# G7 B cn eq,60: g0 I1 {* i3 g2 V2 @0 l" L
搜寻目标等于60 (十六进制)
& U& j% p! _( i* R ) m, t) u7 j/ R z
cn eq,#96
h* Q1 `! J6 B5 l, c. Z 搜寻目标等于96 (十进制)
- ?) N! u0 I& [" _6 Y( f. y% k/ N4 \# U& _6 G
cn eq+ x6 v% f4 a' ^- u; p( N& v7 @' X
搜寻目标的数值没有变化" K+ H _6 n# C4 r; C( b1 e0 k3 b
- p) N4 R; {- o, k* F( [8 U cn ne
& s# D) f; z7 k) _6 D% W 搜寻目标的数值有变化
2 Z, O$ l8 Y: b) m# j
9 K3 h8 K& d# n! I4 w8 X cn +
' ]+ P. X! ?, t4 H1 R1 J5 S2 Q0 P 搜寻目标的数值增加/ M A7 U0 ^7 b! N8 o6 u$ F
" K# D# P/ ?5 _) @" A' B
cn -! r! |% _( E$ M$ n" s0 c3 l& j
搜寻目标的数值减少
( B. f8 \3 r" X8 ]+ `6 n( Q
' g$ Z# A% q* J `7 m( f, h; ^2 U cn +,3
0 S6 h% z G3 O, m+ @4 s 搜寻目标的数值增加3 (十六进制)
+ ~. q7 Q; N0 @, p$ C8 x
- z3 J9 m' A/ Q" P9 m2 m+ \ cl1 s# N4 L# S( u3 C$ {! U9 k
列出所有搜寻结果
4 j4 p$ b- v( f6 `2 \, X( \, @) ?+ K1 F7 J4 x
cl xxx.txt3 g' d* K7 [- @7 V. U3 L
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
5 F. R J9 n. y3 }2 o' ?& \5 q
7 T9 O# ]% ]; X" o, G( M* ^ ) V* p+ T- Z+ N" g
内存监视点指令: wp, wplist, wpclear
* y+ ~. t N/ D7 Z/ U" z* K 例子:
{ y) P% N' J8 W$ k5 Y$ R wp 1234,1,r
; j" A1 F3 v% r 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* _. |, I' s% J: [) W' o: y2 C
) ]: M$ S: k# S* x# i. D0 j: G wp 1234,2,w/ L8 H# D: [; T6 k8 Q+ [+ }" F" A
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 |- f" j9 z Y
$ C3 G. z# v; C, ]/ w wp 1234,6,rw n3 C. r' p+ ?# \% G' m# Q
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度67 O6 R. `( s/ L w0 A1 K
& ]0 `7 c. s. m: ?* v0 E7 z% l
wp 23456,a,w,wpdata == 1
( c8 B8 \( y# o; Q" M4 v6 F+ N 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
A1 N/ _5 i2 L3 \
9 w5 {) h( r# g3 [2 A6 _ z9 B2 E+ o wplist& [& S4 G( ]' {; k% w
列出所有监视点
+ E/ H% w6 ?7 J8 N5 l0 M' q0 K4 _. @% e; A7 b) V$ e# ~/ c
wpclear 3
, Y2 O7 J1 e0 S# { 删除编号3的监视点
/ R4 {5 \: y! ?1 x6 ]6 M; _
# _( r) f. Y3 M wpclear+ F, Y- ~- E4 k% i" M
删除所有监视点3 Y. _$ i- u0 ], V* m9 G
' J& q' G& X, H2 X5 n" ^ 9 H0 [" [0 w8 M2 q/ j
( \ ]* O5 T# d. `5 I3 j0 I
程序断点指令: bp, bplist, bpclear
2 ` }2 P: H' @7 o 例子:* q' F" X3 N' J* p0 k
bp 1234! U7 d2 z- P1 l# t" h
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 f4 Z* X& I6 _
$ W+ A# i3 i+ t. K bp 23456,a0 == 0 && a1 == 0
# N. G7 `3 k! u5 M% p ? 在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 n" t* v" @8 E! G% W. V& |! x, l! v0 N. K( Z) c2 k
bplist" u4 G: d) O4 |
列出所有断点
, A$ l4 Y0 W. f+ Z8 T
" N5 `% [4 B5 n# S6 q bpclear 3
/ d! _2 X% j& k! X 删除编号3的断点
4 `. Z1 t2 S: f- G( U- }- B. k
; R8 n K) Y3 N bpclear
, t e8 S& F6 q7 [' s$ w- t( A 删除所有断点
5 `: j) s; |0 R0 E& w% k
- P9 ]0 M# d7 Q2 T3 V
% R/ {& X2 V- @6 P 1 W: b# v' b0 X( r7 \
跟蹤紀錄指令: trace
& u9 y, S9 L I2 U2 t 例子:
" R* S" S# C0 F trace 01.txt2 N4 p: v$ H- P, m' p% l2 W* s, L7 \
跟踪当前CPU运行的所有代码, 输出至文件01.txt& B6 H6 M2 F' M5 i3 G5 s4 _, B9 D1 {
9 z$ i/ `4 r$ H6 g2 @ trace off
+ H6 a; ?! w+ N9 K 停止跟踪, 并且关闭文件
8 ]& d0 }. K5 w% |$ ^9 X
$ B$ T0 m& H( h% s }8 G trace 01.txt,0
, i) _8 K3 ^6 ?' M- Y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# ] c- y! @ ?% S8 t1 |, t. V; P' Q, j/ {, f0 `/ q8 E7 Q
trace off,0
; l& n, T+ q( I$ y1 L 停止跟踪编号为0的CPU, 并且关闭文件8 o& B: L( |& s! Q% T
4 Q g3 [( g% |* G% a5 K; z6 Z
trace 01.txt,0,{tracelog "A=%02X ",a}
" W' @) ]& X1 {' t# @- W 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( R& ]3 E: K9 h, b
并且在每一行的前面, 写上"A=a "
$ l: \' v9 q; C4 S "A=%02X ",a为一个C语言printf函数常用的输出格式3 a0 @( ^9 P. o* F
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ B8 }0 y1 |; I8 V X表示为大写十六进制数0 c: X& _& [) O& _2 O8 Z5 L: T
" ]" ^- r' f p' X4 s7 w
! s, o6 ~0 Z. |) ]0 \
8 v3 [' [, p; n内存直接写入指令: maincpu- i* U' }$ ]7 R! ?
格式为 maincpu.[][]@地址=数据
H% d3 |6 A: p/ q 第一个[]:4 f* O/ r' ` q& J
o 表示ROM地址
/ _& s. ?$ i6 R p 表示RAM地址
# ]* [5 K3 U. W8 G- g e: `4 L
) a; v, x1 U# p# {4 x* G7 @3 H( J2 m7 T 第二个[]:' V+ v$ [ U1 N- A1 W; b
d 表示4字节* f7 U1 \0 C& `) {; H' p
w 表示2字节
8 v4 G! \1 \/ H) D6 o$ l b 表示1字节
* A- S" ^4 R2 V; B6 M3 M! ]- }2 V6 W6 [9 }! a# {, a. ]% N
例子:5 L3 ~) }0 o9 o. S
maincpu.ob@1234=FF8 G& t, c$ m" u3 V
在ROM地址1234处, 写入FF一个字节$ W! R' t7 I3 ]. J' {* O, j' A3 _
9 t& r4 Q) ^8 G/ ?' E f maincpu.ow@1234=4E716 n" P: H' x) ?9 F
在ROM地址1234处, 写入4E 71两个字节
$ @8 q8 w5 H I2 z/ T) A; _! K7 M3 t/ {: N3 K
maincpu.od@1234=600A4E71
3 ~, o# s g. n& m! d 在ROM地址1234处, 写入60 0A 4E 71四个字节3 W$ M" B8 U6 j% V$ t6 }
Z; F, i4 ]% D2 Y
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
0 |2 }2 C& e% d' E' ]+ T X7 E
# ~+ f: t+ h5 P1 P* ?! L! Q! t# t* H# e( i9 X' M6 \8 n1 U4 M- I: @
其他:0 G: J9 u) E8 A& e4 s. a3 {5 G
dasm 输出档案名,地址,长度
+ B+ _8 \) p( l" s$ Z, a 输出程序的反汇编代码
; l- j/ y/ w5 Z% k) k; k' y 例子:
" o6 K4 F3 k6 O4 G7 o+ O) K dasm 01.txt,0,100000
! J' t! G" _9 C4 l1 l+ p 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
7 s8 j2 o% P) } O) ?2 J: s* N) I6 ^- n" k8 j; h
softreset
8 {! {7 L! ?! x3 F+ L 游戏重启, 但不重新载入ROM0 X* R4 Y: Z% U) @6 ^/ ^
' y j3 o# g* y/ ~& p; l5 w hardreset; X* |$ r2 I" H+ {# u) h
游戏重启, 且重新载入ROM
# i$ r6 m' K% K+ a1 Y$ D- Z) O9 w9 d% a) }, d: q$ f1 L f
snap xxx.png( t1 i/ q6 p3 ]* N& N
截图为xxx.png
( q0 n" z8 r, J+ ?$ V$ k0 ~
m; v) V5 U+ \. A
/ G" U. {* R4 ?! S& M ) @& N, Z( o( N# k3 u% U: A
! f' y" B3 a5 s; A- H
热键:
* X; @' R1 ^- g% C; L ~ 中断游戏+ I6 T% ^6 p0 G$ J S
F5 运行游戏
! G9 o6 g. k: o1 m F12 运行游戏且隐藏调试窗口
' {6 P# f% m+ \$ f F11 步入, 单步执行, 会进入子程序/ ^# T2 x% C6 W
F10 步过, 单步执行, 不会进入子程序) @6 r$ |( ]4 p! E" a J
Shift+F11 执行到子程序返回
4 s5 w7 p( K' s5 L! W5 ]3 w5 r# s Ctrl+M 内存浏览窗口! L9 u: X& C' w
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
7 t3 u( l5 g3 V/ ^5 E _0 c& x9 ?# [9 p
{:4_94:}
6 W% Q! V* f4 I3 _- n
) f8 P; B' c" k7 ^8 x& r |
评分
-
1
查看全部评分
-
|