|
4 {" t0 ^# D7 E9 T: D9 G
很快速的整理我自己常用的指令
. {& Z p# Z2 X3 Y$ v: ~- g% o0 W
- Y3 U. X7 f* `' u# |. B4 r) V5 N- P{:4_112:}
0 m; j2 u' T7 G- j% e6 B& R' Y* l: o9 [' @& G8 d
MAME DEBUG常用指令
$ `4 K& Q: i- I7 b; J+ S Z7 N$ V4 u
+ ]# ^% s$ D7 s" e. k( Y( T$ y内存搜寻: ci, cn, cl5 I- ^1 `! L+ x
* h" V, l! v- B7 o6 j+ P ci
* S" T0 M5 W% x) d3 g8 [, Q, V2 B& V 搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 }. d' k/ t+ ~1 v- b" B- e9 V
; C2 h7 V& J/ r) e8 y cn
1 J; f: n/ ]" q$ `0 K 搜寻指令0 N- P# `- {' R* u! I$ }
例子:$ b( o4 @6 v5 R6 I. g9 p6 w: p3 M
cn eq,60* r: `( r3 U4 B4 U& f$ H' W
搜寻目标等于60 (十六进制)
! T+ Y- K2 d2 c- e _
1 F( P2 U. K6 R) J9 k- O cn eq,#96& w2 y0 M6 [6 {2 n, `2 I
搜寻目标等于96 (十进制)( Z/ P! N- [' Q1 Y/ ]4 p
5 r J7 Z9 q4 Y cn eq. b. F# C/ ? d0 A. k1 w
搜寻目标的数值没有变化
! I' W7 c1 f) d$ U1 \+ M2 p8 w$ }: K1 x/ ^2 A$ f
cn ne4 y; Y5 k* R$ \, T2 D
搜寻目标的数值有变化- ?1 i: e/ p# {# t
( X. F" v! j: C% }: k5 g& d5 V cn +
; Z! b2 C- a6 E, `7 ]& \ 搜寻目标的数值增加
) V B, ^5 R3 n( u0 i- r
# ^5 O5 k; j- G" t. }7 [ cn -1 Z _( Z) f; [9 v) j
搜寻目标的数值减少, T T( R- a- \' n7 }$ P
! L( E4 [0 u+ V3 d& R* P cn +,3
- V5 Q% t5 M' Y- f; x) k 搜寻目标的数值增加3 (十六进制)
( N. }! e& Q; n K7 H- z' ]1 [. G+ @, y$ S4 Q- {
cl
& u+ Y6 m" T. G. I 列出所有搜寻结果" W% M4 B) p# x0 v: ^8 e
- ^: b" y. i% ~6 `4 k8 y/ P1 z/ w
cl xxx.txt1 c# I' M9 p, N" g
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: P3 X& T! Y, `. g5 n9 L6 t% [6 i; C+ r {3 z. F5 s
, g* k" k+ U2 W7 @9 Y4 P内存监视点指令: wp, wplist, wpclear8 R; Y: V% w9 ~+ K2 K" v- b
例子:+ t$ }" T+ H3 o- E
wp 1234,1,r
+ A- o- {6 R2 c- k& m. f 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
, X) A D" w% H1 e- Z% ?/ T @) B0 y6 G4 L# r( X
wp 1234,2,w
- J: N) ~% v( [% |* y* M 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ q9 }: K! n$ o1 D
! r" B. F6 Y. R! m& g) ~5 C) j
wp 1234,6,rw
! x% a! t% g, v: {. j6 F 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* | T) k* j& s9 e. l. P
, m3 ^. O% W) Y1 f, a, x& p wp 23456,a,w,wpdata == 1) m$ q4 W& ^! r
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 y- L# o$ H3 @5 p& z# c) j/ }& D/ v3 `/ R g
wplist
) W& x) ^. w1 O8 V7 v: Y/ E: v' Q 列出所有监视点
/ \. B, b! U6 D0 `/ @6 C2 C5 Q( m$ T) [$ |/ p2 e: b. N
wpclear 31 J4 B8 U! {& l1 r
删除编号3的监视点. d% `. I# D' h$ ^2 F; b
- y! Z [8 h! [. ~$ Y
wpclear4 G8 x% {9 @$ d& V
删除所有监视点3 _1 C) Y) X( V/ _7 g
, R- F: \2 X! e7 ]! @$ F
. k5 Q6 ^9 @! n
( L, D; A% }- `( y" m8 m9 `程序断点指令: bp, bplist, bpclear
- _+ s" U+ h( l1 `0 v# r 例子:
9 K6 ?4 f: y1 s( W: h9 _! p& e bp 1234( L4 [: `& A' t9 _3 ^
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& v$ _+ @8 d. S* }' { C
: l: _) @7 x; |% D bp 23456,a0 == 0 && a1 == 0
6 K; Q* d. i0 s) e6 N: `& G: J 在地址23456下断, 且中断条件为a0等于0以及a1等于0& _* v* [0 [. ~- g6 J! p6 h7 I
2 m( l5 g) G: J9 s; h+ f0 G# j* c3 |
bplist
/ M+ k7 i9 t7 m7 h5 X+ v, Q2 \7 x! P, w 列出所有断点
9 r8 }& o! J' W3 N. N
- D* m d) Y5 E8 ^& e bpclear 3
7 O2 e9 c' }: O 删除编号3的断点7 p4 f1 `( F9 r; v
8 S+ B/ [9 Y+ `
bpclear
5 {/ x( z! C4 S8 L 删除所有断点
8 ~6 _) J: F. D P& K# V" Z" `% A# Q3 j# r- O
3 K2 A0 T8 Z9 K. Q
) I' ?: i7 t, g& E7 U' u1 U
跟蹤紀錄指令: trace
/ p( ?! _1 I$ v5 ]4 N8 X- O( Z 例子:
9 V) _* c* u9 q3 w- K \0 k, P" N trace 01.txt2 I4 q* ^( i* w
跟踪当前CPU运行的所有代码, 输出至文件01.txt- t! v2 J+ A; `& e4 N/ ^$ p; J& p h, X
( C5 y6 l: U* M' l trace off
! |; Q( F Y# h1 H/ N 停止跟踪, 并且关闭文件
, |) h: T# A8 r3 e8 g8 g8 i2 ^: t' b# ?6 g- E) G
trace 01.txt,0
* F' h/ n9 I- i/ {! z9 k+ n I 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% L* E( [7 G8 g0 h S- R4 [) x$ Z% I& c$ X! z J$ G
trace off,0
1 X# w6 V6 Y8 J 停止跟踪编号为0的CPU, 并且关闭文件
4 J) e- k$ Z' E8 W6 a0 |& _2 m* l! ?8 m# u6 q# Q1 p
trace 01.txt,0,{tracelog "A=%02X ",a}
$ P! q* Y5 z _+ e" Y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 ]9 u) W2 G, {! Z$ ?5 |
并且在每一行的前面, 写上"A=a "! w$ S2 m$ J& p/ j3 y) J
"A=%02X ",a为一个C语言printf函数常用的输出格式9 P1 x7 {; S0 L: N! Q4 s' g) H" g
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 d! {; m) s0 I4 Y/ B% {
X表示为大写十六进制数
8 k. g$ G6 v |/ {; E8 [ I6 d9 X: R8 e# {4 E+ I k1 D
9 S* h% X1 n" K# u% p4 b
5 h1 i- I' w3 L% o+ c8 k) a2 E内存直接写入指令: maincpu
9 t) \: \, Q0 u) P- u. U 格式为 maincpu.[][]@地址=数据
1 A9 W( t# Q3 }; G 第一个[]:& f- r9 s* v1 T7 i! B
o 表示ROM地址) S! M7 w2 U" B A5 |! u, u* c8 j9 ~/ p
p 表示RAM地址" o8 q' |' `& C' l
8 p9 S; C' J6 ?7 v. O8 \ 第二个[]:: ]' q4 ?3 j" n5 U! Q0 x
d 表示4字节# U, u( }. P& J8 m# V3 G+ z) a' W
w 表示2字节0 T: F/ o0 W- q' T# Z5 C, r$ K
b 表示1字节
0 r0 L3 R( Y* K+ l* p+ r0 B3 \+ {+ q) B* }
例子:, w i' a7 g! Y
maincpu.ob@1234=FF
7 R: [& e: J, u& V; E 在ROM地址1234处, 写入FF一个字节' g- _0 T6 w1 E* m
" o% N1 u, f! u: F* Y# z* ]
maincpu.ow@1234=4E71- v3 m0 `8 B" e6 ^
在ROM地址1234处, 写入4E 71两个字节" x2 ]+ `. o* [: t
. z& D4 A! I4 U- ]* r maincpu.od@1234=600A4E71 }" l$ ~, e# f y/ P0 |5 X
在ROM地址1234处, 写入60 0A 4E 71四个字节2 P" R( E. M* U
5 n* I$ N6 w9 {/ \, m( c& F% Q7 l 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' o) }3 \$ s$ y7 l$ b7 X" } 5 |2 f" f7 W& L" D' }! D
2 h# [/ N7 R' f& @$ z. G其他:" U7 q4 o' r. r; b4 y1 ]
dasm 输出档案名,地址,长度
6 }8 V6 }; y, w 输出程序的反汇编代码3 h" ~ n' ?6 |9 ?2 d' o
例子:
5 C7 V7 p8 I5 r) U dasm 01.txt,0,100000% x) Y- F$ i8 @% b% f; A) T
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ I, P6 A. v6 T4 Z A6 R
% n1 r1 H# {+ S" @' t: S1 o. O* x softreset8 K3 D7 G; R- ]( d7 S( W S
游戏重启, 但不重新载入ROM
' l/ z4 u9 e$ @- q! M5 I! \5 E) K' w% o. Z- r& f% w
hardreset% a7 x* \2 I% a+ R+ D
游戏重启, 且重新载入ROM
) f7 c7 D9 l1 @" K( g; l
& \7 \+ G+ |' ]# V9 \ snap xxx.png9 M1 o, C& s% }" o! U& l1 f
截图为xxx.png
$ {; f9 X7 D6 _9 l; O; A3 n
$ h5 k# r M* q* j1 T; u2 @ X5 c
, G% z* R. l9 `% L$ v
4 Z+ P1 R# y0 b" ?' ?& e 6 d( t. n% y. _' @. M6 F, W" h
热键:
r6 d) w# b; K0 Z% @5 S* I ~ 中断游戏
% J: s/ _: z: m$ T! ~7 d4 m; d F5 运行游戏
6 ^ k4 K+ x- i# J F12 运行游戏且隐藏调试窗口
3 s2 I p* k; @% I7 W# o9 l3 L; e F11 步入, 单步执行, 会进入子程序( y" n& m( W3 `7 s, K2 O4 ]/ \
F10 步过, 单步执行, 不会进入子程序2 L8 J4 f4 q, c+ \
Shift+F11 执行到子程序返回
$ _/ R/ z- w: l3 r" t1 c' { Ctrl+M 内存浏览窗口' }7 t9 [& A) S" ?2 [& s
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU. ~+ Y' j2 p2 a6 z2 j7 D% P* G
/ N* n: Z, `9 W4 o$ C( I{:4_94:}
1 y) a$ d2 j) ]7 ~6 j: f- D1 V7 p2 n$ C2 M# w3 ?
|
评分
-
1
查看全部评分
-
|