签到天数: 1969 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
% T" c7 ]; P! J" L& i7 @
1 m/ U# |# n9 K: N$ S W3 D(1)如何加载ROM8 F9 X4 l! | h* }3 y5 z4 {
+ x4 b$ [, o4 f5 ^" S N4 F
先说说如何加载ROM吧
; D5 X9 m! [* F. p; T7 R: ^" Y# g
2 w. j6 Q. h- Y# Z: x3 t以MAME 0.148 DEBUG版为例:. E; f* d$ B7 g* g; ^5 ^8 M
) D. I5 X+ x0 ~# t' S) d1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html: e5 g( O$ Y# d& w
R+ _/ Y# g0 S5 L* Q' j+ }注:MAME官网的MAME是命令行程式,没有GUI。. o0 {- k3 N5 ]9 a' }+ r0 j$ o
0 S' ~. J) p# h# _2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
. M; a0 v/ e; p% x+ T# O8 @" o: p% V/ W+ b/ g+ `4 z3 y7 r
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:" q' r$ s7 j4 D0 X7 E9 }
3 w( e, W1 ]# B- B- x
d:回车' H8 o' c4 g( k) D( J# _ w0 b
+ u* b/ i/ t1 J( h! ^2 y$ |( |cd mame0148b_debug回车
9 l. `) y+ r# l5 j7 A5 e$ r" s; K3 z7 h" _, M8 a3 A
如图1:
' {7 e4 b) _ |' s) i9 N* c; I# x, z' j% z' a# V( r
1 H8 [* |$ W4 _6 v4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
' g( @; P7 J: h5 F- |3 ?1 l% s1 w: N8 L* ~8 S
# R7 y& |2 d$ j" s' |6 h! X
! n* {' Z. _6 A8 s1 q( A, W6 O" }
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;' V5 s- B6 E# F3 W* T
# E I6 ~7 Q# I: m; R& G9 l D6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! P# j" ?) ^! `% r5 _& w5 k$ {" F2 O0 y$ s( u7 K9 ^( R
(2)如何呼出/隐藏调试窗口3 G6 t- l, |5 N( v
& Y+ m* {* C& U# P7 e
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ n$ R N2 s" S: Q
0 V) I2 U* B; E! P. C+ V% x
/ H9 Y1 [: v u2 v
9 c, |% b0 R3 \
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:; U9 H I9 z* K' d9 q* w* U1 C, p
* ]6 c; a: t$ B2 K# d4 J9 D' ~
) S2 k# F* N h8 [$ M9 t. O! l5 K1 J8 ?5 c
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。( l6 W% g% n! M
# {5 R' y8 r/ G, E; Y: n0 r+ ]
(3)如何下读/写内存监视点以及程式地址断点
/ `- A: C3 [* L# `% _, K9 U) C% ]6 g+ p& e, n A
先说说如何下读/写内存监视点吧
' a7 W) [& k; n. P( S
, @2 g6 V1 {) |% {6 r: Y' A ?/ f* H+ |监视点命令格式:wp <address>,<length>,<type>,<condition>* n7 P) y1 ^ H8 T2 s- B
3 R2 \& ?* W5 a; ~: P1 I% V<address>是地址, J7 B# @! v9 ]- U: N5 z- X
" Y, g9 D4 Z( g7 K8 w% q5 U
<length>是数据长度,长度必须用十六进制表示4 w) a9 Y8 s0 \* z! g
2 R( I! E$ ~: D: B/ G' M8 a2 n
<type>是监视点类型,r是读,w是写,rw是读写
E. N6 [% R+ @2 S/ s+ Q
" i( d4 V9 P: o0 W/ ?/ X: u$ x例子:* @! S y2 f- k1 X+ F' G7 ^/ _
- a& ^8 k [: j, s" A
例如对ff8569地址下写监视点,数据长度是1个字节
. Z& B1 d9 Z5 W. C/ w; k- p& I6 C
" q9 G7 z: K% W; C7 C! T8 bwp ff8569,1,w
3 u r( m- X% R$ B1 o0 ^
! \, M- z) c9 s4 N- c% B$ A例如对ff2235地址下读监视点,数据长度是2个字节
( Z1 M9 n! p7 j8 W) a2 z- n: H2 x; F {. @" f' \1 f0 j! M9 ?
wp ff2235,2,r
2 Z) t! J( A6 M6 ?+ u% K5 Y. \5 H# O# p3 K6 W/ c8 x, r. R+ l
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
/ m! g# E: K ^9 M! v3 G k% a5 ~
wp ff7533,1,w,wpdata == 0
; B; d- l: c6 v+ t) o C9 E) M( u. T2 o, K) a3 {& c
以龙王战士日版为例:1 P! O( h! i6 s5 d. q8 B$ J
& H% A( h& h _1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
$ c# D z C5 C, W& d5 A5 D; i% _' l
& b B& o2 D( I) q
& j! j/ N; R/ k9 [ i. ?. Z
% }+ q' s" c7 E z+ W( Y1 C2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
& M. z0 x) n8 p! i( M- c7 q
$ a' h1 c; i; t4 R) f! h" |, s3 _, {+ b* v# C b% H
6 ^; I& z# e4 C* _+ d: K接下来说说程式地址断点
\0 a* i) ^& f9 N4 g' W7 j% j3 j" Q+ ~9 [
命令格式:bp <address>1 O# s5 j4 n8 Y$ ]7 e
/ H" Y* u& M4 A- ^2 k5 u) P! u
例如对000488汇编指令地址下断点! Y+ l( n1 \" c% v7 L% s$ e* W7 a
' z& a4 Q8 ^2 E' }bp 000488
% b( v* \2 W2 Y* g
3 E. N( N( [5 V' x3 H当程式执行到000488地址时就自动中断
- |! H9 R* V1 z! x, X1 c- T# | C0 j% _" L" g k+ j
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, P/ m4 z5 P; f0 K; d4 }! V# d8 |
( B% d1 T- e* ` d
有错误请指正。
; ^+ @$ K) g$ ~, y5 M% h" S
7 Q: W- @1 y$ Y补充一些命令:
1 A! \6 P. C4 {
) d3 n6 S! I. K& \) d, U: l0 D"wpclear" 清除所有监视点- t$ W2 D- {' t7 T* r0 m) _* r
"wpenabld 数字" 开启监视点
+ e" B3 F; o+ t ~; N9 i3 J; k"wpdisabld 数字" 关闭监视点/ N4 @* K, ^3 I6 O8 K; d' G/ a
"wplist" 显示所有监视点. y- V- O6 u& @( |0 v* w I* R7 ~' J
/ v1 `7 z- d! N. C"bpclear" 清除所有断点
: Z- z! B3 A0 Q1 L$ x"bpenabld 数字" 开启断点
& g9 J% z3 \% V) g) g: b"bpdisabld 数字" 关闭断点
2 A, W& Q# }& w( b$ q"bplist" 显示所有断点
9 Q" t4 H M2 s3 r9 a |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|