|
* S4 }% K7 {/ n! ?; i很快速的整理我自己常用的指令: M' T' s! [& \ n# r/ D
( n. }0 u3 s, y5 ^
{:4_112:} . l9 s' Y2 E* T; d8 v
' H% C/ V, a' ~' i' r* Q* q
MAME DEBUG常用指令
' V8 \$ F G- G( K) j% S6 j1 D! I" Z% E, W; `; P6 D* k
内存搜寻: ci, cn, cl
: W" E6 X; j& R6 A: }( J5 }& x7 }0 C' [! I8 b! A: ~
ci4 t1 s o6 Y* t" |
搜寻任务初始化, 每次搜寻一开始一定要输入这指令5 ]; ^& \/ q: I+ h* O; T
# X/ u6 p/ v+ D
cn6 M+ m9 z+ y- q" p6 T
搜寻指令7 j' z" t& g5 z: ^6 t6 H
例子:& i) M% f" U* V% H' X
cn eq,608 j. h: X5 k# n4 }. K0 A+ J
搜寻目标等于60 (十六进制)" ]) d+ i5 p9 b& u. J" G
& g& c" {' @( r ^4 T
cn eq,#96, q# ~, \1 T, P- h
搜寻目标等于96 (十进制)
3 O: @) ^2 q1 c/ V1 n% D0 }! z3 X: R Z0 C' \
cn eq
7 \1 z k4 n1 d# u$ X 搜寻目标的数值没有变化# e9 m& Z5 {' p% [9 _6 ~/ T Q
% R1 F4 ^5 ~( ~9 O- o8 p+ K+ k cn ne5 O. N, v. \' O% j, k! R
搜寻目标的数值有变化
- j# p3 v% `& x' Z2 X & o8 [' x3 K. B6 R& U9 `* B7 } ~
cn +# r4 F$ E. b8 d" Q- G
搜寻目标的数值增加' Y$ n6 |2 S- M; J' R
' Z8 S( w+ {' ^( U; a4 o. Z% V cn -
! }1 J0 Y( n9 G 搜寻目标的数值减少
+ F8 p* v2 b3 | _3 _
( S4 q V8 M; l0 A8 n3 q0 A cn +,3
. N! p. }$ B, i 搜寻目标的数值增加3 (十六进制)6 [7 P, C8 w0 A' ~
6 n, w4 \7 f% [ cl+ U& B& L# F9 W5 y
列出所有搜寻结果' v% u6 R) F6 `1 v! X0 y/ R
. g& n1 V7 g/ A" v* U+ L" X cl xxx.txt- l+ A) X( K! x9 V
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 K. B# s+ G6 N0 b K
L$ h2 M6 l% V7 u# n
5 A0 W' b+ H' b% h' U2 {- C内存监视点指令: wp, wplist, wpclear
0 N; Y" ?- ]/ d4 I5 J/ u: v 例子:7 r. o6 N( s. |5 H# o
wp 1234,1,r9 X3 k4 T! b( H6 L
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
\) [& Y6 H' P% G/ p) u5 ^
, Y( [; R5 `8 w4 R6 I0 g; g: S) q wp 1234,2,w2 O' P# C$ S" j4 z3 N
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* E! ^3 ]6 M ?9 R# P, j- M
; X3 a2 A4 ?$ H k$ O) r) H
wp 1234,6,rw
+ p$ h9 B5 R0 Q' p& n) C- D6 m 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& m2 V' h+ ?0 z8 z
* H& z& H& [0 m; K9 t( X wp 23456,a,w,wpdata == 1
7 z4 F) Z ~" t8 a5 J7 h+ g( i 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
: s4 v, e& j3 y9 P# Y% G+ F# t
" Z6 G o" h; N5 C# Q1 j% p wplist+ g- o8 ^, }3 D9 L1 V/ C, u
列出所有监视点
, J; r, Y! S9 F* Q+ J$ c3 y7 S; ?; G- a9 @ `/ s" C5 p: b, ?
wpclear 3# c1 K2 Z% q! \1 u
删除编号3的监视点
0 P$ ^+ V- j6 J* V" |, s3 ]4 F ~# u0 W, v. M# V$ d P
wpclear
' g; s% x5 W. t' K* Q7 A9 F 删除所有监视点8 `& j: G1 D6 V: U# l2 {
/ b4 ?1 g I3 S; x. X; R' y ; Q: ^" g# m9 t/ I0 B; A
8 v+ @& {+ O+ y8 I程序断点指令: bp, bplist, bpclear1 x; V, [: {8 d6 t8 n" e
例子:9 d' x- N* h$ }7 A7 q+ k0 P2 s
bp 1234
2 h1 L4 t4 a" k3 n1 D 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 O) ]9 b4 H8 y+ l
0 p- j& C( M ?# D: h u" T% i6 {0 f# b+ \ bp 23456,a0 == 0 && a1 == 0
0 I. f8 `* m$ h1 y: V# S 在地址23456下断, 且中断条件为a0等于0以及a1等于01 X: p8 o' {- Y; B1 }1 o$ z
7 _! Y! R* l- a3 i% N8 O# X, P
bplist
9 z( n' a4 {, U4 v7 Z 列出所有断点
0 D/ R! m' o7 n Y9 K8 n6 ]* K( K6 ~3 W1 E/ U
bpclear 3/ z( R5 x2 B7 D9 m
删除编号3的断点
+ U9 u N1 o) x+ W" w) Q# s- r- b1 W8 l0 m: Z- I5 s
bpclear
3 V) d2 ]1 h' d, N, V8 | 删除所有断点1 d" ^& Q* P$ Z f8 b
$ H# w. d" W7 w, Z- S z+ @- m
2 w* O& O: X% c* t. V9 c3 T
; d4 O- E$ V8 a m5 j/ I跟蹤紀錄指令: trace
5 l0 L' w1 k8 D! }4 H) _ 例子: P% d* S3 Y7 m
trace 01.txt6 p5 n' S, M2 q. i9 g: h& S
跟踪当前CPU运行的所有代码, 输出至文件01.txt
, h& _7 T; q5 @9 T, z3 F" l4 \! p$ ?9 G; \ b
trace off
2 b- w! ~9 Y2 R" M. k# m 停止跟踪, 并且关闭文件
5 H, C9 b: i$ D! ^; @! t, f' W0 i# V: b# N+ ]( \+ X3 `' u
trace 01.txt,0
% @2 N9 l4 U: H3 p- G5 W5 i- J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 {/ }& Y$ h$ U9 p. V
( J) p! f H( ^1 h0 c( z
trace off,0 v. }. n- ?% X/ T; g
停止跟踪编号为0的CPU, 并且关闭文件; y' T) C9 }1 i$ A
5 S: _1 l% e4 t* x
trace 01.txt,0,{tracelog "A=%02X ",a}% j' C! y% p( k
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ y* h6 L5 j9 e+ w
并且在每一行的前面, 写上"A=a "
: \. p/ t% b- r7 i "A=%02X ",a为一个C语言printf函数常用的输出格式/ W4 i) I5 W' I" c
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# ~0 t3 s0 [6 m. G X表示为大写十六进制数
* b v& N8 p$ P2 \) y
; S1 A$ y; {/ G4 k/ K; }! R
0 ]+ K; N* ]( I; W, c8 b7 D" j6 ^: i3 {
内存直接写入指令: maincpu3 r8 h% e1 O* B, \; m& Y6 c1 y; a$ Q
格式为 maincpu.[][]@地址=数据
: F" A H' O4 g3 u9 T 第一个[]:
5 X* |$ b! V1 _( j' Q o 表示ROM地址
, a4 g4 U, [% }( N p 表示RAM地址8 H5 u+ i$ E3 }2 _/ j3 n( n. j
& I* k* ?1 K: z/ m/ x- t
第二个[]:
u0 `4 m* g6 G" p d 表示4字节
2 ~) O/ k' f; x: r1 k w 表示2字节
! {: S3 P* @2 o b 表示1字节6 B0 V7 s7 @: Y9 c9 R
+ R1 r, f" x' N2 T/ j 例子:
+ i6 d3 j4 P% \1 B# F2 m7 I" C maincpu.ob@1234=FF$ M$ J9 D+ z# F5 t
在ROM地址1234处, 写入FF一个字节
+ W* |+ c9 p( @5 D7 f% `
: K) r9 V$ |* V7 ~ maincpu.ow@1234=4E71
. b1 b/ i' }& [) [6 }4 H2 `& i# Y 在ROM地址1234处, 写入4E 71两个字节# Q( F+ h ^- S+ }
1 C& ]( j- n2 y4 ]: C" `( ]
maincpu.od@1234=600A4E71
& b! o- F2 E# P4 C 在ROM地址1234处, 写入60 0A 4E 71四个字节& S$ c5 I/ W9 H( J; p
( P3 T8 x/ y2 W) \
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' o; A' Y' }# U; b$ v - ?; j5 I$ m( c1 h
$ u$ T: w! K8 U L
其他:& l) r& s9 g! `" q1 e! N/ D; J' D
dasm 输出档案名,地址,长度
% S1 Q/ Z' V( q1 X6 e; } 输出程序的反汇编代码
" T* |6 g+ [8 a7 }: `5 q$ q 例子:& Z$ o: E5 v6 `% X+ w" @8 \ j
dasm 01.txt,0,1000009 T+ e# C9 D- b4 ^# C* t5 _' N+ I& K
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, H4 X; g( S" ~2 T; _7 S
$ Y* t1 R* q, G3 R; U' C+ q3 S7 k softreset; K+ I7 r0 M# ~7 N3 V
游戏重启, 但不重新载入ROM
, _& f9 D+ [% i9 f# o0 f2 Y/ Z
( Z4 D* j+ {4 @ hardreset
3 t$ X, ^8 i+ c6 o 游戏重启, 且重新载入ROM8 z; g( j4 V, I d& x% L4 r
2 W5 I" |- Z% a+ z1 j U3 Z' i" ?0 ]
snap xxx.png
2 R/ [- A1 T W) T3 J" d 截图为xxx.png
; u' a+ @! h( f5 o2 B+ P" H$ e7 |4 w% q1 S$ l% a! N9 v7 o
/ B5 K+ {- O1 F
& a" l& D- _4 _1 \- Y4 J2 P
8 H* l& s" t2 G9 T. L# J$ k热键:
1 V1 @2 }8 ^ A. a8 n ~ 中断游戏
0 N' ?% I3 N; r$ x F5 运行游戏$ g& l0 L- x: r) Q0 s) |
F12 运行游戏且隐藏调试窗口
8 ~ H( |9 a) i9 ` \" S' U F11 步入, 单步执行, 会进入子程序5 l# C5 W6 o# m* p% d6 L/ E+ e
F10 步过, 单步执行, 不会进入子程序
8 K8 F( D9 Y% A. n Shift+F11 执行到子程序返回
* i# W1 p' w% l% }* k+ b( ] Ctrl+M 内存浏览窗口0 t6 Q4 G) I1 `3 a
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' q w# C6 `7 w9 t6 T: [' e! N4 X0 p. R, O- ?5 `9 v
{:4_94:}
% \* X7 M& h3 `! H( H$ a
3 x3 l$ ~# E: `# g2 e |
评分
-
1
查看全部评分
-
|