|
|
! D! q6 d3 n1 U2 K; Q; a
很快速的整理我自己常用的指令$ ]6 f, l* L! U1 ]$ |
6 O+ N& c% g8 w9 o{:4_112:}
! h3 L- O2 G* H$ M' l/ C D, F5 N# l' u+ G, ^
MAME DEBUG常用指令
6 V4 `! z2 f1 W' r6 U* n: ^% P( q/ I
& t) v+ q- f! {内存搜寻: ci, cn, cl1 O% l& F$ }) z& }
7 u- J1 G# c. a: t/ h( \ ci
! c( r4 E; h- `9 |. H 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
; G+ z& a5 Z5 M% {
. t z; A+ Z" \, Z Z cn
: s: _3 j8 k4 G: V8 p6 x5 u 搜寻指令
6 [" c" H$ B/ { u6 ]: ]7 i1 V 例子:
# U, k" } B( g- ? cn eq,60
, E5 o2 c* ?# Q! y1 t9 @5 a 搜寻目标等于60 (十六进制)5 ^/ `3 b! G8 _# b- n
" M. p: u* a) f9 | cn eq,#96
8 M2 B5 F/ |/ J1 m9 P) f 搜寻目标等于96 (十进制)
) Z L( l* e* Z; \* H+ {" {
9 B$ a1 T5 D) t9 x4 L: L cn eq
+ L9 V" m. I' ]( _ 搜寻目标的数值没有变化& Q3 }2 w$ W* x4 Q# ^: G% c0 j
; q* h. A4 k2 V0 m8 Y) C
cn ne+ S- D# y" Z" H0 E K
搜寻目标的数值有变化: E' ]1 B5 k' l @
+ }- x' s& D' g, _2 H7 n7 E
cn +
1 ^' D" m# j( {1 K d 搜寻目标的数值增加$ g+ o3 k. b* F6 ?, u( |* p* n
( }1 M. O8 K: Z# D) H- g cn -
; I9 ^4 O! Q6 {* a 搜寻目标的数值减少1 R! l0 h; I: G! A% Y0 k# @
$ ]+ v+ G) [! b* ?7 X0 q
cn +,3, T: J! Z |" X Z* K y. v: M
搜寻目标的数值增加3 (十六进制)( G6 @4 U5 Q' ]: A9 b5 `7 K9 p
# ^2 b$ Q6 Y- k( }2 u
cl
: h; m3 I( J& `' i9 I% m! e 列出所有搜寻结果
2 e/ C* Z6 }$ {4 H
' L' p9 H* U+ _* L. Q) u2 J cl xxx.txt
' b% r) V7 w/ y) O 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式. V+ u& h; W9 G/ k) \ Q
6 p5 j" P5 Y& `& Z. K' t
0 Z W# S( u, z* L0 u+ G c0 a
内存监视点指令: wp, wplist, wpclear* z( m5 E/ m: v
例子:
8 o7 Q. i4 G. g6 ?& [! { wp 1234,1,r: \; H! s. E9 R J' x4 ]
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ r2 I' n* x' E2 S; I9 o5 U9 w5 y
wp 1234,2,w
5 Z& S% U5 X1 l% k 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ t/ z3 a( h& Y* r9 w$ [" {% w D * }& U& B( [( f% b& ]: Q. {, r
wp 1234,6,rw6 y" z# D5 V% a0 h2 u
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 f7 e7 I p' ?3 v
" }& E% e1 @* T* x( z9 k
wp 23456,a,w,wpdata == 1( b" x0 Y" [" [- Y1 [
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1) z( |7 j: e6 g: s4 m' [
: y; | f$ S& N! r; ]* N
wplist! k& z3 {5 y% i7 K9 ?! R- \
列出所有监视点2 {4 a# M& w3 S0 w+ H
- K) H$ ? u/ [ wpclear 3% ?% m' D1 A( k+ c" J" B
删除编号3的监视点) V8 T. x) M' T( i$ j/ E! Y6 c
i; a8 D9 y2 g! S wpclear
7 r: Z% O& G, Y3 K 删除所有监视点
0 l# U% T+ ^6 d; ]% F6 K% G5 O0 R: C% C6 _" x( M
* ]# R O& U1 }# d! t
+ Y" ?0 h' h c1 L( I, r7 I
程序断点指令: bp, bplist, bpclear8 c# H4 F* _, h3 y+ `8 J7 A* o
例子:
" H% @# q" H! T% D1 b) ^% J bp 12341 O3 U0 m7 Z0 H, r
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, h6 M$ s, s4 s. `
7 d& x; C9 E5 y5 _
bp 23456,a0 == 0 && a1 == 0' w5 C& y" E7 z$ |
在地址23456下断, 且中断条件为a0等于0以及a1等于0 ~3 @% d* V, W) t
M4 [' N, y. U bplist
0 h( r( I2 ^! c5 S 列出所有断点
" @7 i2 W o9 d5 S5 s
1 F6 {' P* U6 `, N* a bpclear 31 b4 F5 p Y+ l# a* r0 l
删除编号3的断点
3 ], T, _/ C7 X' Z+ o
% q" n N" z7 |* k bpclear! d, A& ~' x- q9 k6 q$ ~
删除所有断点; u3 ^ o4 A9 Y3 B! x7 z
0 V$ D, K- o, E6 _- t+ `
& d' O0 ^" K9 l
" B: i# m5 e5 f6 _- [跟蹤紀錄指令: trace. {/ m4 T& R! J0 e6 z: K
例子:0 \! H+ b3 G1 S" v! |2 }
trace 01.txt
5 O3 A: s. R; k" O) q; M 跟踪当前CPU运行的所有代码, 输出至文件01.txt/ y6 Q9 `8 U! s! F1 m
( f! `7 r) y. }% a4 ^ trace off, `0 K) l4 ~7 R" F) V+ ~0 _& _
停止跟踪, 并且关闭文件* W: a1 m( T/ R8 ~: l; t$ {* _0 @
3 r% s5 e3 j* ]7 b* ^/ d trace 01.txt,0( E3 E3 T8 w1 o% U, W4 ^# r
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( @5 ]* ]/ l* H3 h
; i7 [- t3 g+ s trace off,0, X( P- H7 a1 o1 T
停止跟踪编号为0的CPU, 并且关闭文件
9 q/ Y/ z; s2 E2 t
$ x2 q& p' c/ X trace 01.txt,0,{tracelog "A=%02X ",a}
9 y6 F) r' }* i, `4 u5 ]! A 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: Q: e2 s9 W, d* c! c% i1 w 并且在每一行的前面, 写上"A=a "# K% Z0 J f0 S- w0 x4 i8 y1 k
"A=%02X ",a为一个C语言printf函数常用的输出格式% g' `6 x2 I& B; j* j; \
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入& _. |* ~5 y3 g: A; v
X表示为大写十六进制数
6 w0 X) _$ ]# E5 U% m: R3 ~& f8 Y& O& i: [/ ^
5 V& F+ B9 r* Y. ]+ S( i) m
7 j0 r) ?9 ?' Q2 T, Q& V4 G6 E内存直接写入指令: maincpu
3 S# J5 r$ V# b* B; v( z! e& h 格式为 maincpu.[][]@地址=数据( Z' R3 t8 h5 S* {& I" y
第一个[]:/ w! S' [+ }/ B1 {/ |1 S
o 表示ROM地址9 @6 F7 [* H4 D8 B( W) b
p 表示RAM地址
: S' P$ `) \6 W! G/ j, p y" | y, T% Y, |1 a% E
第二个[]:
8 f) B8 {1 M$ J' \6 E5 [" S d 表示4字节
: z& c4 j2 B9 H3 i t8 q w 表示2字节
7 l" Y3 T$ l- @: Z- z# R/ i3 k b 表示1字节
( D8 W8 ?! T1 F/ m7 o9 r; B8 I4 \# M w" [, g) _5 M$ M
例子:
/ ?8 e5 o* f$ s maincpu.ob@1234=FF5 J7 @5 a# x" C* U* h/ ~
在ROM地址1234处, 写入FF一个字节- b0 r7 o3 t4 L2 M
& S; B& ?. h) f6 o- j/ B W+ m
maincpu.ow@1234=4E71
5 `" `% b# r4 l3 a5 h1 D. ~ 在ROM地址1234处, 写入4E 71两个字节
" p" S. e" Z$ j! s+ D5 U5 o3 B6 Z. H8 u9 C, W
maincpu.od@1234=600A4E71 P e4 H7 q3 u5 d) |
在ROM地址1234处, 写入60 0A 4E 71四个字节" F4 j' u: U- @/ o7 t6 N T7 o2 N
+ w) ?( _* h/ F( U, E4 o
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 D! m: \8 q" b }
+ `8 l3 O1 q( h
+ W K: d; @5 C7 f* F其他:! S# t9 K( e. U* ~ ]
dasm 输出档案名,地址,长度& f6 l0 a) z7 ?, N
输出程序的反汇编代码! M4 A; k: E& ?0 A; G6 o% b
例子:! R8 A+ ^5 N) }7 f8 k
dasm 01.txt,0,100000
# ^, O7 G4 B$ \4 J- B- k+ X' n 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt) X; s, R% {- Q2 h4 ~
: N% J' ?+ _. V- x4 z1 T. S/ {* F
softreset" ~1 K" k$ e9 E, A6 K5 n9 g8 W8 O
游戏重启, 但不重新载入ROM
2 q, ]0 B2 h' F5 L
0 P" S/ R/ g; [5 q hardreset
! G, K9 z4 Z( ]1 K 游戏重启, 且重新载入ROM0 p$ K. X- e' `5 D& e* y9 W) B
. Y+ w2 s% _) e5 D snap xxx.png# P3 M% E7 \9 X8 f6 i# @
截图为xxx.png
# z! U0 s0 m% I. p. \$ q6 o0 n. L- b3 n* I* I6 O
% o$ V @; u* _+ O- x ( T9 T+ m9 u; t2 v" H0 z
8 O& y0 p) @& F _# L) R. q0 l热键:
) I6 D* C1 e6 W" {$ D# | ~ 中断游戏8 g) l+ b! \$ ]* d* k! g2 z
F5 运行游戏/ q- ?: ?. E" d; e& n, b; U
F12 运行游戏且隐藏调试窗口
1 Y- H+ m0 n7 {1 n F11 步入, 单步执行, 会进入子程序
3 |- F4 i/ B4 o! b, J* j$ H F10 步过, 单步执行, 不会进入子程序
9 k' M" O( ^) S Shift+F11 执行到子程序返回
* C0 }4 L/ i2 U Ctrl+M 内存浏览窗口5 g# ]( ~9 c: a* q0 r
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
; b G( u5 B% }+ B9 d# U% s8 l
8 T, |3 D3 }& F7 y{:4_94:} ; F, n% c' c7 K
; s/ Q: E/ x0 q3 r8 k |
评分
-
1
查看全部评分
-
|