|
|
8 J- Q# ]+ X, l" r% j9 z+ d* \, x5 W很快速的整理我自己常用的指令
2 u! Y* s0 Y+ n5 L
9 Q) ~- V( k) L7 l0 }7 f! V{:4_112:}
; p( p/ f4 Y# d/ Z# f* ~0 y6 y
# r4 ^0 r) | H2 M$ O; mMAME DEBUG常用指令
5 w. B9 Y. G1 f' U+ v" y* J: L& W& U4 f4 _
内存搜寻: ci, cn, cl
8 S$ a( [6 a# X; |; X+ d) U5 n4 T4 ^4 S% v$ r. i$ z
ci
s' e; I6 B0 C! d 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
1 [+ i# @$ }% g8 d5 t" u1 P h; K/ Z& s
cn
b- ?; A( I6 B) P# ~ 搜寻指令; z2 m3 @# M7 _$ V& C
例子:
' l9 [& ]# _* v) |+ [# S cn eq,60
( E2 S) P b2 q 搜寻目标等于60 (十六进制)
3 I8 ~4 D7 J7 s8 _) R3 k, }8 S1 P$ j( G % L& J' b; {2 g
cn eq,#96
+ { o# f/ D0 w- |8 c) F7 A( |4 | 搜寻目标等于96 (十进制)# a) x; B8 I9 x2 _) K
* ?/ N4 w5 N7 r& `" R$ Z" `
cn eq
# Y2 O* W% n! L# Z; t, [' ] 搜寻目标的数值没有变化
4 v8 I0 n3 y* q9 o* j( F P) W z
" f; c! O+ f, _ cn ne0 e- \8 h4 l& C
搜寻目标的数值有变化
" \, n& R2 K* v* p8 l# k
' S) _9 L7 G4 t$ ~' Q Q+ F% h# l cn +
# M! ?5 l; n2 G& M Y8 N; C 搜寻目标的数值增加8 E( |8 u3 N7 B+ [3 H' v% |3 v; P
. z. H' o3 P3 v1 }4 Z
cn -
. B- J3 n, N5 _) E6 I 搜寻目标的数值减少
& {' `8 Q6 l! e, O7 ~8 H7 P 7 G# [: Q3 S) {4 N4 T
cn +,3$ P2 Z- e x, w r$ T. r; g
搜寻目标的数值增加3 (十六进制)
$ [! x/ d9 ~% i- W# P# T# h+ z5 W$ e* P% o- F9 N7 C
cl B. G5 ]) B& I7 f
列出所有搜寻结果" c" |6 \5 L- G
c4 p; H: d9 I( I cl xxx.txt
( m0 J2 V' [3 c1 Z! j" @) x 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式4 o: `4 c5 _3 P% a1 e" X2 b
. J% }) B# L1 m& h( P6 O
- ^* Z @0 h1 I- Z. D. i
内存监视点指令: wp, wplist, wpclear `* V( @8 {9 ], E3 w
例子:3 j: A. S# L# k6 Z" W- L, A
wp 1234,1,r
, O+ x! f7 N+ P 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1 i0 m# Q' f# ~* h! @
- j; Q+ l& @; Q! U, _5 U wp 1234,2,w
3 f9 v/ u0 d# _/ ~: A 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' _5 {1 t2 j+ ]% U2 J, m& c5 {2 a3 C
% C7 L7 M/ [" U" h4 d) K2 N3 I wp 1234,6,rw
/ W: T0 N D) \, [( [9 w4 x2 G 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 l! L- w$ H( F' _9 m: R
% s4 n1 U1 @) z* S2 A# m- U) f& X wp 23456,a,w,wpdata == 1. y0 N2 h6 r) o. B* T
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' g7 n' ~7 x* z8 ?2 v7 U& A8 {
8 Z# N& Y9 F2 o5 J* S
wplist1 i$ {- z8 x) a1 l. W0 L. {- q L7 @( }
列出所有监视点
& Q% ?- }; ?$ H* g5 u2 B- X) X; n! I& x9 R* ]3 F
wpclear 3
4 V: J. K: e# ^4 T. \( @ 删除编号3的监视点 x V( U! h0 z5 X5 G& d9 h" r1 ^
) U! x; P0 w! A1 b
wpclear* @; r0 J2 X8 [8 g T1 F
删除所有监视点
% S- Y M4 x6 @# I- @% v/ F$ [
$ B3 X: c% w. U5 C: }3 o 1 g1 |# f' h3 ~: p U k. t
% \& e& n! `' {* x2 V
程序断点指令: bp, bplist, bpclear. N/ c6 ? x6 Y4 i F" ~3 @ H
例子:0 M4 s2 t& o. z) G
bp 1234
+ K' x2 P- d8 c+ Q2 Z( h% D. c/ c 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) |2 J- X4 D% i, x
/ l7 n# a) |5 g bp 23456,a0 == 0 && a1 == 0( a7 e5 E3 K! U7 W$ B! A' q8 S
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; B7 B" W, ]3 V/ _
+ t4 _# y( A9 v bplist5 d# B' U; }4 S7 f2 H
列出所有断点- W% J) ]8 C3 P7 x
0 k3 V* a- C) m9 S bpclear 3
: P! Z( D8 |* K3 u# E 删除编号3的断点
) }* C. T: V; _# O& f" B8 y. A' w) T4 S7 h6 U- k# u# a
bpclear0 W2 Z/ P; J I- @+ a
删除所有断点2 ^$ b8 U/ B4 ?$ W- @4 r
7 i- b5 Z, F& R+ k& @4 r3 h- s
. M0 {( X5 a/ l# s* t1 S) F
- Y4 h+ \) M8 ~# j. R跟蹤紀錄指令: trace
/ V. b: T2 P, A0 B0 I# k; P 例子:: P, O7 y7 t& y$ D9 A5 ]. t% o' a
trace 01.txt! M9 C# _% G0 [. d6 |; t
跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 K+ m! D* U' K, ?' \4 p6 G, g0 O$ e1 I+ u7 h8 b! d5 |' _
trace off
/ f( K3 w) ?/ n4 u9 @4 T0 j# N 停止跟踪, 并且关闭文件
) r% a0 v$ ?* i0 T
4 G+ z) W% |2 i. p trace 01.txt,0
8 H( E8 Z, w3 {: |0 j# T 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* K# _8 p4 k' Q4 V% O
3 ^9 g8 t0 {! h' y) p% U: _ trace off,04 p3 C& i$ Z- W4 i, v4 ^, h9 Z: z
停止跟踪编号为0的CPU, 并且关闭文件
8 |. p' T. _$ U# Q& d6 s/ L4 B/ M: s5 P$ G
trace 01.txt,0,{tracelog "A=%02X ",a}
; Q0 p9 j( n; T7 n. H 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# w' e6 A+ |; a2 O5 O2 V. c; T5 J 并且在每一行的前面, 写上"A=a "
) ?# R4 j4 A; a) Y5 X5 i4 m/ q "A=%02X ",a为一个C语言printf函数常用的输出格式 u0 A, I& N. S# a
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 A5 ^1 b6 `. o/ y1 H5 x
X表示为大写十六进制数0 l; y# m( Q& p) s
8 M5 m% c: n/ e
, g$ U# d) M& M/ _. b
3 D5 F1 e& J" Q5 K: J内存直接写入指令: maincpu, J* ~) j- F, v% Q" V. L
格式为 maincpu.[][]@地址=数据
; j5 g) c, P( j4 d; I6 p% q 第一个[]:
2 ]# {6 d* M! T0 ^6 Z; P o 表示ROM地址6 j& I. F2 v3 f7 m# B) W; h) c
p 表示RAM地址* z( V, [5 N; s
) X6 l! q( A& `( M4 b% P3 U* @ 第二个[]:$ D3 f1 @# c a; O8 Z
d 表示4字节
7 k1 o; @' Z ^7 M2 Q5 c w 表示2字节 A7 Y0 p. B( K3 G j
b 表示1字节+ T& J a( V1 U6 N
: e+ n6 Q: d; i* v, [* M' D7 w6 l 例子:: `4 W1 m: { F& g' m
maincpu.ob@1234=FF5 z9 i: f/ D& B+ s; s$ A/ t, p
在ROM地址1234处, 写入FF一个字节
7 _ l: u& U3 a4 s! y" |- C o$ w. p* z2 w9 f$ H" B6 L
maincpu.ow@1234=4E71
2 H7 f) U# ]( ~+ }9 \* g- w% k 在ROM地址1234处, 写入4E 71两个字节( D7 x z/ l( ?3 A
/ Q7 c. C& m* d
maincpu.od@1234=600A4E71& k2 r3 ?9 p2 X6 `" M
在ROM地址1234处, 写入60 0A 4E 71四个字节
+ q, ]+ |9 G/ u g v4 c+ f6 s# \1 E! ~/ s, C o' Q8 o/ D# y
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& P+ e' k5 d1 ~! M; D) C
6 A6 ~9 y; o+ j& b
! Y \9 V9 t# O其他:
0 _7 k9 P2 f G dasm 输出档案名,地址,长度' A, c% V8 J. g4 R4 v8 t$ L) f
输出程序的反汇编代码+ h. F' v& V( v h. ~" O
例子:
) C$ Q: x+ z. D0 } g/ x% {6 P dasm 01.txt,0,100000
& E& L, Q. v" V' X( J 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% D8 n2 x. i: \/ g% F1 u7 u0 r
; f% @/ {/ W$ |2 D, A" \
softreset
! ~; q( B. Q2 X! t+ u% c' B3 \ 游戏重启, 但不重新载入ROM
. Z0 S9 U. x3 k* B( g* j0 K) {- j0 q$ Q! i& ?: i1 I) c e H% I) }$ P
hardreset
2 u3 \) n8 Q6 v% C* G) x) r2 S. O 游戏重启, 且重新载入ROM9 Y: `' t8 D- q: j. u9 Z
8 r( y- t) |- F' U7 q# \" A; ^ snap xxx.png; I5 T1 S# f1 z
截图为xxx.png
, O. X" ^7 _3 Q$ j l
' m5 l* O2 K( O. z2 R " m; u/ q5 B' F' R+ ~! z+ B
9 a! `( U8 r/ |: g" \6 e& ], V+ h% l , n# F* N! ~( G
热键:6 Z9 F9 e9 I# w2 J" w; I; m7 t
~ 中断游戏
6 `3 d) ]$ N* ]. D. _/ G F5 运行游戏
, D/ S; Z3 q$ Z% Z F12 运行游戏且隐藏调试窗口& @- g- J5 a9 ~# I
F11 步入, 单步执行, 会进入子程序& W- u$ Q5 N9 U: S0 H1 K; ^
F10 步过, 单步执行, 不会进入子程序
: Z! k* l0 n( e- K0 x3 Q! H' K# C Shift+F11 执行到子程序返回
- _0 M" `4 f. d/ ]5 E5 G2 Z Ctrl+M 内存浏览窗口: D3 r2 Q% k4 r- G4 B
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU* H6 `7 i4 A3 Y( A1 d! F
& ?4 U g5 x" J& V+ Y{:4_94:} ' }) ~: n6 w8 \/ n
1 q4 u; y4 c8 h5 F
|
评分
-
1
查看全部评分
-
|