|
1 ^% _" z1 v/ ]8 h2 g! \很快速的整理我自己常用的指令
' v- H% R. f' J% [) k: D4 A9 y& a! G. W
{:4_112:}
/ L5 F# S, E) p4 s) ]. f& j/ J
/ o$ ~# |9 V( `* x9 P$ @MAME DEBUG常用指令
+ p8 O% ^& r/ U' x/ N. Y6 G( M: h; ?- {
内存搜寻: ci, cn, cl/ m$ m9 ?/ J% x. p" ]: I3 b9 k- G+ B
1 }- |1 `2 M0 W& w; `( G0 W
ci/ D6 Q1 S8 ~. {' D$ U& o9 H t. [" |! ?
搜寻任务初始化, 每次搜寻一开始一定要输入这指令1 v5 n, O D" D( t1 m& i
* W8 n0 X1 \3 V7 y0 z% v+ o. Y cn* r( i% I7 \1 L4 `. I* ~' c% |
搜寻指令 a9 u1 |% M6 |3 `+ I) M
例子:
% T# \2 F. \1 @) o `) m$ ^9 p. u cn eq,60
: m a1 U/ M- Q 搜寻目标等于60 (十六进制)3 O5 X, X5 Y6 w* Z% e7 Y' o" h- x
8 j; ^3 d# M$ I1 V cn eq,#96" ~$ y9 g3 o) Q; |
搜寻目标等于96 (十进制)
0 ~" j7 }0 n+ v) t) j1 a$ p9 [7 K% A# f- n, x$ v; {$ ~
cn eq5 m4 p- K3 f8 O v% Q, ^9 X2 p
搜寻目标的数值没有变化
+ x4 G6 f$ V8 J9 L8 `$ U/ j/ n4 C v/ T, |# R
cn ne- Y/ T: r) l+ G0 l3 F
搜寻目标的数值有变化3 I" Y' i# G z2 a9 D
9 C5 v2 j$ P. }9 h; f0 Z cn +
! P W! U0 b9 X5 A5 q6 O0 G 搜寻目标的数值增加" t7 V, h: S. F5 V/ C& ]% ?
) B. b3 b/ y7 k
cn -+ b) H( I, c# ~' K& _1 s
搜寻目标的数值减少
# O! c. p( z2 H* P# `( |
' n; o( V$ l# m/ V2 e1 @- D cn +,33 U1 N: j9 s' a6 ^
搜寻目标的数值增加3 (十六进制)# X( ], ^% ^. W# \7 N
5 b0 v! c6 ^& D! H/ D, U
cl; a: R+ X$ t' g( A2 y# i/ _
列出所有搜寻结果
5 V( K3 m' [# ]7 I' w. @# J! x
! K3 D _7 y# l [ cl xxx.txt4 w- ^( u& N) c O @% ?
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* d4 M( A5 A8 S) n5 u& i
- [" U$ c" B" e( l* h
$ m7 `1 t0 I# M- ?8 S- z内存监视点指令: wp, wplist, wpclear
% O6 A! }% C1 } X8 x8 x9 n 例子:+ N$ J% ]# |6 o: b. ?
wp 1234,1,r: l' b; B C, l8 b3 j, v$ s
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ v; _: T& |: p" f f
* G0 S' m6 v; Z7 a6 x7 s
wp 1234,2,w
3 F1 N H2 C4 E+ @, o' |6 M" F, O 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ l/ P2 s; s- h) \1 }( K' A
# w. y6 ?8 B& }" _3 _- L# O
wp 1234,6,rw, F: y7 |/ v4 C! E [
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& l6 x2 _, ?. c* H% T4 R' _+ n. z1 q1 C* k8 |4 w: v; m# Q2 u Z
wp 23456,a,w,wpdata == 1* l- \8 S2 ?# y$ O' ?
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
5 ~& E- S: l0 d4 C6 f+ D
! |2 a; J% I' j* L4 L | wplist
8 _" R# X, |+ {+ ^; X/ \ 列出所有监视点& [( f8 w' N% W' N6 O; p6 M9 v
P8 U6 D; Y. \# ]& G wpclear 32 u3 ?6 }" W3 G8 [% G: h
删除编号3的监视点
/ M% f& D' h/ U% {$ T) N* e9 |- D6 d+ P
wpclear s/ u0 Y+ D4 E- ^) p' ]0 { F2 Z \
删除所有监视点
& w9 ?% S8 ^6 p8 _6 R
: { K3 B$ u" V, {; y- U) T: k" t
5 P1 x5 D) o. O: x( i0 M% z0 [+ N! u! x8 o
程序断点指令: bp, bplist, bpclear* h6 A, m" p+ C8 F9 u
例子:* _. ^" i5 _" C/ f% ]# |+ J n9 C
bp 1234) {, X1 z: Y* x, w( ?# L: G
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* a, ?4 d; u {. O& o& e
0 I+ K' ~) b& y
bp 23456,a0 == 0 && a1 == 0
1 {( A- i% E- X9 ]. g. ~ 在地址23456下断, 且中断条件为a0等于0以及a1等于0- E+ c6 Z/ B" C* x) M0 G
; k5 S0 d. J: d; g
bplist3 p. G/ n; w8 I$ ^, A. A+ o1 w
列出所有断点
( M7 {8 [! C# B8 L/ ~- A4 R2 ?; h9 l- [: V8 Y; q3 I% X
bpclear 3, i+ D2 Q# {" M& ?) s3 N
删除编号3的断点
& a8 a' J6 g m: Q, Q8 k3 v
) ?' p' S( Y8 T* O" K; S$ D0 o bpclear/ P- B1 i5 p5 i( [" ?" I1 k
删除所有断点: {6 z" r2 r4 {. n8 q- d0 @
P. n! a6 S1 D. H$ U
# K4 U* Z/ R) C- s9 P " n' |' ?: k. d1 L9 r- [# z
跟蹤紀錄指令: trace
7 h% W5 ~6 S( [( Z 例子:
0 z" F' h1 g+ ?/ P trace 01.txt$ p9 Z( U3 v9 Q2 L6 U
跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 ]5 ^, G) H0 c! x. i) ~. A& _, M3 ~/ }( r) e; Y
trace off2 N- p+ W [% `% `, f
停止跟踪, 并且关闭文件
1 @2 f3 I% U2 Q2 q. _* d6 z; j: y% G
trace 01.txt,00 u. U5 |/ `" h% N. ^/ s
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! B4 ~( a" @; G+ b5 } G
7 P4 I' Q0 ~- @1 R/ Q6 k. N2 l* \ trace off,0$ V6 @( Y9 ?5 f9 f j3 E% W
停止跟踪编号为0的CPU, 并且关闭文件
7 v K7 O% a" Z" M) m3 v$ o# J# [4 f- P; I9 d0 n2 [
trace 01.txt,0,{tracelog "A=%02X ",a}
# {) c5 q/ i# h 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt * h9 L. O: w q, k" v
并且在每一行的前面, 写上"A=a "
4 x' Z! z/ c) u "A=%02X ",a为一个C语言printf函数常用的输出格式6 ]0 n! j1 Q9 d% b: H0 t) z
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 `# q5 d0 |9 M7 b; n: t
X表示为大写十六进制数
) F% w4 t8 c: o& j @$ M; ?* G
1 T4 n$ _8 Z s2 V
+ q S* l! h+ K
! y8 {! }. |4 Y! K5 _% o1 a内存直接写入指令: maincpu- _( m! f( P) t+ T9 R3 ^
格式为 maincpu.[][]@地址=数据2 `- E+ s6 q; o9 c. ~+ s
第一个[]:
8 p+ V3 M) e* y# y Q% _+ z o 表示ROM地址
) O7 ~# w$ v* j p 表示RAM地址
) n. q' s8 k' e" {. `9 R$ e# v( e9 ^( b# C& n& X$ n
第二个[]:
! q2 K+ M0 U6 b0 W9 N4 B: ^ d 表示4字节
+ v, K' p4 u8 J9 S w 表示2字节) {6 k- C$ S# Z% ~; t
b 表示1字节
/ i7 c7 Q1 P/ Q$ S7 e% F' V) E" o. ], N9 T% c L
例子:4 H$ l- N. T4 k. l
maincpu.ob@1234=FF, R1 L- E6 P- X, t* g5 D* B
在ROM地址1234处, 写入FF一个字节) ^3 J6 J% @- M( u( L
$ v" w' [) D4 t$ ~2 v5 Y maincpu.ow@1234=4E71: C' Q1 M2 P8 w Z
在ROM地址1234处, 写入4E 71两个字节
6 X* ?/ m. N2 _6 K& B
; I! |0 \9 l9 e1 Y" j maincpu.od@1234=600A4E71) J" C) v5 X& q' h$ S/ S7 R
在ROM地址1234处, 写入60 0A 4E 71四个字节
5 W7 f& L L5 k( H% z! F: A/ `' @0 s. ?- L: C- s
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 E/ i" S6 W1 J/ l* w: j$ p
; |) Y' |1 @6 K0 |) L( Q
5 u1 T8 H" T. d/ Y& U) T其他:
+ n j4 R7 d1 q! W n2 V% t4 Y dasm 输出档案名,地址,长度
9 Z+ B. E% _' \) b/ z% n 输出程序的反汇编代码
0 e' R9 i1 R" ? e- B6 [! u 例子:* j7 K' \5 S4 p
dasm 01.txt,0,100000
( e& w% W* P; K+ U0 p& n; k1 a 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
6 ^7 s% g2 b; o5 y0 s
: ]! r/ I& @3 I X5 b7 S! v. D softreset( o- f) n6 E% i& N* M6 p
游戏重启, 但不重新载入ROM
5 K; L7 |1 H7 _9 _# T) V& S1 R2 S. g. f
hardreset0 n- `, Q4 Y, c1 W+ P' w, {
游戏重启, 且重新载入ROM; h8 i3 h3 E% ]5 K& [. m/ J
# i( a* W# k+ v- N
snap xxx.png1 ~9 k# l5 v0 ]/ F4 N7 h$ x
截图为xxx.png
* d* b1 j( J9 u$ j a( C+ O
! {9 S W# C% \+ R& I3 T . t0 M8 O. P6 c
7 Q" ?) t+ i( e. O C $ E3 r- ~6 a- c$ m2 s- U
热键:
( K; Z, A8 e7 `* ]/ u ~ 中断游戏% N& m4 S M% F1 S" X
F5 运行游戏, q. M( U; O# V9 L4 f6 J; D0 z/ i
F12 运行游戏且隐藏调试窗口
$ f+ R+ M7 u* w: v m* T F11 步入, 单步执行, 会进入子程序' H/ `% J B @3 c5 C5 V. b" H
F10 步过, 单步执行, 不会进入子程序. z, I. |9 U6 g0 o
Shift+F11 执行到子程序返回
( n# d8 q8 Y$ N0 b4 a! C Ctrl+M 内存浏览窗口- s2 G% R* I( F7 J- y4 O
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, E" \# J D' [' w3 @
) N' F9 Z# U: ~1 ]8 V% Y) p3 ?{:4_94:} * ~, A) y* K7 J! G- e
& \2 l) n, {0 r! z; Y$ C
|
评分
-
1
查看全部评分
-
|