|
|
$ I6 ^; W! z o# T. t
很快速的整理我自己常用的指令0 q( O$ _. [7 E/ p
- [1 l, o/ U* v( N/ c9 C% r [
{:4_112:} + [; T4 D* \/ t1 M
$ y8 R$ U) n) R+ v# S. f9 C7 nMAME DEBUG常用指令
* Q* Z3 O8 v: }1 R) ~9 |) l2 r1 @
内存搜寻: ci, cn, cl5 s- F. |/ V, }9 B
$ F3 c+ w6 K' `4 I$ U ci
. _- v2 A- M; [ 搜寻任务初始化, 每次搜寻一开始一定要输入这指令: s! e& m$ J6 P
" Q' V) N! C/ D; h cn$ K8 |: K. z: {! I
搜寻指令
* b6 g. n2 P0 ]" U 例子:
' o4 e8 D+ U9 r cn eq,60
0 m' {$ J0 X( H/ Q. }% X5 \ 搜寻目标等于60 (十六进制)
' R- i* V! P, j
0 r1 |" K( I) \ cn eq,#96( W: r2 o( J# ~5 z
搜寻目标等于96 (十进制)4 O9 F6 b- Q [& s9 w5 @! g
7 G/ A9 J6 ?2 M. j
cn eq7 Z2 j4 e/ i0 l, G
搜寻目标的数值没有变化* J. B" |0 d, R' U2 x1 a
+ \* W$ G D* b+ W' C$ `8 H
cn ne
& @# _' t$ s( p+ N$ m0 e) A* C0 U 搜寻目标的数值有变化
& R0 O" ?. m$ K! t8 x, |2 y4 }* J8 i
4 Q! O6 p, u9 e( I cn +
, C+ f* Z# t4 ^6 d 搜寻目标的数值增加6 H5 V' D l! p! @' D3 u
3 P$ [+ D% b" S9 }* g+ ~7 ` cn -; w! p) m6 T4 p) k# H2 L
搜寻目标的数值减少
; S% {$ P3 `2 d# ^; X: C
Z8 v; d2 a# D cn +,3
% m7 J; M" x3 E# ]+ D2 Q9 \& g5 U 搜寻目标的数值增加3 (十六进制)
: _9 Y4 e" J, J
R2 x, Z6 z4 }0 | cl
( q- D0 R+ ]' Q 列出所有搜寻结果) O9 C2 t8 A" d+ k* K$ J5 h
$ x8 x) P4 o9 `4 v9 |6 a
cl xxx.txt
4 F" K, [9 V! \' s* c. a 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 }" a7 N0 _) \9 U$ t
0 V3 ?( Q3 t& b
9 K) h: L0 H% Q( S6 [) m& r c1 v
内存监视点指令: wp, wplist, wpclear; c% d: f% u* I( w4 o5 _( z! d$ {
例子:' d7 G' U( e N" U h! g/ \
wp 1234,1,r
) t5 ~' _' O1 H 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. L$ ^) j: x! R# J* m; _/ k0 y
9 c" }& T% W- T
wp 1234,2,w
$ _) K- ?; r7 ?- |/ C( L 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! N5 G p7 j! o1 u2 \, W) ^6 u
& i* m8 T- V6 \: ^# D# ]) f wp 1234,6,rw
+ O5 S6 v" o& s/ Y9 J+ A8 h 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
; X2 e H$ }7 T8 Z: ~0 `4 i; T- v2 m+ H
wp 23456,a,w,wpdata == 1
( h7 X* N7 A, x1 a( n, S- z 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
! X4 Q: g/ |# X6 I# {0 E! E' g5 e7 }
wplist4 a" `" d6 |2 X b9 z1 J
列出所有监视点1 c1 X" N4 z5 ^( |' q) I4 U9 `8 l0 }
( O) h* o. m# r! G
wpclear 3
( s9 v. s- i+ C 删除编号3的监视点
7 s0 @$ k* e% @ k! `1 ~ Y, I: e
6 T% a2 D0 U' e& a5 n5 w wpclear
2 u+ z5 _+ j/ l! q8 w: l: j' }) M 删除所有监视点' t0 ~7 F. {' l0 p9 Y, X8 I3 j
. `3 v( E( I7 X7 ] " ]1 D) @8 s) C
0 m( D" c' Q! R8 ^7 s
程序断点指令: bp, bplist, bpclear2 k5 m; p& j! B9 A/ h
例子:
; F2 Z2 h$ {% s H$ }& V, f2 h bp 1234
+ R1 r4 p- e7 S: q 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 l: k) `$ v: W: R3 Z: B9 U, w: E$ Y9 M+ S4 K- N
bp 23456,a0 == 0 && a1 == 0
( P1 ]+ v' M4 ` 在地址23456下断, 且中断条件为a0等于0以及a1等于0
- O- m. J& E, { @% W' k7 ]5 \- d4 L& m$ L3 E U
bplist$ L# ~0 j$ o9 P
列出所有断点3 W+ {+ ?/ y# }4 q& H" I( v
8 S: k3 w( C6 |/ ^4 u9 r& ~ bpclear 3; T# m S+ O5 f' k2 g8 \
删除编号3的断点
7 g0 O: g3 O9 A( x, k! q, ]& H/ }9 l* N/ a$ J, e1 |) l
bpclear
. l- j( h2 }1 `8 d7 a% C+ I 删除所有断点: n( P, ^9 h( ~: E
1 z6 T4 W/ f8 S: r! Z4 }2 |! O. |
! S( o- D$ X8 N. k/ w
8 t4 L j0 y6 O) t$ B跟蹤紀錄指令: trace
0 _: x) ^+ z7 o7 f 例子:
+ |9 j5 j9 A! ~5 t$ m trace 01.txt% Z' g9 `, P0 X E' \' v
跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 m3 ^9 | T3 G" `$ S! P3 m+ v* C# i0 d# p0 d" c
trace off M% Y1 y' M @& O5 {4 ]
停止跟踪, 并且关闭文件+ C/ z, G4 n' T: k) ]
3 `# ?& |' E# T/ {# U trace 01.txt,0% ^, L8 Z( Z3 S! p9 }: `3 t
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ P- S( D4 T# Q# g) C1 c/ T6 R0 V1 E
trace off,0* J( E7 f, n+ C6 v: }
停止跟踪编号为0的CPU, 并且关闭文件
# g- A- n6 U& C9 k" `! Y- {* [% L- C4 |4 z4 E1 m2 w
trace 01.txt,0,{tracelog "A=%02X ",a}2 L0 ~. A1 g7 m6 x* ] r/ O8 S. G8 Q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ b0 \* L7 W) ^& o+ F1 ?# ] 并且在每一行的前面, 写上"A=a "# \ O% w. b7 C6 T" ^6 m3 c, a
"A=%02X ",a为一个C语言printf函数常用的输出格式
7 y" L1 k0 R4 S 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( e' h' t& {. H6 b
X表示为大写十六进制数* C3 ]2 c, q) G# M$ j* M$ @
5 L3 H) d' |( A: r& k: J3 Z! Z" h' p9 K! U q+ b+ ^4 _
5 j8 I% f9 k+ F
内存直接写入指令: maincpu
4 M7 _; }8 @6 T 格式为 maincpu.[][]@地址=数据
( ]; m; z2 o: s: t* V5 w' q* f 第一个[]:' @* e* \2 E" L1 H% u1 ^5 l6 U1 |9 R
o 表示ROM地址2 z& D$ H4 T6 l4 W$ C
p 表示RAM地址+ L& F% |9 Z5 D! U9 F
, {2 ^% n& L2 u
第二个[]:
, M) L" x9 l$ D6 v! ~9 B d 表示4字节/ A( p( J1 G8 R
w 表示2字节
7 ?/ O) j0 v7 }7 T. }7 @' u b 表示1字节7 s1 ?6 W2 X! z" j" E* i
6 C% C k6 x7 R7 C6 Q; Y
例子:
+ ^# j, Z1 U Y9 S j maincpu.ob@1234=FF
( ^4 ]$ ~1 e. u; P! v 在ROM地址1234处, 写入FF一个字节
" N% \" L* B& A& \! U
6 K0 O' K& k3 S; {% J maincpu.ow@1234=4E71
% e$ t& \/ f! c. P/ S6 x 在ROM地址1234处, 写入4E 71两个字节& N" M5 Y& _9 Q$ d k
! g e- ^% s- T$ u5 q maincpu.od@1234=600A4E71- L: ?3 t( G' F4 F
在ROM地址1234处, 写入60 0A 4E 71四个字节
1 w' s4 Z! o5 q1 W4 S& e4 w( {
+ ?7 i0 M* P9 D7 G& D' F- F 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 U2 z. m5 o* D3 H8 A" f( |2 s1 k
, J" `! Z, y0 E2 {
5 z( p. ]: W2 B0 L, {其他:
8 A' c6 l3 @+ k) e" V4 y1 ^ dasm 输出档案名,地址,长度
6 r! I0 w0 a0 L0 G4 y9 L; m 输出程序的反汇编代码& ]5 A. q) d2 M1 ^: A
例子:5 ] X+ j9 ~( Y: o0 r+ S
dasm 01.txt,0,100000
) B T- C* G/ W) ?$ H 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
6 d* m' X/ o7 ~* W6 p' [4 q8 ?: i6 m8 S& Y/ {# y$ c$ N9 ?# [
softreset/ k3 z! ]+ C6 v) k
游戏重启, 但不重新载入ROM
+ h, r D( i8 F- }5 p
% j4 j$ B6 b+ c hardreset
0 c5 F7 y1 @0 Q( G/ {1 W 游戏重启, 且重新载入ROM
5 X) a3 }9 J; B) l
% p* f+ ?( }. J S& c5 C. c snap xxx.png6 G9 @! o6 ~. p# _; i5 E: k
截图为xxx.png& ?1 e1 y/ A6 z4 w8 {: C2 G
9 U, W c* V& k4 j
- x, W9 b' |$ P7 m# n! M, o: B
* q: {# f2 }3 z9 i. d $ B# v2 l, L- U
热键:; M( G; Q0 \/ b" v1 j
~ 中断游戏
& d! n( b+ y7 F K/ o# b F5 运行游戏
. N% j( M, O7 D; k h1 X F12 运行游戏且隐藏调试窗口
: I& g) s9 M- A9 T9 h& ]- u# K F11 步入, 单步执行, 会进入子程序; I0 r* c T& N5 t2 _9 u6 g' Y. U
F10 步过, 单步执行, 不会进入子程序
$ \0 h1 D- k1 S% _% I, ^4 J+ j: k4 H Shift+F11 执行到子程序返回
3 Q0 ]! X1 i! a3 |7 ^ Ctrl+M 内存浏览窗口
; a/ q9 D" u5 E/ T2 ^1 X1 n F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU! O$ {! l$ A' J* o! T0 c
2 h/ p7 ~4 x9 K( E, V9 } ^{:4_94:} 8 v( F* a) J8 u$ b
^; `7 V2 q6 N5 I; O6 o G
|
评分
-
1
查看全部评分
-
|