|
|
3 q3 f5 G5 G. l/ _! j5 a很快速的整理我自己常用的指令
. l* s% ~. v/ m+ k# f. U% M" L' T: b% O* E7 K
{:4_112:} ( Q+ n5 [8 f" \3 |6 A
8 O( M6 f7 C G$ o) j! O$ a
MAME DEBUG常用指令
( @3 f1 R) F0 ?: M: |0 W, H& k( N2 m% t! y4 Z* o6 g
内存搜寻: ci, cn, cl7 q5 v$ q- O& `) e6 Z
F7 G' ?( j, X6 K7 N% J( n# t0 O
ci
& h2 E& F( Q4 C' m2 U8 f4 \, }4 M 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, k- C1 ^8 i$ k$ }7 w7 b- o/ \$ \/ f9 V% m* }$ C
cn, H" O/ j0 h% g+ c9 I8 }" E1 q
搜寻指令
9 a4 `+ m" u+ h; i4 Y 例子:
4 w- x, j7 l! b2 x. M' J cn eq,602 x0 Z" t5 l, T5 ]
搜寻目标等于60 (十六进制)9 G4 V5 H& ]0 f* a" X
2 _: J s: W7 ?
cn eq,#96% s3 q- \; l% E3 B+ n4 l+ E5 D) [2 {
搜寻目标等于96 (十进制)
. r. k$ u- h6 U; y* r
, j0 n6 K D, ~9 m, n. b cn eq9 C# _" J- u4 F. k C2 i
搜寻目标的数值没有变化# J2 r$ C; B) L2 l% x: m$ ~$ x
$ j- b; U6 t$ N& q cn ne
+ S) P1 D \! ?9 G; \$ ? 搜寻目标的数值有变化( X" v/ z. o! h; p \7 H
- U2 c# U! X0 I' J0 Y cn +9 k* A# T+ K. y
搜寻目标的数值增加: C; f3 L) v7 K1 K# K" u$ E
- z9 N. h4 Z3 S: [1 B
cn -
* {9 d$ I( u# o5 N4 q$ ?3 z6 Z 搜寻目标的数值减少# V9 W% ]7 j/ Q- o
$ B! |! D# T+ _: O- O& s2 a cn +,3
" J1 g1 [& q; ^# i: i 搜寻目标的数值增加3 (十六进制)% e, p/ H* k9 G8 `1 c% o% z4 E
2 n) w7 E) V4 K6 n8 ^/ Z" z* J7 P cl
* D9 D8 N# A0 x3 N t* h) e9 p 列出所有搜寻结果. U( _7 t$ V! _7 x4 E
9 p9 d. x( Z5 U; ` cl xxx.txt" ]% o( Z% E1 V! X9 w2 Z4 K
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% t, C9 i" Q, T; W8 j; ~, K
- o8 N0 J) E2 b, s3 n9 D8 W
0 a, C# J ~4 T. g+ j* _( u内存监视点指令: wp, wplist, wpclear
6 g+ T# A3 q+ @ U! i; N2 A 例子:
2 z$ o1 s% b1 b- S4 g- k4 R0 H wp 1234,1,r
3 ?% b0 i$ X( Q5 h$ o: T; Z" ` 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 [/ ~& e" B% a2 G0 p4 k0 }. ^# `
' d! }, r5 W. z3 k1 V wp 1234,2,w7 o$ M) ^8 a7 O0 R+ E- u# e+ N5 v
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ w% I4 g( O, x% u4 _" {/ V
O& y: X, G: j' u# M7 B3 B9 l wp 1234,6,rw/ U* U, l6 c o3 S9 B$ ?
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: q* R, _& `4 {8 S# |3 N w: \: Z a( A2 G% y2 _
wp 23456,a,w,wpdata == 1
1 l/ m2 x' l3 V d/ R1 x 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 n L y9 ]) @9 E6 d; G9 k5 T( ~" h3 y5 j4 c# ]/ }
wplist
/ a( }2 @! J# w% S! T 列出所有监视点/ `6 b: [/ j6 \) f
: L ?- m2 B& f8 `$ D5 A4 ^ F
wpclear 36 T f* ?2 ~7 ~7 a) P+ ], c
删除编号3的监视点0 v3 f" y3 a. x% d2 v& F# t
; t% {6 V( L, P6 N wpclear
" ?+ M5 }6 D$ j% y( P 删除所有监视点4 i8 O4 ?& w# A) e: _4 q3 B
9 W5 t0 ?" R( ^: r! ^; e
) d( x$ l0 T7 X' e
" j' J8 c; S Q, b& g1 s程序断点指令: bp, bplist, bpclear
0 u2 Z4 V+ [: N1 N: Y1 W5 E 例子:. q8 x+ \9 i4 W1 t, q
bp 12346 R( |- _3 ^ t/ T! q. O* {
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 Z* L+ A' P3 y: _
6 M4 ~2 P% u o% i+ ` bp 23456,a0 == 0 && a1 == 09 o% M; b; `9 ?7 m% A& ^* E. J0 R' r
在地址23456下断, 且中断条件为a0等于0以及a1等于0
6 c0 x" }$ A+ k/ ~( z+ G8 W
/ z/ R6 z" P& K! q3 o bplist. Q! y( R$ H6 S7 O
列出所有断点& \& \' ]) g, `1 `& S" G
+ ]$ p/ ]* b. F1 W- v0 a9 S bpclear 3/ J4 p. W+ k! V9 M# z5 `8 i% t
删除编号3的断点& N( A- n X6 {
6 m/ M0 K/ t& P3 \8 h' x, q bpclear+ x8 C+ b3 K3 s6 H: o& m. A
删除所有断点- m/ N- g6 _ q4 A3 a5 |
/ C8 X4 y% M! d
! `) j( ], v$ k- _- W
3 h* r; {# G) N# p+ X' D; h$ j6 e跟蹤紀錄指令: trace t" a5 f( C+ p: O& c
例子:- I% @, M4 ^# Z2 `* H/ M/ M. N+ j
trace 01.txt' h+ X( y2 H6 D) {" L
跟踪当前CPU运行的所有代码, 输出至文件01.txt
* X( r& Q/ } e6 i& l0 _
5 w7 ]9 W, k* P2 @& u. x% j trace off* J; v& U' h; d7 D2 b
停止跟踪, 并且关闭文件
$ M, V j* [, h; }) q
9 A& d- \4 A2 z+ Q trace 01.txt,0
8 X7 Z' m/ P) D& u( y5 ] 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
F2 C) S7 t2 s) N9 ?" U+ t; b) I* g) l Z4 i3 c* L: e& W
trace off,0# D' P0 M8 G) e* ^. H. V) z
停止跟踪编号为0的CPU, 并且关闭文件' t4 y9 p. Z4 K( Y) z
' X! F: |* A9 `7 ~. r) d: ` trace 01.txt,0,{tracelog "A=%02X ",a}
5 O) W. m7 V1 `" W 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 8 n( [4 W% a9 `2 o, `) k2 P6 Q
并且在每一行的前面, 写上"A=a "8 a6 I7 w) i8 W2 Z7 T8 Z
"A=%02X ",a为一个C语言printf函数常用的输出格式
* o' j1 } ?9 ]- k2 v; Y" A$ l 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- ~3 i3 {( Y+ A; d9 b
X表示为大写十六进制数+ r+ k0 \( V8 _+ f( k
- E5 w. b) _0 G9 g
$ G! r7 U) ~8 {1 u2 T0 |" {: @
, K1 {: |2 X' N2 o: T
内存直接写入指令: maincpu
$ R1 R% {" h+ x8 Z 格式为 maincpu.[][]@地址=数据5 k8 |. S0 K& _3 O. ^: k
第一个[]:
$ b1 J x+ B. n9 y- o: P o 表示ROM地址1 i o. \* l2 O2 Z% ^+ ~+ n
p 表示RAM地址0 E; I% s! p0 e7 Q1 j/ n% b- A' E
' a. O: v- }+ a) Y' f4 ?# w" z9 O* m
第二个[]:
. Q; o. H% v% S0 T. u8 @ d 表示4字节
0 h* B# C5 O" ? w 表示2字节# N/ l9 W* v, e" x0 r
b 表示1字节. I+ a4 U2 A0 a
/ l5 h0 h$ Y- W' G
例子:
; y. H/ u) N% e6 [" W1 L* J/ ]* a maincpu.ob@1234=FF% ?4 t8 b' t/ w- W" d' C
在ROM地址1234处, 写入FF一个字节0 z1 M* K; ]$ |8 o6 W/ K: X
/ b1 e( h0 i& ~3 ?
maincpu.ow@1234=4E71
8 F4 N7 ?* `* r" F1 w4 I" | 在ROM地址1234处, 写入4E 71两个字节2 }. J: @8 b( |: Z
6 S# m6 u3 N5 C0 `/ [% O maincpu.od@1234=600A4E71
/ x" I1 n7 n) G% X$ D- T1 s 在ROM地址1234处, 写入60 0A 4E 71四个字节' `7 S: i9 B) U3 e# ^
5 ^4 l# ~5 c- c9 d$ _7 } 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. A- f* R& G$ k% F" ? 2 X& ~: N9 l' E. p
4 O& v0 {9 X# W其他:, X1 y! H& d/ ] @
dasm 输出档案名,地址,长度% X! q) t+ `" O. M2 W; f
输出程序的反汇编代码
: _' u) p3 z7 Y0 J 例子:
3 E. t0 S6 t* K' C5 S* U& P dasm 01.txt,0,100000
; |" V! n' R4 B. N0 ~) ^ 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# t9 r" L( G( `' D: U4 z; v! }9 p
+ L1 F' `2 {6 D! {8 A+ k. p softreset
+ i! p0 B; x5 o 游戏重启, 但不重新载入ROM
7 w7 f* d2 m' s7 h- G) ^. {$ E6 f! A2 Q
* `- z9 N; N0 l% T# \% Z hardreset
+ Y. L9 j# ]* q. l& ~ 游戏重启, 且重新载入ROM7 x9 R6 P- B, o
3 O9 T0 F# b: L, a snap xxx.png! {) I# Q; `% ?! E# V
截图为xxx.png
# `$ W0 D0 h: w9 {5 O# l* i s0 X+ z3 g
2 @, N4 W" o4 j 5 n$ @! I$ s0 E6 X5 C/ u# q
. ^" @; Z/ U( g, ^# K+ o5 E1 v热键:# ^ \9 r3 X) Z9 R& y3 O: \
~ 中断游戏
* K/ x6 e- K" J- |/ E6 J4 |: @ F5 运行游戏1 M3 o1 v# H4 V! X5 e3 Q/ q' Q
F12 运行游戏且隐藏调试窗口% s7 h. [; S3 M$ r+ _
F11 步入, 单步执行, 会进入子程序
4 z# _/ i% J T: |6 m. Z F10 步过, 单步执行, 不会进入子程序1 N2 `* [; D3 W1 G' P$ }1 o
Shift+F11 执行到子程序返回
/ @6 I" s: a# i Ctrl+M 内存浏览窗口
: Q0 ]7 l) [- D6 ^( b4 l+ d F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 S: R& b# R* D3 d, U/ ]3 I2 n6 G9 p( e( g
{:4_94:} 9 _0 P8 t& V/ a
# z P+ u! K) `5 X$ f+ X4 I+ o |
评分
-
1
查看全部评分
-
|