签到天数: 2012 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。- m+ t8 D" A: P9 Y+ j+ H
, T' A+ `2 T2 F n* J6 u
(1)如何加载ROM
: [$ Y% H) ^; G* t0 l8 `/ A4 u+ D' l4 E7 E Z( T1 A' I7 J- {
先说说如何加载ROM吧
$ Q# v- d1 ?9 Z8 B! w A+ g" J+ I9 d: V; W% t8 w) }: G
以MAME 0.148 DEBUG版为例:
$ R1 `& N6 u# J" Z5 W/ J/ N! A3 w0 x) V4 Z) m4 p
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( X# `$ U" D7 U, E: T7 `$ W1 G9 l t8 \! U) ~8 p
注:MAME官网的MAME是命令行程式,没有GUI。' ^2 M3 Q. ~9 w8 j1 @/ k
2 R; @7 }. Z3 N9 n7 T2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;: z" L0 L' E7 _
7 U) Y) y/ F* G' h A3 J( s* S" M3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; N( W7 d* g/ _* K
9 e# b: r3 {, u! A4 Od:回车& `/ X: h% O, C4 o5 n
% h+ d0 @' o7 z' _ ncd mame0148b_debug回车7 z4 A' w4 m& p& L( I* H
F2 U, f7 X) u1 }
如图1:1 ?' j7 t) v4 p$ X
) `6 }% Z+ ~2 C* W' }3 b0 z
8 z2 o# Z* ^+ j: q8 P- _4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( A( Y& M& S5 x! t! s7 p
( ]) ]6 x. O7 S4 Z* S0 p% ]+ w" s
+ ^: b4 _. D' _: p
9 _9 T: I) E& G: c9 s5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 s+ Q# r) p: X3 e& f' x
! {* d; i+ Q! h* p
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
' [# ~ q: L. u( a% V0 s8 @7 C8 i) W3 Y
$ P! F, C" a" v5 d8 b9 M(2)如何呼出/隐藏调试窗口, q4 C3 l E* S' w, b3 H
) M' }. l5 ~& ?, P4 s5 ^- D# ?
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:8 F6 b% e; o$ N% k7 D, `
& S4 S# ]" A; @+ h
' h: V& k: Y8 \. W: C# z* k6 V! ?
$ m; j1 R2 ^" Y+ V$ b D# d
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
5 a/ a4 a+ m* O& h
7 Q, O) E1 T; J5 i0 s
6 } I- J$ T( r5 A. h
6 X a; s3 F; f! `7 f3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。. `. v( Y% h( Q( W& v2 a
* D) O* @% [, o" m" G(3)如何下读/写内存监视点以及程式地址断点
$ d6 d1 m# m6 M5 Z6 h9 g7 H7 S3 t3 F: _5 o( M% F1 G! \! v% @
先说说如何下读/写内存监视点吧
: C0 _& r# M& U; i
v" I+ G0 l0 a- I+ _0 M监视点命令格式:wp <address>,<length>,<type>,<condition>0 m/ n$ i) L7 r1 I% J3 u' M% K
$ {! a' y9 M9 m
<address>是地址
, e6 @$ k& W: v4 ]" O2 S5 L f6 d
0 p/ G1 b) s: y2 k* x<length>是数据长度,长度必须用十六进制表示+ f; ^" V* p! S3 i3 r: W
/ }5 V: r2 \- [, g& a2 [/ r<type>是监视点类型,r是读,w是写,rw是读写3 s3 X+ t$ W& l7 w: F& t
8 T4 r' Y5 F- W( x5 U7 q! E2 B, T
例子:
0 q L% N F, Q' E3 W+ X+ U
4 j6 D: x( }% w& H例如对ff8569地址下写监视点,数据长度是1个字节
. z7 K0 X m* f2 G1 @, j- U, Q5 a
* {2 p3 [9 V2 m1 {% M# ~wp ff8569,1,w$ {4 F4 R6 V2 i$ p3 P
' X+ W% K6 r u
例如对ff2235地址下读监视点,数据长度是2个字节0 j3 I0 w2 o" o9 r6 S4 b5 a% K1 t) s
3 b" A0 ^+ G( f/ F swp ff2235,2,r
$ |% r9 D; ]( p) T3 l2 H' G( f% x) h, {1 c; f
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( z& c- K: Y$ s% W1 H& V6 v5 p
' N0 `% ^% p5 J' V$ L. Z1 m/ G, dwp ff7533,1,w,wpdata == 0
- K8 h4 N+ {2 I5 n+ G8 R1 P( L- U# n/ u5 J V1 w& Y& E
以龙王战士日版为例:
2 h% V; |( {; G- f& h
. P; K. s8 I5 ~" i1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:6 g. j- O C _+ ]% X* z" C
& Z9 z/ C9 X$ H/ A$ x
9 y. h2 q [: s8 c
0 ?8 v, Q' @5 N7 g" J1 z
( N+ I# B4 [: ]5 V" P2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* w# W M1 J) |
3 k) q5 G( ?! w8 ?' z) r# I b8 W9 {! W0 g+ E' j4 B
+ E0 M6 v5 v7 G
接下来说说程式地址断点
, [) V5 t, P$ v( Q, m! {+ n1 t+ S) t" ?! c2 g
命令格式:bp <address>
/ Y# |! P) f1 v' x5 y
" ~* z( t4 Y" u t% I4 W- S; G( K8 C+ A2 d例如对000488汇编指令地址下断点! u/ x' G, U$ V2 y7 c8 W2 f
& D/ c% I# G% Q, `: [* v8 n
bp 000488
% b' J! j& s1 }! l! `0 Z( y0 J% I5 S8 i/ q8 f, P7 k& j
当程式执行到000488地址时就自动中断0 d+ q$ u7 B) q* c V- X- J% d$ d
9 A; d- @2 P; E3 Y: D$ E更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
( Q6 a8 \# L$ p [- I- P* g9 D# E- ~7 F$ d* R4 G' j6 N8 c: n
有错误请指正。7 G' Z6 \/ ]' G3 ]- t4 Y
! n2 Q( L" p# u# e- |
补充一些命令:4 O+ l" d+ u# H! |4 [& z
# B- e1 l) ?( g; Q# h$ G
"wpclear" 清除所有监视点
% d- b) y3 `& C& A( |"wpenabld 数字" 开启监视点
, }3 `* }9 ~1 A; Y7 C"wpdisabld 数字" 关闭监视点
) E }4 L( U4 u$ r$ h"wplist" 显示所有监视点* X K4 n7 P0 N7 u6 S+ C
! u. f# z) W# n"bpclear" 清除所有断点& G1 M( ]( V" V: p q5 X
"bpenabld 数字" 开启断点, ^& Q+ N7 u7 r3 ]
"bpdisabld 数字" 关闭断点! ^5 J0 F3 z M6 a! K" w4 C; ^
"bplist" 显示所有断点8 Q0 w& s2 g: P2 b& _- N, n, o
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|