签到天数: 2112 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。6 n# @4 ]" t. X, x" }1 i6 K
3 d5 q( b i: C Y/ q, v5 J6 P1 C
(1)如何加载ROM% e7 Q- M8 `" H: {4 o( |; v! \' }: Y
, v0 F5 p$ H @: O% x
先说说如何加载ROM吧
/ K- {& C* W. W) _ N# \
0 v A, {5 i v( D1 }1 p以MAME 0.148 DEBUG版为例:
8 N! X! ~+ j$ g& K5 w2 N4 t7 K$ u! w7 ]/ c' T- u. f7 _
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 C$ }; v0 |# Q" F
6 ~& w! j. b; ^- G注:MAME官网的MAME是命令行程式,没有GUI。
( N6 H9 [. H% X3 M' J7 r+ w. e
f' g) t5 a2 m8 `! H2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;/ X- ]# L) c y. |1 b- S
0 c- ?2 U( G2 D6 i2 M, Z4 O/ g3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:! K% n8 C* u" @+ v
8 S: B% {" P0 H! p5 e# t0 }! Y, t8 Y" Q( ad:回车9 S6 B; p V5 t U2 m
6 j( q) P* P8 z: F
cd mame0148b_debug回车# X: N. v( J- A
6 i8 h, Q& D1 x( _5 h' |# {) }如图1:& K" z# I- N0 h, \# [
0 w" n o! \, B' l/ O* z4 Z h
& S' B e# t+ k. K4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
1 v- W) [4 Y. o* O. B- A
% c! C$ V) h) }/ Z
- U0 O+ R5 b3 \$ M2 } X+ M7 S( Y
# E8 }+ S2 H5 ~) `5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;( {# g$ |6 E2 l
! G! L' N6 N0 r7 A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。4 |/ J9 H. U* Y& r
+ }! }, ?9 N' M/ X: l(2)如何呼出/隐藏调试窗口
; c: [* n- e& K" T9 ]8 N; e2 I
$ J" S) |$ h" E8 F M) K' D8 }0 ]1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ z4 B( F8 r: Y5 A' w
. E- E% n" C/ N1 N' c9 @4 Q; A, L
- L) A O6 v. X. B; M( O7 s3 |4 R
0 T. } C! U6 Y0 B7 @4 t+ j2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
& ~% C/ ]3 V' U# |& B3 R
% _0 c$ u& F$ F0 U# ~. C4 C0 L9 j" J; s$ f
2 a# p0 L6 \. ^3 L3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
, |' h" b; ~; a+ y
. T: K+ T( a+ A( }( {# D(3)如何下读/写内存监视点以及程式地址断点% d4 f; M' @8 l! u8 j
- V1 c6 T! X; H- q先说说如何下读/写内存监视点吧
( v( J" c: h! U+ n
) \9 D1 Q. A2 N监视点命令格式:wp <address>,<length>,<type>,<condition>
6 X' V) W- \; I1 Y( P- J/ ~
# T( E/ C8 F$ }" ]<address>是地址
6 I @3 Q$ v6 R3 k( p* Q8 ]% T8 Y0 Y: U# T0 R u4 g4 N; }, k
<length>是数据长度,长度必须用十六进制表示/ `: S6 I6 \6 }
. W% k% n H! c, a5 _ G
<type>是监视点类型,r是读,w是写,rw是读写
0 ^* x. q1 a% Y' ]6 v; B3 x9 ?; k4 ~8 j
例子:* M2 E& }7 ]' i
[8 ~- g6 ^- M+ N* S% v
例如对ff8569地址下写监视点,数据长度是1个字节
- a" u; `8 x6 W {1 l% j9 ]. R1 g2 x {9 T
wp ff8569,1,w
- M7 J& d4 J: ]( M0 c& W* \4 m
! V9 o: c4 C# e J! V例如对ff2235地址下读监视点,数据长度是2个字节4 ~, I3 n' t. |
9 i$ T9 ~# A& m- W8 [- G
wp ff2235,2,r
/ E+ d* c" }! n5 `! e( B5 |
% W+ t0 l5 |" f+ I( Q4 y, U例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
- V/ j+ I/ q, h" U
( }$ v$ Q' Z) C2 bwp ff7533,1,w,wpdata == 0: G; A j6 W& z, N5 s! S% d
( q, |7 v8 l- C以龙王战士日版为例:
7 ?/ \* n ^7 s( B9 D
0 V8 Z6 S+ j( [6 A: }. ^1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:7 C7 c% f+ A! m
; c% z! y/ e9 v: q- D& d2 ]; j
1 |5 f1 V2 r7 H3 o$ f6 w
" M! F! D( H6 p" U7 d
8 i. z; a0 `- U; O2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
# g+ d) S4 s2 Y& w+ ~6 V8 N( E/ C' o4 S, n- y+ J# m9 h
A! w4 Q! k& T- v* }- w0 v( E
! s' ^- z% ]# ?4 w. A( r接下来说说程式地址断点 F. B: P% |- Z! w8 {
% C! R4 x( ~, h4 K% i& q' _命令格式:bp <address>
4 U u1 z5 g& B( i- X
: Y. Y6 s+ I. O2 T4 U: K, ^% f+ F例如对000488汇编指令地址下断点
. f( P6 z6 Z, i9 e$ Y( W3 a! T
" ^0 E( r2 k D; R8 Lbp 000488
j+ g. f) p7 G- r2 z# v6 y+ o, }! o2 W+ K
当程式执行到000488地址时就自动中断
" Z9 m: ~7 y& T
1 H8 _; Z. V: S* l, q更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 j" B! h( k7 h# B/ |& v
+ n! g. N: H3 K3 W/ _有错误请指正。* j: \/ i! W8 v6 b% V# [* J
/ ~; S; J: B1 Y) N! c补充一些命令:' G! X+ X2 ^6 v" w/ h
+ t) B/ J) |/ x0 w% J"wpclear" 清除所有监视点. U$ h, u4 K- d& j& m+ n6 `6 x2 D
"wpenabld 数字" 开启监视点. {& I) p- _' E6 ]& c9 T
"wpdisabld 数字" 关闭监视点( g4 c9 @6 K) A/ S% W
"wplist" 显示所有监视点, u# a) v3 S' X9 ~5 q, d* k
& o; K- Q' s' z5 j! s; Q"bpclear" 清除所有断点) y, X" b/ f' x1 y, m
"bpenabld 数字" 开启断点8 S( d* ]% B5 R5 D5 f6 I
"bpdisabld 数字" 关闭断点, t; ^3 T" F, q/ Z; a9 I
"bplist" 显示所有断点% B) r: {0 m9 Y
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|