|
|
# ]0 j! `% I! Z0 M9 N6 q0 u
很快速的整理我自己常用的指令
- g8 @; u! b+ x) [6 m5 @
5 m# ?+ b3 a7 Z- ^3 {# _# g) \+ m Y{:4_112:} 4 [: V% w7 |" W6 ` O, L
9 M* o3 p, U2 q0 t" p; zMAME DEBUG常用指令" _4 W6 r, N& Q# X7 `0 t6 X
7 x) x' ~+ @6 ?; W! R内存搜寻: ci, cn, cl
2 ^- {" `* L4 I; a: C( O, ^
; v' H) Y; G0 s$ q! z0 T2 z/ o) s- Q0 ^ ci- y& `! Q7 r; T: a% I
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; w7 r$ b. S- K, C, K9 E
( Y0 g: O2 |* ?8 a/ v5 M cn
. C! {! B9 L9 u* } 搜寻指令
# ]3 o8 f, a2 A, p, P7 \ 例子:
! F" E9 g* U& [5 ~2 D- U cn eq,608 s/ S- I. U2 C7 P
搜寻目标等于60 (十六进制)
0 z* [; I. w- j: u 1 v. H/ I% L( K7 Y
cn eq,#96- F2 [8 ]" ]& N6 _; ]+ d
搜寻目标等于96 (十进制)% I. w9 J1 R9 k8 B2 L
, b0 L6 Z+ R( W1 G' a+ R7 j cn eq
- P, [ S/ C5 C1 S% e 搜寻目标的数值没有变化
" l3 C* R5 x+ j
* x# X: }( K4 t9 J cn ne9 i% z$ v* R5 @; c
搜寻目标的数值有变化& E) c5 V. m& G3 Z2 x
( D7 r& x0 x- H7 K" U0 r+ Q cn +5 V; j& w. _2 y, B
搜寻目标的数值增加1 _4 z6 d* h* f D6 C
. r: D9 n2 ? `7 x M# V
cn -
- Y }; I" ?% R; y 搜寻目标的数值减少$ W: ?( w+ v; \& C5 @' z- f; z4 c
2 a0 f: \2 x z h
cn +,3
3 p3 o% v k* d, U 搜寻目标的数值增加3 (十六进制)
$ ]( y/ K5 D3 S s* G* \6 h- P3 T- \# Y2 ~% b) i* p3 o! k
cl0 \5 R# X8 b+ r
列出所有搜寻结果
2 d9 t" F/ o& b% N
; C/ O/ ]0 P4 K+ z: w cl xxx.txt
2 \3 U$ C- u: v( w; `8 k, n; Y 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 B, U, K! f% n: q8 `
* X% J9 \" a" B. f% L) P , Z, q( _: K$ j, y( Q% J$ A
内存监视点指令: wp, wplist, wpclear
% ~' B$ O4 r6 [7 z2 G( E8 X+ G 例子:
0 |+ l+ K* o3 I wp 1234,1,r5 R* S+ O- u# |: k
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! g$ z$ B( s- E4 a
- Z7 }- \4 B* K" {/ U wp 1234,2,w4 E4 ?* x M# B5 X# R' K
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2, e b: h# q# Z3 h! i2 Y2 C
$ M, O* \# X" `0 S2 r+ N
wp 1234,6,rw
7 d/ I3 Y9 C( e+ ? 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" w; V; _& R% F
( H9 I1 t$ M o/ e1 J/ N4 n
wp 23456,a,w,wpdata == 1
/ r; f; q; f2 C# h0 R 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 W7 o$ Y# [7 |4 ~5 Q
, j9 X7 B0 k+ v { wplist
. Q" H' V! C1 P 列出所有监视点% i5 c H* B- t# v6 Q
9 \4 V4 a; d0 [5 V1 a- {2 y wpclear 3+ X- o; F1 o8 v: L8 }! w
删除编号3的监视点" B1 t6 ?$ s5 U7 V
# {% k+ }# t" g) D
wpclear
) ~: C% ^, f" e+ N$ G. |" Q 删除所有监视点
K8 ~& ]1 |! N0 c2 c
- P7 ^5 K6 O. Q$ D5 ?/ S) j
1 E( K& G4 V' w7 x
3 Y9 \) o) X6 _2 m程序断点指令: bp, bplist, bpclear% {1 D& w- a5 O2 t- M+ Y( Z6 Y
例子:
5 P% `! |8 W( V bp 1234+ [. J3 v' f0 m& I- m( u. I" W
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
$ } x! H6 b. C+ S+ N w! j* j/ ~8 K4 K6 X5 u8 X
bp 23456,a0 == 0 && a1 == 0
7 i& y; r5 Y7 V) f4 I$ C. _: p 在地址23456下断, 且中断条件为a0等于0以及a1等于0
3 s c1 t8 `: V2 ?
e: x9 |1 L& j. g2 N bplist# ^2 C; J! r; U" f- b1 l8 K
列出所有断点2 \* Z- U- q1 l+ t0 U& L K
1 u6 p2 S8 y& q; K! ~+ c bpclear 3
+ `7 V: j/ ^. s7 d2 K 删除编号3的断点
. `6 R" ^- n! l: o: ]* D! ^
" } o$ {: [5 P5 `! S7 X$ ]5 b/ _ bpclear) D3 N: R" p L R: {
删除所有断点
5 r& L, R9 f, n' q' h
8 B# k& f) L; c9 [1 F+ j4 O' U/ F
( T+ H- r# T2 {* [ 1 z7 J( T5 {7 m# f2 K
跟蹤紀錄指令: trace$ f ]! S- g8 [5 R1 e
例子:
+ P" |0 `7 s" }, d5 d. z# Z trace 01.txt1 G7 w i6 Y U5 d0 U+ }: X, R
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 N) [$ e$ D9 |& i/ T) P% X
d& \& t8 E' C% X
trace off; Z1 g, b3 v& Q+ _7 ~9 b3 ~9 p6 M
停止跟踪, 并且关闭文件
! _& ~- p( L1 S; R
4 w7 u8 k8 |( e trace 01.txt,00 V- r' V6 k/ k4 g, [, @, ^
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
X/ P q9 W& i2 t0 X: h7 F4 r3 ~4 A+ h2 X, C
trace off,0, t1 o0 W: K: m
停止跟踪编号为0的CPU, 并且关闭文件3 Y( P3 \# B: t/ q) `9 d2 G
% n( ~4 i0 k+ F9 W: v trace 01.txt,0,{tracelog "A=%02X ",a}
, O: O# j# p. y9 U$ l 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; D H, ]4 U) n. x4 B# o 并且在每一行的前面, 写上"A=a "$ ~ b. f% r! x
"A=%02X ",a为一个C语言printf函数常用的输出格式' m" `' y6 Y0 J5 \0 o
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入" Z! N& b: a9 c! O
X表示为大写十六进制数
3 |6 L$ x8 K5 F: f- `9 p2 Y" x# ^% c4 D# e4 V* `- ^- q& t
+ S0 E* v# m9 L5 I R" X# X! C
/ N3 B- L0 b+ u, b$ G8 e ~6 k: [. R) r% A
内存直接写入指令: maincpu# S7 _: I6 L2 ]/ O& s3 K( ^
格式为 maincpu.[][]@地址=数据3 I0 e. Q) w% \: w7 |
第一个[]:
v+ f& G- v; A; a _: u* E o 表示ROM地址
1 w7 ]2 J1 s2 q3 [2 c p 表示RAM地址
/ I, x# X) x5 V: ]
. v- p, W3 r1 Y 第二个[]:9 @( ^5 v* {! e
d 表示4字节* ?+ N9 D5 w+ W2 b* Y
w 表示2字节
) D8 f9 v6 `( J' R& z h2 S b 表示1字节2 E4 t6 A% ~+ L! B9 i' o) H
" c1 E' i% j9 | 例子:) g% s4 f; u1 n; o* G
maincpu.ob@1234=FF5 ~* ~4 W9 \- Y" O2 O7 E% D
在ROM地址1234处, 写入FF一个字节
4 b6 B5 o4 f# _) n6 ^
) [! i4 N0 N4 r! G3 O0 @) V maincpu.ow@1234=4E71
# b: @- f5 A% B# D 在ROM地址1234处, 写入4E 71两个字节
6 h# e( x5 Q' L: a& d7 T3 Y- J8 b% d4 H5 W. X/ n9 [/ Z
maincpu.od@1234=600A4E71- N" V$ |, Q/ M. {7 D' t. {# t( ]
在ROM地址1234处, 写入60 0A 4E 71四个字节+ H, W" k6 b7 |" t) j
6 m) o3 p& G$ X: i' d 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
* b, C4 U% L; z& Q- [" S% u
3 [! b9 J c) [# U) o: D6 E( V- _
其他:
5 S7 V% G' \9 L/ r% s* r7 _, v! [ dasm 输出档案名,地址,长度
: _4 Y {# V& o1 j" a+ [5 I r9 d 输出程序的反汇编代码7 ]0 \+ q% | } C0 H
例子:% u. O% l2 e4 d) r' e1 R3 r
dasm 01.txt,0,100000: a7 M2 D+ V9 x6 o( n1 h
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( s$ k. d, ?9 c( U& g g, h
1 t5 V( g$ {0 a# h softreset
. { S0 y! m) A0 S3 e' ]) e2 G* C0 L% r 游戏重启, 但不重新载入ROM
) J; {5 e; P L0 C
0 q* I; |7 X' ~" |$ m2 c1 [; ? hardreset) |# d7 ]$ B8 v& F: f$ ` J
游戏重启, 且重新载入ROM2 U* ~ M7 ]4 b$ `" L& h0 j
( b1 t* a, }/ `/ K2 }5 n; `
snap xxx.png6 f6 g7 D0 v( Q) A, [$ n/ _7 ]7 k
截图为xxx.png0 w& j! }0 s! d! c' Z
5 V w2 i" V: ^ % H+ G$ X( b: U6 J2 M* a
& s @* ^8 m9 o& k0 R! R0 ?7 _
0 k$ n& k: g& ~/ K6 G5 p
热键:
5 U. ~7 O* v1 h5 g ~ 中断游戏* M4 V+ A. M! e; v7 ^ l o
F5 运行游戏
$ T2 k$ {& T3 h' K0 _& { F12 运行游戏且隐藏调试窗口5 [) [8 }' c9 C, { l1 a8 g
F11 步入, 单步执行, 会进入子程序4 X/ P) U( P5 v6 |6 E: h
F10 步过, 单步执行, 不会进入子程序7 B7 m$ o5 k. A$ i" N; K
Shift+F11 执行到子程序返回
; t, E3 A3 c7 Q8 c* ^ Ctrl+M 内存浏览窗口$ P! M/ N7 @8 ~5 g
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
4 F. I! f0 J! y d6 _3 F) Z& G2 e9 A
{:4_94:} 5 m/ e4 ~8 K. M( T. [8 U
+ {. h2 c( ]- T3 m5 v
|
评分
-
1
查看全部评分
-
|