|
; k3 j$ q6 t2 H& E% B
很快速的整理我自己常用的指令: P* k5 X! M6 V% w+ g3 h+ v) r
K; I3 B0 C* u4 k
{:4_112:}
- I" E' B8 A% _% ?( p3 i: ]) `
1 |: v1 u# T, P0 B0 mMAME DEBUG常用指令
; |0 H( w: H7 ]& e& `! s0 a: q% o! v) j
内存搜寻: ci, cn, cl
9 q( a5 J$ {) I( H# M2 q; J/ z5 e8 y* C2 i' A' m# g! Y& x/ p3 c& N3 \
ci
) T4 H+ C( c+ l( S; a6 g$ b1 T 搜寻任务初始化, 每次搜寻一开始一定要输入这指令" |+ J) @4 }7 E; ]: J/ M
! w/ N% h7 w4 ~' n- m, z7 @
cn$ u" |, r L& _7 ^! k. A- r
搜寻指令# L2 @" [- b8 o. K
例子:5 i, j5 Z9 @. H9 w2 V
cn eq,60
# ? o3 \5 i" z 搜寻目标等于60 (十六进制)
! r8 Q2 W! v, M8 T& x3 O: C: H ( k, C3 ~0 P+ m
cn eq,#96. x9 U9 M+ d c3 l
搜寻目标等于96 (十进制)
8 y0 w# G/ ]1 g, b% ?( d% c4 I# H# ]! B6 D- E
cn eq/ r/ p: D. Z: N
搜寻目标的数值没有变化 G, P2 l4 [+ B h, C3 {$ o
$ f: Y$ b" d. E2 L# G cn ne
: B% c; H1 C u+ R' ^ 搜寻目标的数值有变化
) U" {1 `0 t* q" D# u 3 ~. D$ Q- g* o7 ]
cn +
4 `" K5 |; {' | 搜寻目标的数值增加
! z% Q( s/ i' M1 k, W 9 [3 R4 E. M/ m8 L# J4 v
cn -# K% i. j* k; z& a, G9 U) O
搜寻目标的数值减少
. M2 ~2 ~( i4 s5 `8 [: o; s# e
$ j. `$ e+ S8 S1 k; S6 \ cn +,3* V; z: C0 s9 u7 |2 E2 s
搜寻目标的数值增加3 (十六进制)
$ v. o1 W( M7 b8 U E2 _
4 g. R2 _/ I! f; z cl
9 Q& G( C; ?$ C# }7 |; D 列出所有搜寻结果2 Q2 v, N- Q4 V8 H$ Q1 W) v6 j, \
6 T4 X: V9 S! r% K' u cl xxx.txt" P9 y* O; i/ }4 h
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* R8 d3 }) m! s% E" S
( `* J) |( L% x+ Z, E
2 @) F* q# x* T( }' I内存监视点指令: wp, wplist, wpclear
; @# {2 g" A' P6 }" z 例子:
: _0 Z0 w) K0 ? T- t$ G% W wp 1234,1,r
. l4 Y0 l l& y4 q( H+ o 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度11 m$ _. G- |# R- K; H0 P& r
5 T+ E. _4 n e( b } P& U' d
wp 1234,2,w
" L# v+ k. z4 i, ^ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 D/ Z" h4 T7 f. Z; J( S p
; m7 l4 w( g' C: W" W. y
wp 1234,6,rw
; f+ B+ S7 n5 p9 e- y 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 [* P ^3 y- @' [
3 f# r: {; H4 ]% y wp 23456,a,w,wpdata == 1
# G7 E% [% P9 \. B2 T; x6 t( C 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
& e. r$ r( b3 i. n$ g" |6 y) V) T6 n- `; ^( w# A" Y/ z7 `* S2 J
wplist
6 a! Q' F' L- |/ r' K q: O 列出所有监视点* z. O3 G7 [! H; F$ D8 v6 J/ Y
- F& W/ T' o5 X. p- B. x
wpclear 36 Y& i" U7 \/ h- S" o
删除编号3的监视点, d% C' X: ]) P7 h: D' e: W7 X
2 C# z$ n! {' B8 e$ H5 l
wpclear
- \" ]. H1 G' P! i 删除所有监视点4 x7 g4 l) D$ S4 S% Q
4 c1 X+ `! u/ A* V 9 ~7 k, @& a: F+ `; u$ p
8 j1 m2 h5 p2 h: R' z% B0 h
程序断点指令: bp, bplist, bpclear4 Z8 X3 W! X* y' M
例子:
# a m- @/ x* G+ ]( F( {6 H( m, J bp 1234
2 i+ L& [6 ^6 P, j# c 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- t' S' u$ `; y2 O
" h% G+ m) k3 X3 s! K4 s bp 23456,a0 == 0 && a1 == 0
d u, d7 l: J" T2 G* K 在地址23456下断, 且中断条件为a0等于0以及a1等于0 H4 _4 {% g$ Y e0 F, {) J
. b# q: a' C( N0 K# ?( x" X/ f
bplist& M& L2 w1 E9 r% l
列出所有断点+ I8 @ Z3 c# ?1 u9 O
7 ~* b# Y. m' q' A9 z% A; Z' D7 H bpclear 3( j; p7 V& L4 F3 \
删除编号3的断点3 Z2 {& a8 @+ S) L: Y
' I$ Q* v4 p+ w9 j9 v) H! B bpclear
# `6 p) ]/ k& Q A) T 删除所有断点
( _/ Y9 a2 z# `5 ]6 g9 T
( u. _0 [' C8 k! p
$ C* |5 \; |' h$ [
3 @# ~4 O# ^7 ~7 e6 {, [跟蹤紀錄指令: trace
' {4 |( J$ w3 X; t2 ? 例子:
T( c! q# M; P! L" h; A trace 01.txt
7 h2 n0 o) J _3 w 跟踪当前CPU运行的所有代码, 输出至文件01.txt
; z& {( L: L8 [0 s1 S0 S
6 |, s$ C2 M$ u trace off* x. z; Y9 [2 \! l3 m1 h
停止跟踪, 并且关闭文件& d' E' N0 `1 g& K) f" ]0 A7 Z. o
/ q/ T8 Q3 r: a% M2 f
trace 01.txt,0* }% C( n7 W5 M
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 s q3 N: C8 N1 Z* q
* x$ x0 W# A k$ m1 w7 b( X. ` trace off,0, }9 u) J( F* j; a
停止跟踪编号为0的CPU, 并且关闭文件+ S0 e1 i8 }2 u# H
$ y& I8 q" l1 [
trace 01.txt,0,{tracelog "A=%02X ",a}( U% J( ]5 U* w6 U& z
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 t3 }) q( `% | 并且在每一行的前面, 写上"A=a "
5 c! v- |/ j1 g' r: c "A=%02X ",a为一个C语言printf函数常用的输出格式
9 R `8 s% A7 [ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ r4 k/ J( u4 a, S9 {% n0 { X表示为大写十六进制数
. b8 R1 q9 o. V0 A6 Q7 m
" M1 C i8 e; @ C
; M0 j8 E$ m9 O/ }& n7 Z0 {2 Y: e* K$ \$ c6 l9 T0 p1 Z' ?
内存直接写入指令: maincpu
( v6 e6 B8 Q% G/ O 格式为 maincpu.[][]@地址=数据! f2 U% j5 p2 w0 s
第一个[]:& g& c; [ ]& T* Y/ O1 W) h( \
o 表示ROM地址
; M, Z; }5 o8 A# r6 j' g$ f p 表示RAM地址
7 T7 ^( U) B0 `2 D% b
V: H, L+ b/ D+ }' t! ` 第二个[]:
! R) C( i5 v) E( z3 [0 k# m d 表示4字节
1 y; B L7 r' o0 |) E* W w 表示2字节( d2 u* Q) ~8 h& d( l
b 表示1字节
% Z0 {- N @; Y) J/ n
1 y% ^: j% j0 n) z 例子:4 C* R% O% M" e
maincpu.ob@1234=FF
7 M. H3 g. `% j 在ROM地址1234处, 写入FF一个字节
8 d) T4 F6 d8 ^+ b7 H
# g' y# k3 A4 @1 D3 H' E maincpu.ow@1234=4E71$ @/ [) L$ ?- e2 i* @. c
在ROM地址1234处, 写入4E 71两个字节
! E7 w3 m6 R$ B$ D3 b
5 G4 Q9 K! F Y4 d+ q: f maincpu.od@1234=600A4E715 S1 {& F$ c- Y7 ]7 O" _
在ROM地址1234处, 写入60 0A 4E 71四个字节
- k0 y3 m/ L, f" O: W+ U; O( S, ~8 X, U
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 u) }% m7 D# S3 ^* u
! P# b. I% J9 y0 d& B7 x1 T3 p
3 D& {: V6 E6 k, b( H' b其他:
' t9 R& T2 E5 ?, } dasm 输出档案名,地址,长度- c0 Z9 F3 b/ q R! q
输出程序的反汇编代码4 D7 E5 t& f& U8 S
例子:
+ q5 ~ J& n6 [3 o* L' [! t" V dasm 01.txt,0,100000
6 Y. E {! k- U6 i$ p 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 Q0 X# y% P! |# g N$ C
4 j0 c: z+ d) {% W* F% a softreset. u( j9 w, L! Q7 _2 E! [
游戏重启, 但不重新载入ROM
9 c4 N# f. w" y
4 \! @7 {! @9 g# H; v! l H' G' Z hardreset
2 B% V* S, d+ ~# ] 游戏重启, 且重新载入ROM
6 m2 p6 W' p( `. J4 y1 A# [8 B- b3 Z! @# | K; _ j2 y3 }
snap xxx.png
% u, C5 ^6 D$ ^! O$ @; j 截图为xxx.png F X Z2 B4 ]4 s/ k
2 m$ l3 {) j+ `: }- G# D$ e
9 [9 J. P* |# w( r; B: M
/ R, K2 h: t2 I( S& [9 {# G
# L5 v! }! z* z6 o8 w热键:% f8 t4 {- t3 q3 L! F5 o, Y# B
~ 中断游戏
* |. ^, y+ f8 S F5 运行游戏8 z+ y6 u, d# |+ i- _& g% d
F12 运行游戏且隐藏调试窗口
7 t9 t' v8 h, ^+ U7 @ F11 步入, 单步执行, 会进入子程序
5 k* X" J( {+ Q: L F10 步过, 单步执行, 不会进入子程序0 _8 S7 {1 f/ Z2 U
Shift+F11 执行到子程序返回2 Y, D+ d* D* ~
Ctrl+M 内存浏览窗口1 j( N$ ^8 \/ v9 N$ j7 E0 r
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- W; s) `4 ^: s
6 q+ d7 s6 L; q) O0 ^7 D6 T{:4_94:} y, G1 k. k9 y w" q* {
2 O8 I8 V; G* N! K* h* u" u1 G# B |
评分
-
1
查看全部评分
-
|