签到天数: 2005 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。, n& I& ~% I' E$ I8 K. q
$ o/ V0 V, |: P$ K% w
(1)如何加载ROM
% h8 ~. H6 Q5 s' Y p3 K5 N# s/ s4 z, N) K8 X
先说说如何加载ROM吧
8 X. c! k1 r" _% ?# ~2 J
. ~( ?4 A% H( x' L以MAME 0.148 DEBUG版为例:
3 P1 `# u0 p& M- ~" [2 R2 J( r6 C$ h# V6 K9 F9 ^& _
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 k/ [3 T2 l0 x/ R
c* d) v+ ~6 l注:MAME官网的MAME是命令行程式,没有GUI。
4 H7 q) j( F! v2 S9 o3 x1 z7 z' P
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;% o$ G1 A) R9 q4 X9 a/ y
/ g. X8 o1 \1 H+ P3 g+ p2 M( z5 Z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:' r7 D4 Z8 i: z, G5 x5 @; I
6 Q, v- R& H' e; O
d:回车& n4 o7 w3 \7 {4 x; O" m
, h& j6 A1 g1 s; T
cd mame0148b_debug回车# k x q& | ]* V
7 h# q9 a: b" s3 x' y' _. t
如图1:
0 u% `- l% e4 {: h, o5 `4 t5 d! k& s3 A- L8 i* z' ~/ a8 r/ x
9 F8 V$ F/ M6 Y4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
0 R0 B; v- N/ V9 ~; a2 j- H* |% t$ q
! [9 j( {+ ^& E7 O4 D# X8 f$ s& A5 m
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;- Z- n* s; k6 `3 a2 Y1 }
@. i9 U I1 }6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! x1 v( V- K3 L. W% ~( |" j0 y
- g, a+ x: a4 B. H: x(2)如何呼出/隐藏调试窗口+ R0 d3 s+ r( N- O0 T9 v
5 L& b" [6 k6 K1 A. j4 V1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:% j9 ]! n0 H! y; Z' _, e4 d8 ^" W
" q: i( F2 J* g& Z* b" Y ~& c3 e$ c) R; H5 T' W5 ?2 G6 L
$ D! x: u9 i6 `% U/ w2 R2 q( _
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
( Q8 j7 {6 u' q1 _$ L3 H2 o( c+ {) s; B0 @6 ?, z2 Z
1 k$ _6 S0 G4 T5 n V Q1 t
, g2 x* v+ v$ f& t3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
* D4 T I7 [$ c/ Q0 J" u8 J1 ~+ c8 b# R% V1 v
(3)如何下读/写内存监视点以及程式地址断点3 v: s& m" E1 i7 h4 n
C& c- {; ]; U" E. x& d
先说说如何下读/写内存监视点吧
; i0 q6 `5 I6 I3 @4 {4 e b# d" j) F; E3 I
监视点命令格式:wp <address>,<length>,<type>,<condition>
3 U: P( f/ ^ M
( p0 P1 V: N& c* n<address>是地址
9 k3 q5 z0 V6 \: z% K; l% s( ~- i/ x6 p& `6 V$ h4 L! J
<length>是数据长度,长度必须用十六进制表示
( B* `& r4 k: Y$ q) i
' h, r6 {$ @7 w. r! y$ p6 a# d2 m<type>是监视点类型,r是读,w是写,rw是读写
. B. J) u8 `; z. }- [6 s7 d; c) \; ^, S/ D4 j/ O
例子:9 b) v$ c: H! y2 `7 \4 w. d6 l, H
% a2 w6 C1 k& @ H9 {# U
例如对ff8569地址下写监视点,数据长度是1个字节
6 m" \7 P0 D7 ~- N, C, \( Y! d8 G- C* u8 Z: W* s8 }0 ]/ r
wp ff8569,1,w' q* L2 N4 l1 W- w
2 j' S% J( F% b2 t+ t* L例如对ff2235地址下读监视点,数据长度是2个字节4 b1 E6 M! G- H7 |7 t4 B# G- T# a
3 \) S8 y! y: M4 X* a h9 nwp ff2235,2,r
- c* T! H T# G& V+ t$ W/ P! V- b) m, I/ @3 |8 g% _( T
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
0 s9 h& m' r' W( {# E* X X: f
% Q9 \ F6 Z) L* g7 q+ ywp ff7533,1,w,wpdata == 0
* j u0 @/ c4 _4 ^- V, J' X1 Y0 p# |+ N. u1 U* D* b: I2 c
以龙王战士日版为例:
2 q! _/ N: \0 E! f$ ?4 v8 q+ H4 e
7 D! e: t) R9 O: Y/ }, l# q1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
+ r5 J4 z2 _' Q/ G3 m. d# E0 Z
" V' g/ u, _; H8 S* y5 w
( n9 F$ c8 f8 q4 Z0 n {. i/ ~2 Q5 n" @( c- j* D
9 O4 p2 x; m9 k+ e3 _2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:8 g, G+ H, _/ R U9 p: x6 {
6 b) n3 L# ?, J, b& B# {& v5 j3 a3 c8 l% H" g3 K) l
! P/ t& ~7 W+ P) |; _
接下来说说程式地址断点4 C" {9 d+ l6 R `
9 s/ `+ D) U' b( u+ T6 F& ` a8 e1 c命令格式:bp <address>4 Y. ^; @4 Z% q5 L4 ]' ]
6 R4 G4 R, I+ N# H3 k! w% [
例如对000488汇编指令地址下断点$ @/ m" _8 _; a' {, L# x
$ j! d) I* z/ S. t* Jbp 000488 B$ t- N' ?& \2 ^5 H. _5 V1 _5 e; @
7 z( F! D5 `4 Z/ _: u
当程式执行到000488地址时就自动中断
' ^# K& q* q7 p+ G% A3 K3 o0 I l9 _& f& ]; N! [6 a; j
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
1 I m( w. c" I" U! p5 ~( ^# b1 D6 i
有错误请指正。
6 r( H. [ P( @$ d- R3 R
2 {& k. \, Q1 z4 j1 k$ c补充一些命令:" A0 g/ s2 N$ G0 ? \! f
+ O/ j! Z' a) s3 H' D/ Q$ D"wpclear" 清除所有监视点
5 R$ f. h7 Q# q' y, R# h) w2 b"wpenabld 数字" 开启监视点& c' z2 L3 V' z# [6 W6 K. D. P
"wpdisabld 数字" 关闭监视点
! g0 O1 g" K# z3 u"wplist" 显示所有监视点# d8 j( E c* t% B
* _* T* H* R M1 l( \2 ?2 m
"bpclear" 清除所有断点: o3 G8 h6 _% Q* g$ E3 a) ~
"bpenabld 数字" 开启断点
/ P7 v$ Z5 z' T' Y0 H"bpdisabld 数字" 关闭断点
2 u% b) U- E, W/ K! I3 B"bplist" 显示所有断点
9 W) O W3 B' |- c$ o |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|