签到天数: 1908 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
6 h0 }- D- k+ @, e8 ?8 h- x; {4 }( Y; i$ O! I/ Y' b' W
(1)如何加载ROM
' E. L; }. e2 E P$ m' V1 ` W( y( W( ?9 M$ R" S- F- k( @, Y
先说说如何加载ROM吧
* v0 Y# O* R6 m( V
. r. G* I: W6 c) ~0 T以MAME 0.148 DEBUG版为例:7 c5 ^1 E0 b6 e1 F1 ^
; ~' k ^3 y' ]' g# J6 ]/ v
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
+ W, T! I- @5 x$ g8 w9 w; B6 a+ c' h) J' N. z
注:MAME官网的MAME是命令行程式,没有GUI。" H+ r+ p2 l( O5 y3 z
) @6 k9 [, U# d7 C( A
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
7 V( G2 R! y ]. F$ U
! f' v2 b2 l; Q: X- ?' K3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ x% D1 x* b, s( }
# x2 }0 Z8 P. I
d:回车
; Y- d( C: s7 Y4 I4 {# \
5 @5 {3 v- ?8 T6 c" g6 o$ z4 U* w2 Ycd mame0148b_debug回车
5 m x" r" Z0 C" Z9 M
J7 |6 {2 ~# c; Z' ~# |如图1:
: M1 ?" j6 R# i. W9 n8 g: o. P% C( J, j
$ K$ p: S! z, Q l% @4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:. Z7 `! a3 \% F/ `2 u/ n, l
* ?/ U* S1 ~4 f8 |5 H3 ~) n$ N: U$ Y1 }0 g* m
6 }: O' F% F* V# Y% }! d
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;- H& z# j0 P, V; V9 a$ Z
1 e, B8 e+ t& {6 @2 V6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
! Q) ~4 {- Q" s; |0 Y. _; k: t e
* x5 E+ V' I0 B# @+ |(2)如何呼出/隐藏调试窗口
! ^+ M' S& y2 M- c
( q4 S5 U# \8 I1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
. G' x' N* t/ ]+ O* B
4 H8 d0 @# ]. J) @9 G
: q- p* ]2 t6 F4 @
: i# d, v, Z9 M2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- w L4 w4 F3 j1 e$ r# X% R) z4 u$ R0 J7 S
: E/ T# O6 o7 q& Z$ b7 W9 R5 K
$ H X) }/ B* r& G3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, Q* @9 M7 t& ]1 j4 I# [, f
k7 A# C0 k; _5 h1 b% u/ g(3)如何下读/写内存监视点以及程式地址断点
) u! E* o8 U9 O0 j4 |& u3 a) y' ^5 n, g
* ?2 F8 e/ @- {% B先说说如何下读/写内存监视点吧8 J/ s- f/ l# G$ b; ~9 g+ Q1 a
. J- F0 p( q5 `监视点命令格式:wp <address>,<length>,<type>,<condition>, P8 i" e6 {5 j& B
9 S z9 l/ s0 h7 ]/ z( ]( c<address>是地址0 K+ k; t& M( h, V6 ]
4 G1 H4 p, n! p9 E) f+ u
<length>是数据长度,长度必须用十六进制表示
9 z. f5 j+ | K3 u2 W) p' u3 K
) D! C2 ]* q# s; c# P<type>是监视点类型,r是读,w是写,rw是读写1 j0 m" T, m5 b& p
0 |6 J$ y( Z8 w
例子:
! J j3 r6 ^5 Q2 J9 \$ H( q/ H
}# D; R& L3 v8 D) a例如对ff8569地址下写监视点,数据长度是1个字节/ L* t- o3 c8 o1 W1 E: _5 V
0 @2 r* b# j! c# D# v
wp ff8569,1,w5 _1 }. v) \2 n: j
, {; j+ y4 h- @3 K# N; n7 ]
例如对ff2235地址下读监视点,数据长度是2个字节
/ `9 ^/ @! u$ X; C) g8 q& o) Z, Y) Z, o$ _" e8 I2 t
wp ff2235,2,r
) c& W) u: d. z' B& p) @/ S1 F O# T$ P8 N8 _! J2 `
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断! F6 E" I. c$ Y
3 B4 m% q) ?0 u' _. h: k- z/ G- j
wp ff7533,1,w,wpdata == 0
- }) `( i1 ?/ F- X" p* {5 d4 `7 ]6 W; q: f! |
以龙王战士日版为例:
, i3 u) }8 M% b
7 X: q. L1 [* N" L; n) ?. i1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
3 Q* v, }6 Q: a% N* }, g7 |
+ v6 `: p% @! I7 @6 l2 q" V( s9 n; `& {8 F1 p/ z3 l* z% f6 r
- w! M: E9 q3 w6 E H9 Z
: J5 S0 Z7 y1 k2 l; z. E; |2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# `! m8 M4 d4 ]/ u# O
1 L. t1 k4 F! K8 q% N: N
- e: F, g% B; n9 u2 P! o6 }: P
/ r p5 Y2 z. s1 q# D/ e& l" c' O ~
接下来说说程式地址断点
% O4 n$ U/ ?: Z7 j% {
* O: u) d8 K* ^2 m" w; w' j1 n命令格式:bp <address>4 t. k2 Q: h5 b- r2 ?
5 r! v7 B3 A/ {$ ~3 X! d; y D: q6 b例如对000488汇编指令地址下断点
$ H$ v* k) x* U& l
0 j4 I5 g6 f& e1 o& K/ obp 000488
5 |0 m& {# N" N7 o% Y
- c. W! P V6 }5 |+ R b4 X当程式执行到000488地址时就自动中断
0 W: t# v; c; ?% f7 U2 M i& W( v8 o4 z
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
: q$ a s# ?" l1 O1 ]9 T
# H! t4 c1 Y: G8 _' C4 }有错误请指正。
D% a o8 t. b# B; B: B( q" v- d: ?" D
补充一些命令:
* q0 L2 F1 E" y. K. F9 `0 @8 S( z! k" Q
"wpclear" 清除所有监视点
8 H3 d# O7 W% A4 r/ S4 P7 `6 P3 ["wpenabld 数字" 开启监视点6 z9 Z) e9 Q% F7 y: w2 j
"wpdisabld 数字" 关闭监视点, A2 _2 [4 w$ Y, b; J0 d
"wplist" 显示所有监视点( t) g% ~. m, i) Y0 W
, }: i; A( a2 m4 G' j, y"bpclear" 清除所有断点# Y3 G+ j" z; ~8 s2 k8 ~3 F
"bpenabld 数字" 开启断点
2 X3 b# P* k$ R* p: d"bpdisabld 数字" 关闭断点+ C& F/ @6 h; E
"bplist" 显示所有断点
+ a: k @& @# ~+ V1 @6 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|