签到天数: 2179 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
$ X4 W0 ]! |7 z- Q3 X( a, }" b
: @: B1 d' H" d- b# M(1)如何加载ROM! c2 ~1 e( m( X3 x1 r0 a/ X
6 T1 q4 @- `/ a* V6 p6 r7 |* F
先说说如何加载ROM吧/ {0 T1 h8 |' C) t) w5 C
, B' \2 I, @! b$ A: _
以MAME 0.148 DEBUG版为例:
/ \4 {- K6 ?6 |, e0 j& s) l8 x+ O1 Z( x
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html' W2 D7 `4 D, `" Z
* u, ^( c& i$ f* ~% Y- o1 Z5 z, {注:MAME官网的MAME是命令行程式,没有GUI。
4 |- `& R, Q. t& Q5 S! l o' e9 u" e( [6 i$ i1 r
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
( C8 }8 N- M6 c2 m& V3 v3 G0 W$ H% q# n
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; c* w. g) w v: A, x) z! d% |- N: a3 D1 `% m% C- g. w
d:回车
* f/ h0 m2 r/ W& p6 u3 x; Y9 e) W9 k
- }! V1 W1 D1 Mcd mame0148b_debug回车" O6 Z$ a- y& g' ~' b; R+ W
) [) X9 q i2 Y4 l( `$ r如图1:
( u- ~7 s/ W2 z8 A5 h5 X" H& ]" z& p! {2 v
2 [ t, Q/ b0 {4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:6 ]! s' @& D7 S8 F+ o
7 o% W" r* \ D5 E7 x9 s
( n ^% d3 j" J# C
! k, F2 P3 @4 R* z1 H! A5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;! f1 s) w- w! o! {+ W* T- d
! Q, P0 u/ f+ `2 z1 O, q! o8 K' A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。. O7 ~# V0 K8 ?) J" _; y( n4 C" Y
$ A s' \4 o" v W+ U3 h
(2)如何呼出/隐藏调试窗口
2 ]& D2 b0 o# ~& a4 G# d* _ `0 f5 s6 T
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
6 I4 y, b9 A' `- R; L1 h7 u3 L% B0 k, `& g9 p; R. R" ?0 W/ m
( E5 o) o8 K) T* B
7 X0 z1 W d: C* Y: ^3 k/ C2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
$ M4 d" l; S9 q9 @1 z2 n1 x8 c# ?5 \
: B* p/ L# o( a4 g( z# l/ O! i) Y
4 p a/ }- E" `3 T/ S8 s* X) ^, k
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。2 ^ z$ h$ r$ F( b1 f! p
9 ^, r5 b: T) Y' W. j(3)如何下读/写内存监视点以及程式地址断点
+ D" u% Z9 k- }6 d ^: l
$ W0 m4 c+ S& C8 X W: i先说说如何下读/写内存监视点吧& t1 u" X2 z, q" V
! p/ m y% G9 h( A5 Y/ I3 g
监视点命令格式:wp <address>,<length>,<type>,<condition>4 h# J. c" p5 J" ? D( k
3 `0 H ^0 D; P W
<address>是地址
( [& g3 f5 O( ~ `! @, j+ k$ j9 d& q
2 N1 J/ I. E% m<length>是数据长度,长度必须用十六进制表示, a* w$ [3 E# e) T" h& \/ \6 Q; e3 c
3 v! Q4 k+ u7 B% I/ L
<type>是监视点类型,r是读,w是写,rw是读写4 K! k' K( E: ~
8 @. L) w% A; s" P; s6 _/ O- W
例子:7 z5 j$ _3 d$ w+ c( k- G: ^
6 `2 t1 j2 }5 a4 p8 M* A例如对ff8569地址下写监视点,数据长度是1个字节( u7 `' C9 I& U
& G/ Q6 V3 p: b- q$ w
wp ff8569,1,w
) H/ e7 M5 p" M" k }- Q$ B u, F
例如对ff2235地址下读监视点,数据长度是2个字节
8 Y q- b5 G9 J" ?. h( t+ }' t9 S5 q& ^) P/ ]4 X) F/ E; z
wp ff2235,2,r, O. v8 C$ H1 N% K* [: O! K
/ u! N! f% X+ i. E5 H" ?7 V; K2 q q例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
D+ F: w2 y6 Q% R$ x' G! b
2 A) |- d# l4 V7 _* Qwp ff7533,1,w,wpdata == 0
( ?. G$ ], N5 c2 U L8 R# ~" q
. \2 U8 @, ^/ l, l; `7 L9 G8 D6 G# _以龙王战士日版为例:
) w$ r, e: e3 ~* m! a/ V+ C7 [7 R/ I* `: C e" W9 ` Q& m: U
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
/ I$ \* t4 U( K0 @% S8 U$ ?/ g [9 Z9 Z
' v% U4 ?# |! l+ F
& d: @# q2 c: ?* n3 X/ Y; e
G4 E. Y5 ?9 O1 H d9 j
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
- l- g6 { k x6 Y( P7 R
9 n6 U8 z8 O4 _) W4 s
/ |5 \* @; ~- Q7 t$ L4 r9 k4 |; V
. h' c; V$ j% b( T' l8 [. E接下来说说程式地址断点
& m+ l, i& R" L; P1 w3 a
/ L5 ^) P1 j6 k' z2 X命令格式:bp <address>
& J' s4 l5 c( U+ j: p) K5 @
. |+ ^1 N* _% P. p5 {例如对000488汇编指令地址下断点
4 E$ L& \" L+ r
1 p$ z& U5 L$ N6 b+ ?bp 0004888 Z6 K% [; Z5 `9 L& @! C
! U2 Q% W/ F2 t2 M0 b3 }# r当程式执行到000488地址时就自动中断" d' T5 S7 J" b- }, U7 C# {1 i, `
" C8 C, d; A) @) Q
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
. }7 B3 s# t. @+ ?# ~
: x" A& a, ~, d有错误请指正。
- a; c! S* a2 d, S& I- J% s6 Y% ~8 M, n' |/ ^. ?
补充一些命令:
& I$ E9 V5 X0 P2 d1 b8 A2 O4 ]5 e7 w, t6 D6 [" Q, C) y! _+ z
"wpclear" 清除所有监视点: w3 ?) @% Y% l7 l6 J* c9 O
"wpenabld 数字" 开启监视点/ ~( F5 z5 O s
"wpdisabld 数字" 关闭监视点
2 f, y. g5 z N/ v, i' C" c+ G0 L$ O"wplist" 显示所有监视点) r" k [0 d$ {9 E
" s' k% A: o& s3 ~. s3 X"bpclear" 清除所有断点7 S& D- N3 Q0 _. B/ q4 _
"bpenabld 数字" 开启断点
# z6 G% v+ ^5 |$ u! g, |+ E8 ]& h"bpdisabld 数字" 关闭断点
5 T: |4 D% |& X"bplist" 显示所有断点
* }/ o% Q5 h }' m+ y. A- v |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|