|
|
& a9 g; D: _& g/ @! P- H. d) P, G
很快速的整理我自己常用的指令- T8 ?9 z; o) c6 y- z/ ]% k
; d% ^; D3 ^( V8 O2 O5 W{:4_112:}
3 m+ w- ^; \1 ]( q1 o' U+ l2 h. o/ R" @+ h( {4 E' B
MAME DEBUG常用指令. m/ K% \2 n# B I P" v% w
, J) Q4 P9 \ |: w
内存搜寻: ci, cn, cl
9 q+ ?4 C0 {7 F' _- G1 U# L* s s) F- D
ci( n1 h0 ~- W) p; P8 K% y6 b
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
; N3 g" G: y) y6 y5 R7 E& }+ D5 B8 g; r3 a3 Y1 w, G
cn% l- N2 U2 ?5 E& O/ p. z8 s6 U9 D# {# P
搜寻指令& A2 B: [* V7 ]
例子:2 {. s: |2 b% b6 K# i/ y
cn eq,60
# ]3 G ~. |" L: B, I! [9 V# x0 {+ h 搜寻目标等于60 (十六进制)5 |' R; Y3 F E' \6 f, c
9 w; l+ V* P( o9 E cn eq,#969 u+ m. D& E1 l) l) o
搜寻目标等于96 (十进制): _" _7 }2 @4 u$ I
( E! C5 p; U K; T% `: W% @ cn eq0 w' g7 s, v! H& w/ E. ^
搜寻目标的数值没有变化
# O1 }8 e0 B( k( w1 s
3 |! K7 ?4 p' ]# O9 Y cn ne [: X: A6 X( d9 u: e) F% d8 w1 U V' s
搜寻目标的数值有变化
# |( f) g& ~3 X8 m$ d; {( [ % n* F9 t5 h8 o6 t- r' R
cn +1 r- U, z2 x% j: ]
搜寻目标的数值增加! d# V- I1 I8 N6 y
! f+ m* X. f6 g( E6 C" o& B
cn -
0 ]; X+ T* k% X5 m7 ] 搜寻目标的数值减少
8 `! N. ~/ B- ?( P; L% Z 5 f5 Q: b3 b3 G
cn +,3
: R9 l8 P5 @2 y3 Z3 L: m) s) y 搜寻目标的数值增加3 (十六进制)9 l, c; ?* Q4 }; O: Z# c8 n
! z& m& f% w, P1 |1 J0 k cl
! x* f) o% n9 K* @7 V 列出所有搜寻结果0 ^, k* b0 ~3 F. e) V' G
5 @0 \* u0 {+ n: J% Q7 O
cl xxx.txt' S. {* c/ B# m6 H( ~, L2 B
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
$ P0 Q* L# v9 M/ V& F* A4 |: i$ s- D8 |
6 k5 ]7 A$ n$ u! k) a3 f内存监视点指令: wp, wplist, wpclear
' B9 }: c. E2 U- f' R# S. n 例子:' P! `/ ?0 W; u1 z% [0 [) ^+ V# Y; Z
wp 1234,1,r; |; Q. @" p3 J1 O, _
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& D+ d4 T1 k! R6 f3 p. ?" T* i
@# {3 x' Q6 W: t/ s$ M wp 1234,2,w
" S u; \ j& C' i 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2& F2 [: z' V9 x# a$ S4 x- ?
, z2 |5 w3 ]7 \3 N5 l- w- M8 _ wp 1234,6,rw
4 [. [: _' p" D. K1 M4 i 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6, E, k9 y" q! }0 u& U2 s2 r
# i2 a& Z n% `& u7 t' P: @2 R; F, h
wp 23456,a,w,wpdata == 1
. m( L. E7 i( Q1 P4 o 在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 r0 H( x5 w2 k; G
! ^; f' [ ~1 @9 L wplist1 T6 l" p+ N8 r3 d; K
列出所有监视点
+ s& H3 v6 \% D7 L ^# `3 X7 r2 v9 {4 D; t8 {
wpclear 3% D0 I% V5 ~5 {& {
删除编号3的监视点
y9 e# x1 u" Y" s; A' g) ?+ B9 r5 r
wpclear
" i/ Z& p7 c+ i! J 删除所有监视点
3 a3 F: L& p9 n, W- G4 T4 Q+ s
2 R0 t. |5 g( ~0 n; ]1 E6 V - {8 f n2 A3 L' M- x7 Q
6 J/ p8 P: E( C7 R" L程序断点指令: bp, bplist, bpclear3 T* E5 o1 `) R2 s( C' s; O# @
例子:
! l/ d+ }6 A% o2 U% Q1 [( S9 | bp 1234. C* b( k' G5 m2 s- s% e
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% I: h7 n6 T2 s' E# }# b
. ]! a0 W2 [. S+ s. W2 h$ e
bp 23456,a0 == 0 && a1 == 0
3 i/ S" a- N+ @) C- P 在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 r" t& }$ G; w" c# u0 j
" ~( ^3 W( M5 Z1 p3 C bplist% {0 u0 F& ^5 B9 C6 j& h
列出所有断点9 x. }* |) p' z0 ]8 v
( |" c1 [/ P6 |0 n- G1 _' I2 r
bpclear 3
4 y. j9 R* @$ u+ A, K0 b6 y 删除编号3的断点- v3 l, @* Q; |. ^
; q/ j6 a# i$ Y: r bpclear
: o4 }1 N2 k9 v" e0 ~0 p/ k4 h" h 删除所有断点3 C" h5 B* z: H) X
4 Z' c4 L' C [* L! f% f' K/ u
; s5 G6 V3 j; Z* D. y+ H
. P) S8 k* m, i7 e8 ~ q跟蹤紀錄指令: trace
1 l" R" h6 n) _# K. ~# I2 n) W 例子:+ t1 @- \3 d6 ]- _: H) F% j
trace 01.txt3 e1 R2 R6 b+ H" I
跟踪当前CPU运行的所有代码, 输出至文件01.txt
" I8 S5 k7 `5 Y2 P7 O2 R+ x. D2 t0 [! W
trace off% Y2 C7 o/ x, m' @7 Z
停止跟踪, 并且关闭文件
& a" r3 j& I* P* G1 [5 n5 v# D. E
trace 01.txt,0/ }8 r- X5 U+ B5 B
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 Y3 S8 V3 t& R1 z# D
! w) {4 Y, \1 Z: @7 v trace off,0 m+ l6 o: I% C( I! |& h- e, a
停止跟踪编号为0的CPU, 并且关闭文件" i, e7 h& _ Y% G2 x
4 C' Q7 X: u! I. u Z
trace 01.txt,0,{tracelog "A=%02X ",a}
, ^2 y# h+ N- @ D3 k2 y" S9 }/ C 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# Y3 W! z. a' T5 W x! V5 P& ]1 I; h 并且在每一行的前面, 写上"A=a "
/ I" e5 L) ~- B+ E R* z "A=%02X ",a为一个C语言printf函数常用的输出格式
8 Q+ k7 l; z r! ?6 b+ u7 a- \: h 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( K/ o- p) K# \4 q" K; N X表示为大写十六进制数) M& S: {$ D8 z5 F& e
- d# D* q" r! Z- y: V$ h$ e# t1 ]* W. ]- M& G
, a5 s! M' [# G& n内存直接写入指令: maincpu) l0 I7 y# S* Q( s' f' e
格式为 maincpu.[][]@地址=数据
# B t# f* c) K3 Q 第一个[]:
7 ~6 l. l8 N. g, D5 G o 表示ROM地址
. E8 R6 U( u% x* ]0 A" @& i p 表示RAM地址
9 ~* Z& X0 [3 h. D d
4 P% g2 \* h" e- G0 q: }% b 第二个[]:9 l4 a: r$ D m3 k3 g
d 表示4字节
7 u# b# o, c6 I7 Q2 v w 表示2字节
% Z5 n1 z$ w% q) c9 R, n b 表示1字节
, z' _+ F3 i2 }7 S, D; @( n. R. j; c3 w! D" B
例子:
0 L: [/ h/ N3 b9 n maincpu.ob@1234=FF, I8 a. v7 [6 l
在ROM地址1234处, 写入FF一个字节) r7 ] G+ q# c4 f5 l0 A
3 C+ Q& x7 @: `' [
maincpu.ow@1234=4E71
3 m4 X; i& W* E' e- B. D c 在ROM地址1234处, 写入4E 71两个字节
6 [% l, h4 |' T4 P* _0 L9 l# h4 b: V/ [7 ?4 Z% v
maincpu.od@1234=600A4E71* y' a; ^6 ^% }: N! P
在ROM地址1234处, 写入60 0A 4E 71四个字节# D& c; Z4 m1 I
+ J6 E/ A9 o- U( a- T 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# {! P) u: Y+ [$ `' H3 V2 J& t
, X1 i; a. _ E. I' M. O% p2 T# S# T# K4 j
其他:
7 A$ H5 L { m9 ]$ K# G dasm 输出档案名,地址,长度9 }6 {) Q$ f2 E4 O9 L
输出程序的反汇编代码
7 o- z# s4 o2 }1 t9 b7 m1 b0 L 例子:
; ~! E2 O T" C" l/ P/ U$ G dasm 01.txt,0,100000
# \6 U. k1 {4 C0 m& [4 U6 f; G! f* y 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt: h/ M+ L! V- R' u: j# i' c1 t8 r0 F0 [
$ ?7 L+ z3 x: v softreset" ~/ {: b/ q; N
游戏重启, 但不重新载入ROM
$ |1 J- R- S; z, {
3 j$ M9 C0 W. S hardreset5 Z: s% |9 ~; L Q- _) t
游戏重启, 且重新载入ROM4 T4 z# F- V# w: F: n9 c, Y
8 l/ G9 G1 y: o* `
snap xxx.png' E+ J* d2 l" b) R2 p3 s/ V) \
截图为xxx.png8 F- d% s K& B" ~$ g5 _
/ w& t5 ]% Z( D3 m! J2 W2 o2 `; M, H
( Q- S: ~- ]$ G7 R4 i3 G+ T
0 H# k0 c' j. i& ]
% [! P! x! L# G' E热键:2 U! B5 X( H4 L5 T; e% x% S1 W
~ 中断游戏
7 U$ E. f J3 v9 Y/ o F5 运行游戏
K% N, u/ x( h9 S' w2 A F12 运行游戏且隐藏调试窗口$ O! H- S# m# D- p3 n, W% w
F11 步入, 单步执行, 会进入子程序
0 s9 I) R" I9 f5 w6 M; H/ X" y D) U F10 步过, 单步执行, 不会进入子程序
* t: b, b& X+ K+ r# U" O8 b0 O Shift+F11 执行到子程序返回
4 O n6 C! V! K: G' e/ }7 P& C Ctrl+M 内存浏览窗口
1 }3 T2 m7 l1 i: s. M F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 R! A( M- N- e# a: E9 M. Y) V5 W& E
{:4_94:}
& P8 Z& d% O1 r6 p" ?* Q
# C5 K) [- j j* Z: M$ ~" M" C* M9 J/ e |
评分
-
1
查看全部评分
-
|