签到天数: 2064 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
X4 ]. m6 K) X7 P R3 E. [1 t. C; R+ E3 x/ M+ D P
(1)如何加载ROM
# _9 Z$ Z9 X+ ~1 N$ F5 X& [& @: p# a6 p* D. J# f
先说说如何加载ROM吧! j1 q: X6 c+ J: }+ Q1 x
- d5 A3 J% f3 o* w, j: P( L以MAME 0.148 DEBUG版为例:4 | M- r( A% l* X2 _2 Z1 C
3 q; q6 c/ A3 _$ ~5 L1 F1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
- G3 [7 r; B8 K4 b, A7 i
& \5 d1 i8 `* f# U% g注:MAME官网的MAME是命令行程式,没有GUI。( H2 C7 g0 ~& A Y" F2 s1 {
1 J; d% H: G0 ~, @. d2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
# z1 h5 h- Q% p2 ^3 K' a/ P$ V4 e6 n- X! o1 Z. `7 k1 d
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 S) E7 S" Y. e$ b R& j
1 w7 N2 W8 v1 U4 t3 rd:回车* c, U5 O' c8 Q5 f# y9 W2 Y. ^$ L
1 g/ m$ {) x! a/ B! Acd mame0148b_debug回车
Y, I: N$ A+ L% V
! [9 R- i2 g" B' O' D2 _' W如图1:
0 K7 C- N$ p% v4 @, o; A# t- n; O( B9 O
8 @* v$ W# y/ z+ l3 P4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:7 f2 c6 Y V+ c* ^) t' h/ d N
7 E+ m7 e p# {) ]2 b, l" L& q4 \: S/ _* u! p4 T" O6 j ?
6 @( j4 _0 M4 Y" |$ o
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
; `3 A- H! A+ x/ @! u9 Q# N2 p5 |; A, B' b
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。" {! D0 v, d% v& D. V0 y* W8 S
2 Z# W4 Z1 C- g
(2)如何呼出/隐藏调试窗口
6 ]8 Z5 D8 R, T: r0 o( R+ H7 t! N# p8 F9 H6 _
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( s* `: S1 U4 Q% d! b i6 N0 D \+ e
: [3 b9 r5 b4 K# K5 y
2 l* S D$ q- t! T e) Q
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:- ?. ^1 |/ _5 c/ ?# L
8 B: ?2 n: @9 {) l
; O* i- B) n* L9 R+ z! a9 H: @! A
?0 U5 ^! o3 Q9 x! @7 M z E% z5 }3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。2 o0 v7 @/ D' Y' X* |% O
$ f0 j' Z. P! o8 U8 O. g2 Z(3)如何下读/写内存监视点以及程式地址断点
4 E: o6 B, r! D4 M
4 }. S( B8 I+ K6 g* F2 S先说说如何下读/写内存监视点吧$ Z, W5 p2 V* g$ S! n) [) S
9 x% W) b% t- u3 `: u
监视点命令格式:wp <address>,<length>,<type>,<condition>. I+ g8 i2 ^) q5 B- ]
( ~9 u3 M/ o+ W0 B
<address>是地址
. F0 b- }# }# z: `5 G! {% Z- x, Q" z
<length>是数据长度,长度必须用十六进制表示
4 ^4 V) [% N: g; P: r" @" @
X( I9 N& j) ?5 s" g3 h/ Z<type>是监视点类型,r是读,w是写,rw是读写
$ s1 j; ]) M( g. @! F: m6 c4 i
* E- @+ ]2 x, N, j& F3 ?例子:* s$ O2 |" r8 l0 y
- j0 s' M( D# _8 r/ y
例如对ff8569地址下写监视点,数据长度是1个字节% H8 c! c$ p' \, `3 x5 b, x& n' p D9 @
# z: [/ {3 f& _8 l, x0 M* X: wwp ff8569,1,w# a5 U* C0 a- z
' ~& F3 ?7 C: x
例如对ff2235地址下读监视点,数据长度是2个字节
3 e* V( D1 k) O) [4 I7 J8 x: x, _' d" ]) ~ n7 S& ?
wp ff2235,2,r) ?+ H; \! o+ H1 w/ p" b
- C0 j$ c$ B; f9 r B+ c
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
& D: H R& q$ q4 j) {/ S) e
- b& C! M. V3 gwp ff7533,1,w,wpdata == 01 M7 v+ W* a6 G3 z
+ r; A$ g+ b3 Q& b% S5 D以龙王战士日版为例:) Q3 u4 k6 G- V
' U6 l! V# l4 o& ]7 I% ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:2 {/ ?, Q1 K V6 K7 S2 Z- p
9 w1 T3 r' `. l, }6 A4 C5 d
/ \( F' j0 p3 a# Q/ V" z
/ s: ?4 S& K* w" l, @
( P1 _( b4 ]$ m* r! W0 k; s2 d
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:9 v1 r- \" x! }6 O8 C! W$ H; I. G8 O8 G
* F# F- M9 j; @
+ i6 M. S7 b+ [0 w3 d1 \6 G
/ V' l7 G7 V: q9 G1 } |
接下来说说程式地址断点# x. A5 Y r2 {" }* F
2 n0 L% S( m/ \ k9 _6 k
命令格式:bp <address>0 m" a, H: R$ K. V* @
; i O4 d3 j. |. L4 m- b例如对000488汇编指令地址下断点3 N9 T7 b& K7 P/ z) U9 i
9 U1 m5 {- ^( r4 L- u
bp 0004885 ?/ V% c; L3 }' U
5 [* d2 Z% z" p6 H# g
当程式执行到000488地址时就自动中断
8 N+ i+ a. D m& i8 T6 W' z, ? T$ h: p4 q y* z" @
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看4 {% U8 H1 _8 v
9 E& p- \% y& x' ~8 b; b
有错误请指正。6 }4 E; j6 A: P; E" i1 |: r, d5 B
- Z7 u2 G/ B2 e
补充一些命令:
) ~7 U6 H( K2 G8 ?( _
- h1 w% c8 q: j; J& x+ ^"wpclear" 清除所有监视点
3 M" g6 k* J' L% l; i"wpenabld 数字" 开启监视点
' ^. e ]5 ~$ A. q9 x% a# A"wpdisabld 数字" 关闭监视点
" }/ q% _+ ?5 w$ t7 v/ l/ n* e8 F"wplist" 显示所有监视点
3 i. ^ J. e7 |4 M) K5 i5 C" y; u6 s! M$ {' s; K5 I
"bpclear" 清除所有断点* @4 `# F& L+ d1 A% K7 Y, y X* P
"bpenabld 数字" 开启断点
: a3 [' A* k8 x! n0 \: x% `! j"bpdisabld 数字" 关闭断点
) o+ e: H' Q7 g M; ?2 s"bplist" 显示所有断点" e; o9 s+ l, [: H( K& C u8 t
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|