|
|
2 E8 R/ d a/ J/ y, ~( F
很快速的整理我自己常用的指令. X9 Q9 b( G6 |" C% e) d5 ^
/ t/ d: r2 |5 j/ A, W{:4_112:} ! A& o( Y) X( ~# R; \
* R. H* x/ w- ~' @) _ y- dMAME DEBUG常用指令
5 v9 @( h/ W, A- F0 V) e4 W/ y
! U! |7 m, m9 S7 l* z7 t! | M" f6 b8 C内存搜寻: ci, cn, cl f: M2 F6 G# f4 N% q
, @3 p8 r1 ?% i) {" Y
ci# m; d/ i: `7 `+ x( F" U
搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 Z& P. h6 }9 u* V9 i' }6 |. G- V
& f! R; P' t I1 X7 o
cn; p6 }- o( d0 p" j
搜寻指令9 d" @/ x/ Z* ]! ~3 k' _
例子:: }( L; g9 d7 A8 ~8 ~
cn eq,60
8 l% P7 n* H% c) j- F" J O 搜寻目标等于60 (十六进制)
: v1 v! u: p9 I3 }& q6 C* d ' b9 W* ]: T% Y
cn eq,#96; ^' m. {8 m0 E# P O# Y6 _% g* Q
搜寻目标等于96 (十进制)+ h' u* P$ o3 o+ v, C( S1 y
j; K. y7 A; M cn eq
4 }+ _/ @, A" i) j3 | 搜寻目标的数值没有变化0 g* Q I5 S) x3 `. b7 O: B, ]
' ^. ?: P2 ], o
cn ne
; [% x% C- I& B( | 搜寻目标的数值有变化
% ~& i! M' z2 A5 y
; l+ o8 [* C! M cn +/ {2 y" F, v7 _. F5 @. l" x
搜寻目标的数值增加
! T+ V9 f6 N. h1 W
! f1 C ^+ d6 v! I k: A/ |, X6 U2 @ cn -- C+ l4 |" i% p4 d' r% D
搜寻目标的数值减少3 K P; j3 A% I* F& |. {
; J) Q n+ J0 z" O* W% u; r4 u cn +,3
; w8 c- ?+ a, i' K! r' v 搜寻目标的数值增加3 (十六进制)
& _2 l% o0 u+ p6 l1 i5 ?! B6 \5 v' l7 P- v
cl( q0 x0 A# {1 R+ B, ^
列出所有搜寻结果* o4 Z: w' j0 j F, ?
5 q/ v. n% l( i* d: w- p cl xxx.txt
- B$ q! z4 M8 u! S* H 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式: V$ L. h; j" @4 i1 {
1 Z( y4 m0 e, d9 D& C! { " @! ~5 k+ X) b
内存监视点指令: wp, wplist, wpclear8 \3 ]9 A; Q- ~& Q
例子:
, V1 K- _2 N d. g wp 1234,1,r$ ]+ C& x2 D7 c7 ?9 d
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; d3 b! C) S- `( W# A
7 h7 r7 W1 j0 F) |* J# D, g" D. ^
wp 1234,2,w/ Z2 u9 q0 j$ L& C* r# d+ j
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2) e( g( w, d7 F+ n2 P2 f* [
( L7 W1 `8 {5 [& s6 } wp 1234,6,rw8 D m) V/ X* O
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- D* R& r6 i0 X) O
1 [/ w0 B3 {% i wp 23456,a,w,wpdata == 1
Q& G9 a& E* S! \+ {- f* I 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
' q& A/ ~7 C* L8 X
8 g) {6 c1 X0 u# D4 z2 ]( _ wplist
' M% F( ?- Z+ @, J 列出所有监视点! r0 W1 Q! a& f1 W( L; [
/ z/ C6 R: J. Q wpclear 3( E# Y; c9 E% [$ K3 X8 I. h4 c
删除编号3的监视点5 Q; Q) k* {8 p8 z" w) c# z" a
! W! O& O9 K6 e2 M' A wpclear4 E9 t6 T& J3 a& G) J% J, y
删除所有监视点
1 j! n) f3 A% T5 l1 c1 a4 z0 h. c3 i8 u* z! n1 m
; Y8 g; S. K' {
l; k d. v% @, h程序断点指令: bp, bplist, bpclear$ }7 T; G: K# b$ d- N% M9 P+ U
例子:+ E/ B" D% o& Y( c( A. D; P
bp 1234
; C# s. H# L5 i* L2 z2 r) v" d 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
r) d% X- _( c% w; t1 R- z) A! J; g
bp 23456,a0 == 0 && a1 == 0
8 h3 l) s& _ Q6 k6 Z y 在地址23456下断, 且中断条件为a0等于0以及a1等于0
* W. ^% z+ a7 y; S& U9 a' u6 J1 w" J$ i; J' J# h( n
bplist& y+ f& E- J' K
列出所有断点
4 ~9 y7 t# G8 Z- f8 \( x- }7 K
" j! Z' D, F3 F2 O) c+ l0 b9 B9 O! t bpclear 3
8 J0 R8 @% p8 C: u 删除编号3的断点
0 b. v" V% c. F5 ~# F* K6 N" i$ I/ ~; H
bpclear
2 F) H1 l7 y2 }* D& T% | 删除所有断点% \; G) v* u3 C* v3 S
" [8 e2 P8 D: |' F2 u# o6 q- X
. c, d! ?- j+ `4 n( U+ G: T
: L4 @/ _5 h) b$ @跟蹤紀錄指令: trace
/ ~. s$ O/ U( L" \ 例子:
- g& r) \( x+ X r1 ^% Q$ U$ ~ trace 01.txt
# t5 F, O5 T) k* M 跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 d) z" e6 W! ]- v; G9 V
/ W0 x f% n% m6 w) {5 p1 n$ F trace off! N+ g. W3 i3 Z. [% J
停止跟踪, 并且关闭文件3 U2 _, T, U! Z- s2 }
3 f$ E; N. Y- w( m. n2 k# W trace 01.txt,0' G6 o9 I: A! O- s" o# k/ z
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, @( Z. U/ p8 W& ?9 h" t) {( Y- x; a+ j" R& e7 U
trace off,0% V( I; y+ g6 ]5 V+ X+ O
停止跟踪编号为0的CPU, 并且关闭文件: ~! I5 A& G+ y8 ~
9 h( b0 v8 `: U0 [ trace 01.txt,0,{tracelog "A=%02X ",a}& P+ U Z! M3 @# c2 d s
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 [6 g7 D. k4 w) j; `0 t# x; B
并且在每一行的前面, 写上"A=a "4 V+ R. N" e1 R5 |$ ~
"A=%02X ",a为一个C语言printf函数常用的输出格式
/ d6 d! [( q; m/ |7 ~3 B 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ M. y6 t5 [) p! b# f
X表示为大写十六进制数) d) Q; z- _& c9 U- L" H. d; F3 f9 ]' Y
5 [) J! @- K5 _3 {8 Y
5 c$ G3 M* s/ `
/ h0 g# L, n8 h6 ?
内存直接写入指令: maincpu- A. L( E6 \# t5 v0 E5 h D
格式为 maincpu.[][]@地址=数据
# Z+ e/ c' J& `/ Q 第一个[]:2 \- ]8 _# }5 U& k$ [
o 表示ROM地址
, m6 M( h; v' w e3 A p 表示RAM地址' h: N2 G) h2 k8 J( Z* w
, z+ V7 z- o( t% O
第二个[]:: N- o' c7 s. Q# t- [6 B' O# i% x# }# d
d 表示4字节
+ s1 g3 `8 D# g) u w 表示2字节1 Q7 v w8 b. ?3 X1 H" r
b 表示1字节* ~0 k- T5 x( F# @& Q9 B
( |( ]" J; U, a% X$ B 例子:
. I7 E; J* ? k maincpu.ob@1234=FF" D+ X+ p2 i* m, T6 W5 ^9 Y
在ROM地址1234处, 写入FF一个字节
) z. p) n0 F7 C3 k7 R$ V
1 x2 t# p. x3 ~ maincpu.ow@1234=4E71
( ?" s5 g( M2 M, j+ p8 f 在ROM地址1234处, 写入4E 71两个字节
" n! R9 {% b: b& b, S
& i0 \2 \* U# P- I maincpu.od@1234=600A4E71" `2 J% t2 Y7 J$ z' F
在ROM地址1234处, 写入60 0A 4E 71四个字节
+ u/ s' b+ z: x, A! a2 n8 K5 I; h5 y$ a2 z# w
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写" W2 i) ]4 ~" S
3 G/ Z# `9 F6 u( R% L8 {
; n) ^( J- B1 D2 }: q* U8 p
其他:6 r; U6 j% U8 e; A& p
dasm 输出档案名,地址,长度0 [/ |0 _4 C% n
输出程序的反汇编代码
8 S3 n. {, B7 h1 d6 T W _ 例子:
, `7 F' q/ }5 L* G. O dasm 01.txt,0,100000
. h* j7 W# n3 q1 \* M9 r1 h1 l 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
1 L2 |: z1 L5 D8 `; e6 q2 |" I& J: e
softreset
4 S5 n2 @! [5 i+ ]/ X% i1 y 游戏重启, 但不重新载入ROM
# [. h+ P) i; z$ H1 g" Q
; ?; ], C8 b7 V4 s( V& [8 @ hardreset+ m Y8 X t- q" [2 K* K6 c
游戏重启, 且重新载入ROM5 x0 o# H0 `2 T6 o* O5 M: {
9 d! u+ l9 k- c9 C6 b
snap xxx.png
. l6 \+ g6 ~5 X. |! w9 q 截图为xxx.png* X1 |7 K- r: C
: U+ X7 ~0 ?! Y7 C
/ e5 r6 ~! M# B
" r* W7 |& ?" N9 z1 W & T1 D! h) j( A3 Y6 i
热键:$ B+ u- ?4 H1 ~# n& b O
~ 中断游戏
3 a( o2 l7 b8 `6 W0 Z F5 运行游戏
) A. ]( v ~+ v) C F12 运行游戏且隐藏调试窗口
/ A6 Q, F4 e) v% K0 g F11 步入, 单步执行, 会进入子程序: ~9 p: e4 z P# q
F10 步过, 单步执行, 不会进入子程序
) c3 f& f6 Q3 Y$ E' Y5 Z! G Shift+F11 执行到子程序返回
) o1 r( F; ?6 _$ V* ?, a Ctrl+M 内存浏览窗口; S p0 X* f" [; b- a
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 h# |+ j; I# d# u* X* j
% W- F1 a9 C- ^% l# B{:4_94:} 7 n$ D& f3 X! Z# h0 h
4 ? t/ @. m! F; x |
评分
-
1
查看全部评分
-
|