|
, v! w8 M) M& D, T+ D
很快速的整理我自己常用的指令
- C" c& j# q5 v4 Y: A- P
' i# t# L! j4 h$ P" ~{:4_112:}
! Y: _8 ^. K E% C z7 H$ W) W3 w0 v" |
MAME DEBUG常用指令8 q0 w6 V2 M: E) w# T) R! ~- Y
6 ?1 N: ?; V" F# V( d2 Y( c( a! Q1 M0 f
内存搜寻: ci, cn, cl- o; q4 C8 [, C7 s& v: \
/ t5 A0 ~+ {5 w+ f2 R ci
/ v: [8 U7 l9 J6 h* c; l1 S 搜寻任务初始化, 每次搜寻一开始一定要输入这指令 W3 N+ D$ J/ @4 U1 V" k1 l, f
* I# l- S% ]9 D4 X7 S, ]
cn2 [6 q8 E# e) N7 u2 r' \! k
搜寻指令# w2 l+ y1 Z4 O& Y, w* O c
例子:! A" n y: x( e( ]7 Y* v$ t, p
cn eq,60
8 _5 \6 Z0 k/ k3 M4 p2 z. ] 搜寻目标等于60 (十六进制)! X1 q4 \/ H* [2 S* R8 X
9 G! J, ?: _0 \- l8 E1 ^4 x. T [# m cn eq,#96
4 ^. r7 N7 W. V% ?, Q 搜寻目标等于96 (十进制)
2 U4 e+ {4 }; J$ k0 H
; M) W Z. i2 [( c+ f cn eq7 Q2 m- ?6 {! Y& ~
搜寻目标的数值没有变化
4 p+ [# g) X; y- N3 w, M' t$ @9 `
5 a! U, F9 R1 _' D) e cn ne
/ {+ [' j2 u* Y6 d8 w& K1 C 搜寻目标的数值有变化
, X9 U8 p8 e& r / ?+ {( Q8 h- j7 E0 i9 ?2 Q
cn +
" U3 C3 `1 t0 c; a o 搜寻目标的数值增加. O: C+ \' D/ m8 l/ S
% ?8 m/ Z& \$ T) w- ~. h9 }
cn -
: r; r: ?; s, [9 o+ f 搜寻目标的数值减少
! ^2 i" h% H$ B9 R, e4 i
& ` v# y1 Q1 ]: g5 w" ?- W$ B cn +,3
5 d3 @! u: L" s; e# @ 搜寻目标的数值增加3 (十六进制)
: }; U! K; ~0 f7 ~# q9 R4 F, e6 P# h7 S' y- m( L) |: P
cl9 I; a0 v( Z5 m' X
列出所有搜寻结果
# }; n0 |6 Q% Z) \% q, ^ }6 r' {5 w6 T4 o
cl xxx.txt' L& ?! s5 E5 G- @
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
6 b0 R" J5 ~4 R \) }* t; |9 t+ T
/ J, Y8 a. f/ Z. ^. m内存监视点指令: wp, wplist, wpclear
+ Y+ g- h2 O' }2 e 例子:, [3 F' b: x9 F' y+ t8 m/ n! S/ U* K8 e
wp 1234,1,r
7 O* `9 y) x3 z" L 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ G1 {# O) Q7 d4 L# p5 X7 I, W% r, d4 |7 c# D8 l/ F; J
wp 1234,2,w
/ g2 o1 u3 l$ F' ^" Z 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
7 e4 [+ I3 a" p7 z; Y, _
, G U8 p) C8 f% w wp 1234,6,rw B$ k* N! l8 k; v! A( g+ C
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
* \0 C! |8 P2 s {7 s
E/ a4 X* `; B3 `: ~5 H" q& @ wp 23456,a,w,wpdata == 1
" @& {5 _% ` Q/ ?* g& F* l 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- l& o0 x8 B/ d" h3 }1 A
5 C$ ^ c# ~, x: h
wplist! p) y; p' W) V$ j; p
列出所有监视点
# R8 ~# q9 H; h0 _7 g8 I2 E F( Y/ v B
wpclear 3- l( J j" s$ l; U
删除编号3的监视点4 F W% W: q9 H& X2 N+ i
! L. `( N0 H( c# ^
wpclear0 j2 U4 q- H1 ]* ]' C
删除所有监视点
' D6 x; o7 p5 j8 E* e5 H$ p% L; W7 A( u% q9 C; c* l" k
1 B! S% z d4 O M& n, `" E3 j
. [9 P( v( W; ?4 ?1 m$ t程序断点指令: bp, bplist, bpclear
" ?# b9 u, C2 N3 N7 d9 B1 ]$ e1 I 例子:1 y! _6 H7 i, a* O0 m% d% `+ R
bp 1234) C/ _( \# Z( u' \* r
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断8 o, C! J. C4 h2 J) T
) f$ P* l2 O) Z bp 23456,a0 == 0 && a1 == 0
b7 c4 |. D: ~* } l 在地址23456下断, 且中断条件为a0等于0以及a1等于0, V9 _8 ^2 F: j0 Q4 w
8 `% @8 a4 s2 F/ f# o# D) \+ X bplist0 S# H* z4 X" N; f4 g4 d
列出所有断点
: @; W- n6 i" u5 I$ D
! p! a0 U' Q" i bpclear 3
* h1 ? e( k9 d 删除编号3的断点
* F* j! h$ A0 J
& g: n* M7 p) \2 { bpclear' m) s- e+ Y! r6 j f
删除所有断点
( x/ o0 U" U/ k+ P& ]: C$ b& b7 b1 a" b& C* e1 K% r+ x
# A" ~! G6 m9 I* y6 b
: _, f6 i0 t" @6 W) I; J
跟蹤紀錄指令: trace% `) J- C T' \' t/ t+ ^1 O
例子:+ I. `; B7 C% D& `) R9 N
trace 01.txt
7 j0 d+ a) D# z' D& f1 r 跟踪当前CPU运行的所有代码, 输出至文件01.txt
( X! q2 K, r, x; H+ W4 R# D+ a" W4 g
trace off
; S3 J9 q5 s, ?- ^ 停止跟踪, 并且关闭文件
# w' b$ r2 x; a" c# M
, G( X% j2 B" x% |6 s trace 01.txt,0
# }4 f- C! X) \ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 g1 e1 `5 z# i7 T v2 O# S. F
( a! z2 A% _8 O) V
trace off,0
" n& e' I" x" n- }8 v 停止跟踪编号为0的CPU, 并且关闭文件( R! r. k2 z) M6 \/ Q1 J" K' c
1 v: n4 N' H+ |& I trace 01.txt,0,{tracelog "A=%02X ",a}
: \9 T0 U# j) | 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt - m7 j( l8 I4 s2 B
并且在每一行的前面, 写上"A=a "8 ~5 _, O! f3 | S; J! m3 ~
"A=%02X ",a为一个C语言printf函数常用的输出格式
* J7 n& G" J& l% O3 D6 V0 m 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 }4 t0 E5 C' G% d X表示为大写十六进制数
4 A. q- E9 ^1 L/ X" W% {
% g0 i6 \& y: q5 ]. }* \2 i
; ^: r4 S, ?% A/ K9 E
% R, Y& x+ i4 q# d! P内存直接写入指令: maincpu, k5 O* E/ a2 \7 h, J0 \7 B
格式为 maincpu.[][]@地址=数据
5 x+ c S$ E1 A8 z: N/ N K. p5 } 第一个[]:+ \( G( h) o* V, |' W+ g' }2 {
o 表示ROM地址 M8 f8 [0 T' v. a: C) M/ u) o- |
p 表示RAM地址
% O4 L1 ~( i" H+ y1 |
# H- b% A( G1 f0 ]: Z: ^% o 第二个[]:; D3 a; Y2 I$ j/ I
d 表示4字节
; E4 x3 Q+ P8 D W' v7 x" R0 H- q- @ w 表示2字节
$ Y9 H0 X9 e" S$ K; c( V b 表示1字节
- {" C1 Z/ ]; G; O5 L% L; J" i" `
7 W4 W" Q9 I7 s0 K 例子:1 I4 J# _* M! \; d* y5 w( S
maincpu.ob@1234=FF6 b0 T" E1 {2 k- g6 p2 a" [
在ROM地址1234处, 写入FF一个字节
- O& z( I2 ?; G& z: V- P8 R% u* _* @+ o- S6 g1 ^/ P
maincpu.ow@1234=4E719 O$ S4 i3 h% Y7 Z/ x* M
在ROM地址1234处, 写入4E 71两个字节4 ?/ ~2 c8 p5 f* N
, C% i0 a( x; n6 t
maincpu.od@1234=600A4E71
5 c' W- G3 _$ F 在ROM地址1234处, 写入60 0A 4E 71四个字节
, P- H/ O. g# n. [' N9 a% K$ z& o; q7 w7 q$ R0 T; d L
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 a v1 c# C, k- ~
+ L g# d5 C2 d# p
& z! W, G# P! ?/ L" [其他:' v& K& F h- z& u. S4 V
dasm 输出档案名,地址,长度' f8 {8 z4 Y8 @! c
输出程序的反汇编代码8 G, I4 {5 K( b7 ?6 j) z
例子:
7 e, E- o0 S: t& O \0 ?+ o dasm 01.txt,0,1000005 x X) Q- x& I ?4 ?7 m
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt* H% r3 V* Y9 ]' e& _
* S6 K0 T. O9 J9 y
softreset B- k$ u3 A! q0 ^# S9 m3 R
游戏重启, 但不重新载入ROM) v3 Z1 f+ i1 z( T
- g2 ^7 B. [% p7 g3 S; @4 P# x hardreset
o2 o9 ~, Q+ C- @4 b% W, h( | 游戏重启, 且重新载入ROM, Y9 G. b: T! A+ B7 ]1 J+ h+ m+ K
8 F6 o- {. E# o" ]8 ^2 W* ^
snap xxx.png
/ _8 f( r2 D0 l9 q4 T 截图为xxx.png
1 c! v! m6 s- w) N! b: @5 I' n
2 |8 }% S* I7 b7 S6 n( n0 ]
6 L. i2 a/ Z& t% X/ ~ ! S; d, L( D! y" s! ]+ C
" J% B; O" l# f5 b+ ?4 s热键:3 b5 k3 h! z6 C- t) m# E q3 d& E
~ 中断游戏# e1 W" V) A; ~, h
F5 运行游戏; B" e2 i' C" r) S$ Z8 c& q' D
F12 运行游戏且隐藏调试窗口6 E) f) w2 ^: Z7 X x2 |+ u$ W
F11 步入, 单步执行, 会进入子程序 _: F) R( B1 s# j2 |! q" ]8 F, c
F10 步过, 单步执行, 不会进入子程序" R) P& x; V, b, W8 S2 U8 U5 [% s
Shift+F11 执行到子程序返回
: [8 ^9 g8 A0 b Ctrl+M 内存浏览窗口
+ k4 D* Y, y0 p K& b8 T F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' R0 `6 x6 [ }5 { q) l/ C+ n9 g9 ~9 w; M9 V- B- k5 a$ e/ S( o/ K; \
{:4_94:}
5 |! ^7 K+ `5 ]6 S3 i+ m$ L2 E& F( |# ^3 c: ~1 u* f5 t
|
评分
-
1
查看全部评分
-
|