签到天数: 2169 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。% J& c: W( D4 A k& V8 r1 j
+ w; O, w' ~2 T Q7 j# q" y& E(1)如何加载ROM
0 A+ Q! F) I" t
8 \- C9 n" X7 P% X% ]9 S先说说如何加载ROM吧
0 |3 c* J: i: \4 {) T
9 P v. a* O* t! k以MAME 0.148 DEBUG版为例:
5 c0 p4 {6 @( M4 W
& P& ^: u# K+ l% W" H1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
: x$ N# L2 O* X j6 m$ |; c Y# z2 a( n* U
注:MAME官网的MAME是命令行程式,没有GUI。
! U! m" M. o9 Z' v" Y# P7 R3 S( g1 p4 C4 y Z, B
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;. w4 V5 l, X( ?' i ^; A0 e
. ~; V. }& F. S0 V9 [- m* P+ }' M3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
( d P$ j+ k* d- J/ ]& G0 l4 d+ g' l
d:回车( }8 I9 x% L5 ~/ \ O/ b
$ \* p7 m; E7 P6 ^& d! ccd mame0148b_debug回车
( L5 W5 X' d0 }: r6 \5 V. M! @: h7 A, c' R& l$ u6 u
如图1:
b2 ?& E r/ V4 z
- U; y, z! w" p* o3 ^3 e+ g$ z1 L$ ~1 c- P( N* G8 p3 o
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:" k* @: z$ p3 w( S
% R* P# }! y F6 i$ ?7 y3 C2 U1 }. g- V! t2 {1 a2 ?! G4 @
( v2 E1 L8 ?6 |) \' E5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;7 j" @9 X: I% u: v9 x6 {
$ a5 R' Q! M% l& `0 K7 |
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! |4 D8 G; ^ J" v5 D3 d& X3 ^; J( f2 b+ S0 R/ T" U) ]1 R V
(2)如何呼出/隐藏调试窗口/ M8 W$ f M+ Y
: v/ _2 M `, j8 t) _
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
% c2 U5 n7 c) C
( N! D0 `7 ? P
; C6 }/ Q. U! p* Y4 K2 W/ y z6 D
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:& G" p Y( C9 K, d" t. y/ k8 }& q
& g. p, j: j: f/ p5 J
+ f( ~, A: k( ~& _
# B4 s6 j# I- H) b
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
8 F3 S6 |$ H; z/ {3 y ?" z% V8 [. |& f% w% a
(3)如何下读/写内存监视点以及程式地址断点" v; W8 O; P+ m; {
1 I) Z& w! N4 W( Y1 m" l, n
先说说如何下读/写内存监视点吧
- H% I; I$ M$ R. z( I3 t; @1 F9 |( i7 C4 g) O
监视点命令格式:wp <address>,<length>,<type>,<condition>
+ s' _7 E! k" G& q9 E$ F0 {- Z0 Y5 x, v, L4 j; W7 U" B! j" p
<address>是地址
7 m: i8 g' a Y l' t, |4 n2 a8 n+ k. }9 R7 I, S
<length>是数据长度,长度必须用十六进制表示/ I) ?1 J5 Z7 J. D( @
: ?) T$ d" [& u
<type>是监视点类型,r是读,w是写,rw是读写
. Q8 O6 R, U: ~' @- n
& q% Q' k) ]/ h例子:) g! D/ e4 [4 C
Q' n4 y w, p
例如对ff8569地址下写监视点,数据长度是1个字节. `# _3 m+ ^7 {5 q; I
* W2 U/ B( j' S% [+ A1 m6 wwp ff8569,1,w2 E q+ g; M9 M0 Y2 \/ ^
( X9 g0 B1 Z/ @ K) j
例如对ff2235地址下读监视点,数据长度是2个字节
9 C) a+ Q% g9 F, [5 L9 D {7 m- r0 H. ^( J6 @
wp ff2235,2,r5 y- {1 w$ r% W& [) p
% [4 [. D: K! C# q! d. M例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 A4 a& {5 S$ b% | }$ i6 V0 F, F& l- z/ o7 U, _/ H! _; Q8 {1 I* c
wp ff7533,1,w,wpdata == 0
f: ~6 ^2 o1 n& C T. \+ U/ u1 r' `2 e0 y: m
以龙王战士日版为例:. u: `- J# j% W/ w( p
* _4 L% x* Q$ p* I0 i) |
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:' H% D& t0 ]+ L5 Q4 m' d; e0 z
2 z4 l, I$ C% e! t3 G* x' p# z0 p5 ? Q
! h2 d7 k$ k$ J* ^. u$ `! O
' }5 c" i9 l, D8 g: W
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:, v7 J9 q' x) U. a! u: \: c
: ?8 o& s- m9 A& e) d8 l& n1 X
( j* G: P- e. Z M A* T& M- k4 G# K/ h F1 `0 L
接下来说说程式地址断点
/ o) }# N3 C% h$ P2 U
2 |4 V" i) h$ R( q: c命令格式:bp <address>
5 D8 d! m/ U& x" e7 B7 T, P$ M7 P7 n$ d7 A9 Z4 j9 x, ]) ?1 m
例如对000488汇编指令地址下断点# N, h3 f0 r Z: C+ Y- @! j
: t0 D# l- I8 J7 w+ R! o/ d4 B' Lbp 000488/ _% v9 m$ g( ?- q9 c5 n5 f
" V( O0 r" X9 y! L
当程式执行到000488地址时就自动中断
( D1 m. X! y9 B
6 n) ^2 {- F: k: k. p) y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
# e" R5 c$ `/ U5 ^& V; C, z0 {3 ?7 C( a% y; K) C
有错误请指正。
! p0 `6 Z8 W0 n. c% s ?- e& H: A1 y9 W7 g* o- B" m2 K- Z, k
补充一些命令:) K1 E- X! e6 M% B
: |; u2 t/ y; b* E# f2 {"wpclear" 清除所有监视点& Z, z! p( w- E: E! b$ H
"wpenabld 数字" 开启监视点
; P7 N S& l8 s$ a7 ~0 U"wpdisabld 数字" 关闭监视点
! l$ @4 q4 H A: {! \; K- v9 ?) u"wplist" 显示所有监视点* e* r) z) y9 {8 ]3 p* b/ F
% u. P* Y- u) d* n8 m Y
"bpclear" 清除所有断点
. _# q1 {! n" c# O0 j"bpenabld 数字" 开启断点$ e0 |# W( w$ i6 I- y& \; {# z
"bpdisabld 数字" 关闭断点3 [. @( C7 p/ A" z4 W
"bplist" 显示所有断点
: j1 _# T$ X, Z7 g4 D |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|