|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
% o: u3 g- ]) b$ r6 K; }. c很快速的整理我自己常用的指令
% `1 v, T. @: F6 }; I v; f+ S; }6 X# W7 a! {, y5 v
{:4_112:} & L! H8 |! c7 [8 O! k
- H% V$ V4 `/ `- Z3 w7 c% k) v
MAME DEBUG常用指令
( N! f4 y" i/ o: K1 {; _
: S0 Q+ h* E- A, q$ s内存搜寻: ci, cn, cl
; ^5 h9 r$ o$ f0 k% o
! { f! D, m* O% c5 F( K ci
$ d. Y5 A! w4 s# a) f1 ~/ I& z: ~ 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% f7 }, j7 |( a; c0 W: R" P% B" ~7 P0 W. I+ X
cn2 m& U9 ?# i4 x- A- z- i: L
搜寻指令
2 m: F0 x8 J7 z 例子:( D% V5 ?% k0 D. v
cn eq,60
) c1 q! I5 S5 I0 T H 搜寻目标等于60 (十六进制). m) U3 q2 M, l% l# Y* _/ u
" y, _/ Q6 \* X' X9 C6 ^- O8 J- s cn eq,#96) d* x3 m( } \3 j
搜寻目标等于96 (十进制)7 Y4 R3 ? C+ v! k' I- ~
5 w# p1 j5 G& [
cn eq
& O' p3 v3 b+ o: j) K) \( d2 L 搜寻目标的数值没有变化
% Y% f. n# H4 O3 A6 ]* z& H% N4 [& T/ d% k! x1 ]( k; W
cn ne
; N% W! u; F. i4 r& \6 V% n2 S 搜寻目标的数值有变化/ I$ a! `, r% a3 `% g( L
$ ^, N/ N* |3 I cn +
7 m" ^4 |% F4 j K5 z" X" ] 搜寻目标的数值增加- x% \0 Z+ U7 l6 [: Z& S% F
0 L/ w* T, \8 p- r* G! i
cn -7 g1 W8 C7 u7 P- c1 P" ]* j$ M
搜寻目标的数值减少) t/ b7 J) D: s+ ?( g) ^' W
5 ?; q4 G# A# h3 h7 s. @
cn +,3
3 B1 ?. q: F/ o8 }2 f4 U1 R5 Q: @ 搜寻目标的数值增加3 (十六进制)) C6 G. S; P* _) u# j. R' Z0 v
1 @2 _& c; a3 S$ n7 ~8 E4 p5 H, y2 v cl
" ~/ e2 b1 x6 {' z5 N) @ 列出所有搜寻结果
6 R$ s: {) g* ?! B8 \+ r' N( t/ P* S& N- r6 e+ O
cl xxx.txt
# a3 W: G7 D! c8 @; g 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ O4 O: H/ V* m2 {3 R, B0 O; d% m3 p6 s6 C# }4 S) _6 s
6 Q! e% W6 t) J0 O/ y( _. V3 ]/ X! |+ } N
内存监视点指令: wp, wplist, wpclear
" l1 _2 t( H! L7 K! d 例子:1 Q0 T$ W% m0 Q& ~* z% Y
wp 1234,1,r: y/ X% }9 O& n) B# E
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度15 Y0 E# a# @4 g# [2 e4 L# d3 y
2 J" e- v# O F% J$ g( s: M6 q wp 1234,2,w6 N6 a0 x* f: ~* A& D6 R$ ]
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ i7 q5 l2 {# L! q: t
5 ]% J! r0 ]6 }7 c+ L( [ wp 1234,6,rw5 R- s1 ]2 w3 S% k2 ~3 `
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( h- T6 a, M- P8 p9 A% E( Y
* @. t2 \4 X; z7 i
wp 23456,a,w,wpdata == 1) b8 c; L) k) D( m
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% k8 D6 c0 v: N( n# } Z9 s! O
2 F/ n0 E6 x1 M' w$ f
wplist5 \$ ^4 V T9 p1 i; P) E0 S/ X
列出所有监视点4 D7 v* n) {8 ^
8 x& t+ X. `1 |# _ wpclear 3. F' l" L7 S% m! s% t1 j
删除编号3的监视点" v3 E8 X! ^; H% l- n. \
- v3 N+ R3 j9 r- G% m& ?; D wpclear
( q5 a9 Z% V l' X8 M 删除所有监视点% E$ ~+ B8 Z$ S }# u4 y/ U0 z
; y. A% U; v" _' z( Z7 y+ q2 z1 [
# y6 j" h* p6 c( y* m
/ w& ]8 @' N, o& h" i; x程序断点指令: bp, bplist, bpclear
3 A5 ?6 i3 Z @* d# T 例子:
# q$ q- n: K6 ?! D% D bp 12349 l" l* l' P. \
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
7 ?2 x3 C& ]9 m! r+ C$ c: b
+ l! }9 A7 O" L bp 23456,a0 == 0 && a1 == 09 ^7 t# B% m; m+ ^+ k& C
在地址23456下断, 且中断条件为a0等于0以及a1等于0
% O0 `& Q8 }2 v2 f
) \9 q# g5 |2 A. m+ Q bplist+ ]) k" ?- m1 \' ^/ O5 g6 f c
列出所有断点
* e2 ?( q0 Q* S5 M" o$ `% i5 a& ^
bpclear 3( b5 q- @1 r7 H
删除编号3的断点
* X9 r I1 k# j8 s+ E9 w7 U$ K( S. T- k4 v* J
bpclear
6 d/ w0 m$ S, K 删除所有断点0 v+ J x( z% Z9 W3 U7 z& N9 v
! v2 a8 n$ N9 @
) o/ l9 K+ |1 H K8 ~: w
0 j% u0 U3 y7 M跟蹤紀錄指令: trace2 `3 N; W7 E# g
例子:
* R! {4 M" e, c8 }/ x' ]! e+ f trace 01.txt
* G/ D: k: R% U0 T2 E 跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 t& M6 P. ^% o( H2 D' \- q6 w" g9 V C' l$ P2 i5 M3 w
trace off
$ B' Q7 I5 {& v: M 停止跟踪, 并且关闭文件
; Z# T+ Y& W. t0 D+ Q( g h; H% ~1 ?/ R2 T; L- q
trace 01.txt,0
/ Q, m& q6 j' ?- Q2 I1 X, h+ u' C 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt' j' ] t" W8 Y1 M# U; a$ a; C
# C6 O. H( C; @5 i0 Z+ i" f6 n+ ^
trace off,0
+ M) M" h9 q* j2 N* `% J 停止跟踪编号为0的CPU, 并且关闭文件+ f Z/ D, F0 Q9 y( k; r6 G
/ ?8 p4 z" A2 u6 y trace 01.txt,0,{tracelog "A=%02X ",a}& F1 | B5 s! k. d' h
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" k4 o# K1 T) S3 k+ G; q! R 并且在每一行的前面, 写上"A=a "
# X* b) k9 g! K0 U "A=%02X ",a为一个C语言printf函数常用的输出格式
9 p7 q' F# q3 m- v9 [0 z 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 Q0 d, ?4 ?' K" Q5 h
X表示为大写十六进制数
- C: V1 p7 k6 Q! _, h5 f( W' W2 E/ r+ Y6 [& n, a
1 E. M' G) Z" y+ p8 Q9 f. i, Q1 H- E, v6 B8 F3 ]6 f& Y& l3 `) s
内存直接写入指令: maincpu
& x S- Z# m) J1 e [' m8 ]! F& B 格式为 maincpu.[][]@地址=数据: F5 g2 K4 e1 ` X
第一个[]:4 ?' u( J% {$ x3 D2 e: G) A
o 表示ROM地址
. C4 i: [' V& h, n& K p 表示RAM地址4 e2 X" S) c( y9 |, v, M h
, P8 O- @% |3 I 第二个[]:
% w$ i6 k+ M. Y8 n5 H d 表示4字节
% X! N8 K) s! X( T" ]/ R w 表示2字节
- z2 |' H8 K2 p4 h/ P- D# p b 表示1字节
4 ^( M5 B, s. Z5 B
5 T0 Y- a8 D B7 n/ Z 例子:
& Z; a( c" U. I# k1 J% a% J maincpu.ob@1234=FF
- C' l4 ~6 b/ v4 W/ _/ N7 ~ 在ROM地址1234处, 写入FF一个字节
5 _5 z0 _$ _8 S' I: g. ]4 K9 }7 b* J$ r0 i$ R! W
maincpu.ow@1234=4E71, ]* a: P. }' w B
在ROM地址1234处, 写入4E 71两个字节
$ f* x9 |/ j8 V- x, r
0 ?/ }/ {5 H( X. D maincpu.od@1234=600A4E71; s4 ?4 F1 Q: E! T7 _" Q
在ROM地址1234处, 写入60 0A 4E 71四个字节/ t) B" ^1 |, `: c
- p7 g( D3 t' m/ n
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
m: F# M. t; A! i 5 _5 ~! F( g' T" L
5 \! v/ O0 @3 o7 u
其他:
; K$ ~. b" V4 V+ |7 B' t+ _# P4 c dasm 输出档案名,地址,长度: ^; u0 V# R% _+ K: j. t) q
输出程序的反汇编代码
7 s! N$ ^/ X+ A8 y( w 例子:* S% {1 U( x& E8 V
dasm 01.txt,0,100000
1 k5 T6 q: ~: x8 n) c8 @( m' ~4 V 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
3 A i1 t. u/ n3 z6 T7 l+ }, q9 Q% v! ?5 f0 B
softreset
* O% G9 v. S* `( L* u 游戏重启, 但不重新载入ROM
! }+ w; [5 b+ o) S+ E; K* [" n9 G
hardreset
8 A% S$ i6 T& ]1 ] 游戏重启, 且重新载入ROM+ p: e- `( [# v" U9 _
7 H* L2 B5 M1 A! C" N+ C
snap xxx.png
, q6 f6 f( K5 W3 {+ q. A 截图为xxx.png E4 L& w D1 q3 N
; ]" j* J" ?+ ^& b* `- I/ J- D s
b! M& v; s+ H6 j4 t; i5 e- s' e/ S
" v0 ^7 ?5 I3 t; @ T1 o
8 z7 E2 K0 H0 j. E, D) y# U热键:9 p: }, k6 D* H% O$ A! f/ w
~ 中断游戏2 E. U- g3 T; p7 t& @% z3 L
F5 运行游戏
1 B1 @9 J" R: k/ Y1 ?# L F12 运行游戏且隐藏调试窗口
. x2 P) a6 V$ J5 d, I' `2 K F11 步入, 单步执行, 会进入子程序
2 n' \( E: Q) O8 _6 p F10 步过, 单步执行, 不会进入子程序3 A; q' V' g) Y4 G9 Y
Shift+F11 执行到子程序返回5 O. u# X. N8 ?: S0 j
Ctrl+M 内存浏览窗口; ]7 }5 A* @& X; e
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) a& [4 s' W0 O
9 s( k$ A% ]% P. K{:4_94:} 9 c2 T7 x4 c2 A6 m% ?
: x( ^- a! n$ E: V
|
评分
-
1
查看全部评分
-
|