|
|
7 |# u6 Q( ?8 F2 |. p {9 o
很快速的整理我自己常用的指令
4 u- _$ k2 p3 [& w X4 k/ E) a8 _$ V2 `# P4 X
{:4_112:} 6 ?7 I9 y8 w! y0 \
: b* ]1 s" [! C5 p& s; q: D# ^MAME DEBUG常用指令
+ l. k( d2 R3 ]* {: A: \# }0 b3 T$ |) P- |4 q4 e: u4 E1 Y( I
内存搜寻: ci, cn, cl" r/ M: p. k3 j C3 m6 q
1 I- R" d& m# \# R" [' d$ d ci
: T9 m! N( G! I: {6 F- e y 搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 l( G; c) g* r8 h) S" O
" c% e' h# J2 r5 I( `" r cn
, L P/ E3 S2 b: Q* {) n6 f1 d 搜寻指令
4 Z! n9 c: Z. @" n( h 例子:
: i1 W F( t( F% r$ L9 L5 _ cn eq,60! {; o. B1 Y! Q9 C& d& o& s
搜寻目标等于60 (十六进制); ]5 U! E) t9 z3 ~- _
' f" c+ N: `9 `5 S6 `/ K! q* R5 ` cn eq,#96# `- G! i- a$ Q# H4 p
搜寻目标等于96 (十进制)
% t0 I9 {6 [6 ^+ F! m: k' ^8 V" i( y1 \6 k& ?: O. w
cn eq p3 J0 v' Q2 e+ K
搜寻目标的数值没有变化 u) j' N. q9 B7 G/ u) f6 U& K
0 V q' ] N7 Y- s: W& {! @. G cn ne1 [4 y9 p; j' |0 o) Q" t+ @& t
搜寻目标的数值有变化3 z. p8 F* F1 B( [. u5 k' ~3 [
% a. z( ~+ {/ {" K cn +3 O6 w( _ k. n
搜寻目标的数值增加7 X8 S3 v+ e3 r
+ k3 A% H% I1 y/ V7 x8 o, v cn -
9 _6 g, `' ^6 S2 o+ e. X 搜寻目标的数值减少+ ^. ~1 T _" h3 ~. z5 E
( \8 ~: a: h$ `. r" ^, w cn +,3
+ A& i# ~ ?* H6 w- K n 搜寻目标的数值增加3 (十六进制)
q7 U7 |( H3 a" [, @! A; x5 ~; Z v' t' Q# S
cl
4 E; i/ A. A" z$ b; B& m 列出所有搜寻结果
7 h9 c, v9 ?( n" C. w& ^; d K* G3 A% D# m9 ?/ ]5 r4 |# c& Q% Y
cl xxx.txt
- B3 t, p' e5 K, Y: _ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 T I6 S q1 J* g I, Q! n, J
7 p6 Q1 y, ~$ u& }$ Z k" ~, `) R/ x
7 K$ M. u( \$ \( ~ ^7 @: I内存监视点指令: wp, wplist, wpclear, h/ \7 s3 q/ m; @. T
例子:
) l: e$ B; c3 u wp 1234,1,r: E) Q! d# B X0 i: H# B. L
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# R5 a' O6 q6 g4 u+ p( K
. A% _8 S6 Y7 R0 s wp 1234,2,w
& y! h) \2 n: E# c, } 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 M, M+ F1 ]5 B5 _' K
. B' C1 S r* k" n0 \% `
wp 1234,6,rw9 |/ v* [! Q( k8 o
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: W+ N+ d5 f# X
6 ?' A" c$ C9 R1 Q8 T7 V! W wp 23456,a,w,wpdata == 18 V2 G+ r3 u" ~! O- J, K4 }4 c
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' }& J; |0 j( V
! b* p! {- Z$ K& l: h8 p) D9 F
wplist
1 V+ a0 c9 g" w j6 |- h% K 列出所有监视点
1 ]; |7 O3 d: ]2 {8 F) w A! Z3 ~
% Y# D+ D3 E: E% c+ Q; y9 u wpclear 3
- ` F8 V) [6 u# ~& q& }& G4 a 删除编号3的监视点. z: i9 B/ }: ]* t" c1 e( i
$ Y( J9 M0 p' z! f- P
wpclear5 e* [* S: N: V( |& {5 f2 D
删除所有监视点# @2 i; ^( Y: Z' e3 [$ w
7 I. U; K! W) {4 z
$ }, F7 A, n6 b% P' l0 b( Z5 u) S( i6 p0 G
程序断点指令: bp, bplist, bpclear
1 _! D8 i4 g2 m+ G7 W3 n7 m 例子:! V/ G+ S! b$ p
bp 12349 O; Y0 {2 k9 ]6 Y0 C p9 ]5 x) m
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, P/ S4 [2 ~- g. L( ?
4 b' ~) u4 y( p+ q1 Q' G
bp 23456,a0 == 0 && a1 == 0- n( h/ V( f0 P* o1 Q
在地址23456下断, 且中断条件为a0等于0以及a1等于0- c1 e8 a* D. x% X
+ q! E: M3 p' z
bplist+ L& e6 `% t& {+ ?" q# ^
列出所有断点
$ c, y6 F" y! o7 n6 H; h9 t2 d7 q3 P1 F \6 ^7 c
bpclear 3
7 O. @ t& T7 o" j 删除编号3的断点9 k- e" g6 G- y6 G0 s
. ]! Y/ V, S, P/ L9 B+ ` bpclear
; N5 f* W$ k. _' \ 删除所有断点% v9 w! b- Q0 V8 |& {
- @3 }: \1 W* P! e$ Z) I3 o
Q o9 H- J+ c, F
$ X' i' R( q. c9 e+ n# m
跟蹤紀錄指令: trace; }+ D& [6 n+ d# A" W* L7 s) W
例子:) s/ x& d% y4 Z* X4 N
trace 01.txt
9 {6 p0 q/ }1 O 跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 Z* [$ S3 H. t9 S* L" B# A& B0 t. l B
trace off5 y7 g# r) w- }5 n; ^# M/ N
停止跟踪, 并且关闭文件
% ? X, K @) r1 }* V% x9 z; f2 r6 q; I* T4 K8 U
trace 01.txt,0
8 }6 Q" n$ J/ F7 G 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; Z7 T4 c* n+ o" w* y# r
1 C: f. g% m- Y1 d8 `7 Q" C' b trace off,0
" B: p1 G" X( \9 w; Q 停止跟踪编号为0的CPU, 并且关闭文件
0 w; m C3 D$ Z4 v! C0 n6 p- y8 c- f/ H8 n6 C
trace 01.txt,0,{tracelog "A=%02X ",a}8 E. ^' Q1 G; E. t8 O
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 5 Y0 n9 E0 X) c1 j; B
并且在每一行的前面, 写上"A=a "& ^' R4 Z6 x: i; E. P6 }9 g
"A=%02X ",a为一个C语言printf函数常用的输出格式6 L, M9 A7 X7 N% x6 b* Q2 ?# u
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入) P9 G5 D8 z) K' w6 b7 |) h; i
X表示为大写十六进制数: K# i* I% t: x, E0 ~+ C% n
g" M# E0 \7 y. p/ P( L) K) B' ~2 a5 i9 ^/ D5 @- z3 C
3 \( I2 h- G: i$ W& b6 q) O" G Y
内存直接写入指令: maincpu. F' f3 ?& X! K1 P
格式为 maincpu.[][]@地址=数据
, H. `/ _* Q l: ]9 O' V. m 第一个[]:
" I, E7 E2 S; a' w' P/ g% f8 U o 表示ROM地址# ~7 G9 t, h' y" H& w* l8 h
p 表示RAM地址/ _1 i" @2 X2 K9 F, @
& o; p. P6 n' ^ 第二个[]:. V3 ~7 Q! E/ g$ L
d 表示4字节9 E( N* e, Y& j9 D: h
w 表示2字节
! w& Z2 i$ A8 w# W b 表示1字节: W" x# Y: r: E
$ n9 I* h. `6 Z: O1 S 例子:/ H: y4 _0 S) B2 P8 p7 Q
maincpu.ob@1234=FF
b( K$ U2 ~+ Z 在ROM地址1234处, 写入FF一个字节3 u5 S9 N* }* Z+ ^8 h
7 F- C1 l/ O: _ maincpu.ow@1234=4E71
3 v N* m% t) H* S 在ROM地址1234处, 写入4E 71两个字节7 N0 A8 ]7 k4 k; j9 b9 ^( C6 Y
6 T0 E/ z: @; T. L* l9 q0 M6 G$ Y3 R maincpu.od@1234=600A4E71
, w" ~: `- W% c 在ROM地址1234处, 写入60 0A 4E 71四个字节( _7 k7 a( p- l. h' `) ^8 x% n
8 e& Q- Q4 ~2 x8 ^# C$ k' D$ b
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( @4 }- s |% H9 r& ~
2 A; ~9 O) \5 e! b* I) Q) U' Q2 H5 K# t9 V0 y# f; @$ H$ d% g9 _( H" T% b2 L
其他:
: d. s X$ z9 T( S8 [& x( ^ dasm 输出档案名,地址,长度+ y+ n0 J( ?7 l- [# k5 \
输出程序的反汇编代码# c5 s% P1 g! ~" L5 A0 C
例子:; @- p) [8 |* {0 G
dasm 01.txt,0,1000008 J e5 B6 C7 H+ ?' ` d
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
/ P, w: T0 D& K& X8 g" R9 a( t3 z* L' p$ t+ M
softreset3 c' W# W, ~) r( ^: S( h, u! O
游戏重启, 但不重新载入ROM
5 I% X# }( n" z/ \* d1 y" [8 c2 T$ ]5 h- D3 C9 Y
hardreset
/ ?& f! a' G1 m1 _# k. ?# L 游戏重启, 且重新载入ROM: d7 j6 i# p4 Y, B: G% R! E4 m
; o* O! i6 I9 ^' f) q i snap xxx.png6 R2 j$ ?+ y8 w. [( f% Y
截图为xxx.png
# U+ W7 y3 q8 o$ m9 o
5 f; n) J/ D9 ?& i% z) w . {* K3 c. u7 @" U0 f
5 h. ]+ r, a$ F0 O, ?/ k
4 B, Q/ y$ J* A8 Y/ C0 a* N' a7 q. S热键:
" c6 j1 R. ?" |9 p ~ 中断游戏0 ^9 b- I; w/ U3 \ m; A; [. X) r
F5 运行游戏
! c5 n/ `- q3 e8 N O F12 运行游戏且隐藏调试窗口
$ z/ |) _9 F# f0 C% x! d/ [) [ F11 步入, 单步执行, 会进入子程序
* b7 B- @% s3 w, x F10 步过, 单步执行, 不会进入子程序
% I/ D, I: E# o h) j' j. ^. j2 P Shift+F11 执行到子程序返回/ h# ^$ }; ~7 B+ K( R2 q
Ctrl+M 内存浏览窗口+ V9 W; E- m5 ~9 \! h
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# W n0 g+ K9 W; z; ?3 D9 u! o' |/ ]# d
{:4_94:}
( u$ b5 s0 E7 A5 m* p& ?) g, c( r" p7 @- q5 j# Y2 f$ h6 K. ~" J
|
评分
-
1
查看全部评分
-
|