签到天数: 2164 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。0 z6 K' F5 W: @; l, L; u7 r
9 ]( x- \/ r/ F, \, y4 O
(1)如何加载ROM& @: z+ n/ D) q: [, n
2 z& x- J5 I5 S3 r6 F/ L3 R6 i
先说说如何加载ROM吧
* }' r1 k9 r, e: e3 s7 D7 p7 O
9 B' D& k6 J$ S$ w以MAME 0.148 DEBUG版为例:" [# I z$ w! m
! w1 @/ t- q( r
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html, _( [3 X2 s& P! _2 C3 v
7 ]8 |' c) B" ^. ?9 u, M0 a7 h注:MAME官网的MAME是命令行程式,没有GUI。' `+ {+ C5 Q% W7 H" Z8 M
+ L" p& l9 c9 `! Y2 c4 h1 e2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;" U# o7 _" l4 T/ `2 _( e, C
! m7 [) ^+ G& O3 ^" ?0 v' c$ _$ s0 `3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
' V9 j4 v! {( e$ ]' I6 g$ O. X8 s# [- t# x) \6 S8 ?4 _( O& I
d:回车
# s$ z% _7 |/ h6 N
- Z: o% v* k* W0 y$ p% `3 ycd mame0148b_debug回车
7 K" F! _1 E% l# {' R- W% [: p" x$ j
如图1:! n0 b4 R/ D% w0 o5 I7 E7 M
7 t0 \+ o8 L2 d4 q- ^/ G9 I: Z
( k; k2 e" K, H! Q. X, T0 t
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
, F* L7 |& }5 ?9 {& ]% F* q! `: O& A! ~ g5 S6 G3 J
( s4 S; Z6 j# e- P6 g x$ w0 `
( S- }8 ^ ~6 ]) q' I" ]6 \8 a5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;+ S, ?$ k0 Y+ ~2 q3 f7 ?" n5 V3 X; m
& L7 e, ?; O: O/ b) e. s6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。* V8 \1 T3 {1 P4 a% L
" U0 d! ]6 b4 D$ y
(2)如何呼出/隐藏调试窗口
+ T4 F& E7 d& ]4 s& t; {7 d
# B1 s% e5 k* u1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:8 ` f' N+ |; c3 v2 q+ ]
, _6 G9 W* _- I$ e1 a% r
' k; B( g6 U/ |; v7 A: B) ^
0 B$ z$ h. U' W6 ^2 k* e2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! `+ `9 u6 V: g! ?; V; }5 h" k& b5 }4 S* Z* F% T' o
+ ]. z: R* y4 Z8 q2 x9 T
' Z+ ?1 @. y2 A8 m8 P6 z3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。8 f% \/ ~4 J8 g H
& p: E7 Q$ c! [+ v
(3)如何下读/写内存监视点以及程式地址断点
1 E' S. T* }+ l* H0 l& g. D. X! r0 C$ W# ]7 }% O
先说说如何下读/写内存监视点吧, p1 k, K* m4 C6 G9 Z8 T, _
) [0 z- }# l$ k N4 h监视点命令格式:wp <address>,<length>,<type>,<condition>
2 [, t4 v8 k/ p& G! f# U4 W# F4 F
; c8 H& h$ H( s3 _' N' q<address>是地址9 _( Y; d5 F1 \( I
) P5 m. E: p1 P* q
<length>是数据长度,长度必须用十六进制表示! h8 e4 D D# B# i
' I5 t; K& a. J7 S' _* Y1 }
<type>是监视点类型,r是读,w是写,rw是读写1 H& f$ T6 M5 s; U
0 R/ ~; H0 J0 ]2 i& o例子:
: v t3 q n E% T
) T4 f. e: i0 k# c- n例如对ff8569地址下写监视点,数据长度是1个字节
/ y# } u" ~( N6 e- p/ m
) X$ I: e# F4 H3 ]wp ff8569,1,w7 Q+ i h( r! M
$ d0 F: a' s4 ?( r& `0 w
例如对ff2235地址下读监视点,数据长度是2个字节% R1 k% S8 A+ W+ B
, W* u# q h1 ?+ E; }
wp ff2235,2,r
% X- {0 {1 _& m8 B
/ L3 D. i+ @7 u6 F; |0 m9 W例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
* T5 q( G4 I3 q8 D p- ^' G/ V1 I" s
wp ff7533,1,w,wpdata == 0
. d$ }& [: c3 X M
. |/ v, g# d$ u! `以龙王战士日版为例:" K [( x L4 Y; X/ ]3 {
% d. t7 { K! ?6 ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:! g \( p: b% @1 m
: i- B6 u+ a. P4 N6 e
: x$ \; R% [* K2 \
2 l( K1 e4 j* Z; X
" _" I4 V$ }+ J$ ]! K2 O$ Q2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 R8 i$ y e* S3 L8 i7 L; z
. r) g- \, {2 e$ U; p
) Y3 @5 Z& b+ }9 X, M7 U# V5 Y* x, [
接下来说说程式地址断点
, c. U: { n* P
! x" M3 b7 g5 l9 P! B, \. Z* M命令格式:bp <address>6 b: _) s2 ]5 q, {* e# f; T' E( K+ N
2 p! L& z V6 I例如对000488汇编指令地址下断点
* X+ L3 r1 ^) G% s) }- ?& G. }
, M2 x% w7 G* ~- `1 N1 M: i K- _bp 000488/ @2 t2 u6 G7 Q9 B/ Q8 W
7 \; ?: a7 t. T) P w
当程式执行到000488地址时就自动中断
0 M" Q! R) H, |! M5 D3 a5 M7 Q9 i5 H( L
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, c- F* w/ _/ Y) ^% Z0 t! }3 S
$ Q6 D9 @9 w1 @: x& w7 Y
有错误请指正。
/ a0 R* I- ]+ ^( R1 t8 T- J6 Z) T# t0 c6 f2 m, T+ ^9 k
补充一些命令:
% } r* u w9 W( Y5 u8 r7 ~. R0 r1 _( N& J# |
"wpclear" 清除所有监视点
o4 C$ `# y( C, }"wpenabld 数字" 开启监视点- Y0 @8 }$ U$ F1 G2 S+ S7 L f5 @
"wpdisabld 数字" 关闭监视点3 |. c3 o0 Z8 I& X4 C
"wplist" 显示所有监视点
# @. a9 {' y5 F: l: B: W; a9 a7 i* G, n$ h. U
"bpclear" 清除所有断点
5 n3 f! U! l7 V, u5 k; H6 P"bpenabld 数字" 开启断点
% g0 E1 l: C% r9 \/ E4 `"bpdisabld 数字" 关闭断点
) _# V3 r. X7 h% v3 T# S7 e"bplist" 显示所有断点
) N( L* M6 ?8 w; m* C |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|