|
|
2 c9 R5 F- R* H) q
很快速的整理我自己常用的指令" g3 H! N" \8 }2 C
( \% _3 {% r8 n/ E
{:4_112:}
7 z2 x" z2 }! V
4 Q+ G6 t: b. W/ o* E8 z/ ~MAME DEBUG常用指令) b7 q% X, F0 i. O
$ |$ p- M- T { O
内存搜寻: ci, cn, cl4 D0 {& y1 ~; H& \$ S
2 [+ h3 g9 j7 @. \4 f- R) @ ci) W/ K) C$ C7 H5 c4 C/ Z
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' ]4 Q# ?9 A( |$ {
4 [# \; h* E; Z) l% z* [ cn
/ l ~: o6 q; a4 p 搜寻指令
4 H Y' ?, l( ?! D4 o6 K 例子:7 c! c& Y! Z4 T4 Q4 F) \4 I: E
cn eq,608 c' K1 ~& a1 V0 d, |2 U. Z
搜寻目标等于60 (十六进制)
0 v2 [5 X! M% z) |! @
8 X7 J* T* s L' W cn eq,#96
6 U2 N( ^( W4 a( U- x' V 搜寻目标等于96 (十进制)! C* Z+ [2 m% D4 g: ]8 B
; `' I) R5 |# P) G cn eq1 f6 o7 O$ l/ a
搜寻目标的数值没有变化" _, Z. u, L4 t" X( j
; q Y5 v7 I. j# c1 m4 [5 O
cn ne0 ?3 L9 J2 I# h. j" M8 f2 q9 B, T% [
搜寻目标的数值有变化
2 N! O5 Y/ E6 j7 s& R * U( K% ?. C+ S' D: X
cn +
% y$ T) l4 {* q, j 搜寻目标的数值增加
' C% ^$ m) |5 _) R# u
* ~3 ~ K! B* O6 a6 B3 k& p% K' I cn -
8 V- }2 [( A; t3 ~ 搜寻目标的数值减少
+ w t8 F. t2 g- {4 J% Z % T* k1 {3 n3 o
cn +,3$ D7 ?9 p3 v0 i
搜寻目标的数值增加3 (十六进制)) N- B6 x0 N9 J8 r
5 p) G0 y! S V H5 u/ P/ W
cl
, a) }8 Y+ \* Z: _9 }( F" S' H6 N1 |3 E 列出所有搜寻结果2 c" v& K8 L m
: X6 G5 O( k' [9 S cl xxx.txt
' R9 T7 j. m5 [+ s/ t 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式) |8 r; Z; r4 Q& N; z( k4 g
1 L0 _% y5 H& C" v8 o4 O! Z ( |8 h6 V* x# g$ E: g
内存监视点指令: wp, wplist, wpclear+ Q \3 L3 ?) w# a& O
例子:
- } A3 @2 a* s' p' `8 X8 k3 d wp 1234,1,r
. d0 k& \0 I1 E3 k 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# [/ e& x/ P g. s
* J8 x) J8 I; o1 e4 d* \7 } wp 1234,2,w
/ N$ M5 \, X) ^) K! [) h 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: V5 b1 F' h) {8 ?9 w9 e, Z
; ^0 B: g9 x- \% ]( x7 W
wp 1234,6,rw
t& u$ | E4 `! {5 x 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ Y8 K' x4 w% t) K0 L6 X, J
: h7 t ?# L9 K- B wp 23456,a,w,wpdata == 1
2 |4 Y1 T& _* C6 o* b" B 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
# e- T) ?1 X2 {# p4 n( \' R" N6 d6 }$ O! O1 o: X3 m* N
wplist
6 P. A+ y7 B: {: }4 b 列出所有监视点
7 I5 j* D8 c' c2 U9 p+ d- f
/ c( m- A. G& I$ y# B! @) @ wpclear 3' Q" ~9 H: I+ Z. y5 t! A: ^
删除编号3的监视点
; n5 H3 q2 R( W7 z' N* a E+ G4 y0 u# e8 z; Q
wpclear. Y- |9 e; [5 J' B- t" g, k; p
删除所有监视点, o2 |3 ~( q$ a* E
( Y2 Y1 V) M, Q ( p5 l& ` ^* E& c# R5 A# U
) c9 G" P0 D- @/ u
程序断点指令: bp, bplist, bpclear
5 z% ^9 V- h- K 例子:
! ]) C& j3 D" ?" V7 b" n9 A& i5 R bp 1234
' K3 L- m$ P/ K7 e2 _ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
% F9 J1 ^& N6 K+ c) l1 c1 d: Y; p' O& H. H$ ~, v
bp 23456,a0 == 0 && a1 == 0
0 Z8 v) Q: ?' ~8 v) T0 r5 T8 d: d 在地址23456下断, 且中断条件为a0等于0以及a1等于04 o* P7 q- R& Q7 ?- k
0 d9 [/ c8 W1 m7 ^
bplist1 t. E* Q. ^3 Q9 i+ K
列出所有断点
) C. C) N; w# P* i( a! X$ a7 g5 Z0 T
bpclear 3% _- m, ]( j) v `
删除编号3的断点
# e+ ]' Q( A6 f3 t
! a- c' v1 P6 n% U% c, I bpclear
; u9 @. x" v7 m* N, B5 ]/ e9 w) \ 删除所有断点$ r3 _0 S1 S+ V7 K( l F# C* g
5 w+ Q$ L; g6 L5 P
m: L' \8 z4 n; r; ^/ m # S# x% `& R7 x; J9 D
跟蹤紀錄指令: trace
- x, I" O" `8 p L( _ 例子:
7 w% V1 K2 `, K6 P. @ trace 01.txt+ h8 A# t5 z, n& v' A7 m9 A3 C
跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ C) I5 p5 e( ^: `* u1 g9 j, J
$ F7 [8 ~8 I; Y+ W trace off
1 c6 t# m" i! I" R; O: S 停止跟踪, 并且关闭文件0 D- _* E6 M! \: X
+ n- P/ i: s! l s7 L: m7 D
trace 01.txt,0( O1 A; Z' J+ p8 Q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
7 {7 R8 M% }( v
' T x' A t7 X% ]; C7 @9 u trace off,0
4 U9 }4 ]3 a5 b* M 停止跟踪编号为0的CPU, 并且关闭文件
$ y: J& v v+ n1 `: q, p, T; ?% Q, t0 ~/ g, E- L& b. Z
trace 01.txt,0,{tracelog "A=%02X ",a}
1 E% V( c3 U8 K" O% S6 Q0 J" w! J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , U) g7 x: V# r/ x, n
并且在每一行的前面, 写上"A=a ") w$ |6 [ Y* f6 @9 @* w& r+ P5 Z
"A=%02X ",a为一个C语言printf函数常用的输出格式
* D/ J! E6 p7 c% d8 B6 N+ N8 C. S# K 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' e2 v) r; F; Q) P8 S O2 X X表示为大写十六进制数7 P; ~# i6 a# Y( v
; w( S* C* J- m% c" z0 w/ ]& i. T* x( m0 `2 |8 p2 j+ |! }
: f- Q& ^; ]) ]. C
内存直接写入指令: maincpu. G+ k3 v4 ]% j! U( F' r
格式为 maincpu.[][]@地址=数据
+ P( T& f8 A/ @; B 第一个[]:: h( K5 T. u" d% T2 e9 g1 D
o 表示ROM地址
; t1 \) q( Q/ q: p( ` p 表示RAM地址2 }- H4 {' M! ~( _' h; Y
( @' i4 r$ J' }9 s, M, ]4 ?
第二个[]:
/ m$ V: Q: p7 a7 y! i" h& _% y6 P d 表示4字节7 t) i! @% }/ n
w 表示2字节
1 P( ^5 }4 h- R0 a- S b 表示1字节& ` ~6 N- c& l' t @2 s0 `
- U9 P7 p1 y( M* }0 Z3 O' ]6 F 例子:
0 t5 G, U. s* z0 z maincpu.ob@1234=FF& `, M' E; Q2 S: i- `7 u
在ROM地址1234处, 写入FF一个字节5 Y! s6 `: V' x& z* W, d" a8 d' |/ l" `
8 B) a* v3 A' p maincpu.ow@1234=4E71) ?" c; ~* Y3 I9 d# l; s
在ROM地址1234处, 写入4E 71两个字节
( E6 b$ d9 b* C% R; P. x
5 o0 m) ~; s, X4 T+ e maincpu.od@1234=600A4E71
/ @' l5 s' V! M0 j; m 在ROM地址1234处, 写入60 0A 4E 71四个字节
4 m& ?0 a4 o/ o: L- d7 V% |+ s& P9 W
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 F0 W; d4 a6 J, O! f' @ \ 7 ~3 j7 z4 K1 ]$ f) ?! p' t
5 t' p2 L, `+ a {0 C
其他:
/ j/ V! A- k* k$ M, Y0 D$ D5 s7 T dasm 输出档案名,地址,长度. U+ m; f; C8 F- P; ^) F) `
输出程序的反汇编代码. @# u* g/ ?, i0 \" p4 `% Z
例子:9 F$ z5 ^3 r9 E7 p, p' Z& j
dasm 01.txt,0,100000
+ d2 b* S" f1 w0 j+ w- R1 ? 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# t2 U! ?4 h) D. V3 ~
* n7 N' z2 r5 o; U; O softreset
) A# a2 O% @* d. `+ D 游戏重启, 但不重新载入ROM
% F: E5 E$ Z: t4 q* H# l* _
* _5 i8 `- ~1 W. R/ B! { hardreset
& v) F* u. r, X 游戏重启, 且重新载入ROM5 V3 K1 K) a0 t8 m V
% w ~4 h; e) @8 O0 N snap xxx.png" e( C! ?, S4 ~
截图为xxx.png; B& a& X( ^% S
% V4 a/ x2 d" a* |4 \8 |
" `4 L7 u- n+ K
2 W4 q, T% r- }) k' E, x& b , s3 R$ o$ N' E: `) T% d* A* I0 }
热键:& ^& t, c7 g6 V9 o
~ 中断游戏
A0 M' }/ y6 q4 G$ p: _0 C. p2 ~ F5 运行游戏; ^/ v( E" Y/ Q0 K' z
F12 运行游戏且隐藏调试窗口
& W) J) D6 y5 s7 N: l6 a- V F11 步入, 单步执行, 会进入子程序1 Z; f/ v: P. ?
F10 步过, 单步执行, 不会进入子程序0 L+ R0 B: }" P* ^& O& X: ^6 C
Shift+F11 执行到子程序返回
& Y y9 L& }, \; h" x- E" _ Ctrl+M 内存浏览窗口
( A! G3 c1 V. y8 [ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
- O1 w' R. a+ K5 o
; J' U( q- V% J0 n$ Q9 B! {{:4_94:} : v- z9 W1 w5 z- L8 m- X
0 g/ K! k$ v y) O4 j8 y' A |
评分
-
1
查看全部评分
-
|