签到天数: 1769 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
" ~( q) u( H! i% g. d$ `6 H* B" ?3 B0 ~( p) \0 w! B
(1)如何加载ROM
) f; N) |0 L. c& i' k2 [2 U
3 \ x$ l4 W8 a) {" H先说说如何加载ROM吧5 O+ T+ r) k/ F4 j+ M9 s: K
, N P. o* s5 `9 q, C以MAME 0.148 DEBUG版为例:
! [4 v2 e1 M8 G9 w
" M, A8 x1 d1 q2 n1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
% `! S( J$ c+ m2 F7 B! f6 T C
" ]: x, p! \6 E! Q8 n注:MAME官网的MAME是命令行程式,没有GUI。9 e" [# B; s& I7 }3 S6 j( f6 F, e4 B
9 V# s+ A7 V( j$ i- M2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 v& Y- S6 r) H, e
! V$ O/ O9 o! [$ ^1 {, C- g6 @3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; L7 c( |0 h1 ]# Q9 j3 B G5 f- K0 v7 c' x8 o# S* t4 `, S7 v" e; G
d:回车
2 q6 }$ E- _2 ?9 x; j( ]& w+ `& E# c: F& ?, y8 v0 `6 Q
cd mame0148b_debug回车
3 }. p0 \' Z9 @) g1 L' O6 |6 m* Q. M8 E# B" m, W5 W) A, a
如图1:# M- \; L* W. ?
6 S( ]3 Y1 c. w& u* ?5 ^/ w$ `. {( C) a6 n
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
3 g: B' |) a$ `4 }8 I" m7 U! W" I) h8 @
! x2 y/ ~; V6 D- O2 |; f7 y: o% k. _, y
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
9 y& W3 r( D" s7 X
: l5 x0 U B2 b& l# q6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。5 S: {; F5 K. B) I
0 t9 r) q. ^; t/ U' v! r
(2)如何呼出/隐藏调试窗口
6 h* g6 s5 G, W6 G6 c3 z. E5 t
9 O( l9 \# O2 I8 e: _$ B" ]9 ~1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ ~/ p% M+ M5 \8 |8 f0 N9 Z
1 i4 n( n/ X' r& G* R! X. G
! ?0 W. W/ f3 B' r: `9 ^$ L& w) T+ I2 b( I+ a7 @8 Y; {
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
3 r# ^6 M' ~# a+ t, B# W9 q. W/ [' N* [# e$ a8 M' I( p
& ]! n( I$ Z% L
3 \4 C* E" f8 r& B; O/ f* Y# |
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
K/ y2 T# X6 J* p) M
3 I! ~ p4 `) O# y(3)如何下读/写内存监视点以及程式地址断点/ \% Z7 S$ z4 e. w Y
& f: f4 M- D# L9 s! b7 w先说说如何下读/写内存监视点吧
4 E7 [, M0 f$ K' ?: I% k" c. z2 n3 \ M- j8 J
监视点命令格式:wp <address>,<length>,<type>,<condition>* `6 E( c, R+ X+ o1 A$ b3 g$ B
" q+ F6 ?" P" i<address>是地址
8 j# q0 b' | X5 \, g5 ^" p8 [' d3 G, ~ w( z
<length>是数据长度,长度必须用十六进制表示
# R% k) }6 {- t3 T, P: \: N! F' r) ?
<type>是监视点类型,r是读,w是写,rw是读写8 X, _) F5 x7 @" G$ W+ z/ e* `4 z
9 b5 j- x5 v9 ?7 y; s
例子:
" X) {" S( A2 A/ f7 x
9 j! H: v. u( E1 z6 O/ M4 M* N) @例如对ff8569地址下写监视点,数据长度是1个字节
q d* _ R/ T K/ b( j6 r, u) c: N& n8 i
& I# N' x3 E6 e/ twp ff8569,1,w
4 ]# I# `; L+ O8 D+ M
7 u# d. D" Z2 g" \& o/ I8 o4 L例如对ff2235地址下读监视点,数据长度是2个字节
4 c2 J, O7 x; |
- Z% w/ Q J0 M3 t }- xwp ff2235,2,r
8 R- L/ r3 r# k3 v
7 k1 F* a5 M# \" f4 c* G例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断2 Z; ~9 z5 Q1 o
, R3 G, S( ]7 S" E" x0 M( l+ vwp ff7533,1,w,wpdata == 0( x; h: r( I5 S3 N: [1 E* F( D
$ M7 h, }( V# C1 i$ r8 H5 L以龙王战士日版为例:) q# y4 }% o, W8 |% v6 a
, N) A+ k! D6 Z0 i% l7 B
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 A3 P* i3 P$ O9 i
" l4 v" @- J8 G- V0 }+ ^7 T1 t- n9 l- h
5 C. d9 e5 n+ U- e8 X- S- ]# Q2 o; \
2 ` E3 f# ?3 f2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
' {0 J4 {5 r- U0 V5 s) ]7 g6 [) _, s4 Q( m' J
3 c; k& p$ H2 O2 \1 F( W( w
[- ~& \$ g8 x, W8 y4 ?# v! |接下来说说程式地址断点
) r0 L5 Z. `7 h( Z. y4 Y r) ~* Q5 X3 t9 T2 |. N+ x3 w5 q
命令格式:bp <address>3 F+ m9 P* V5 s2 W/ U y+ ]) ?
( s, O6 m' P z
例如对000488汇编指令地址下断点- W) p; e' v6 m3 q& L# p
& s/ e% s' y1 p3 ~$ k6 n& \% ybp 000488
u: F* ]) N) i% a' N
) M6 J4 X& _6 J) |7 ?当程式执行到000488地址时就自动中断1 A& i% _- V; _# B: u
9 j. d4 f7 b0 S! P) @更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看# ]" E/ K, i0 l; Y
, d7 t) _* I. ~' A有错误请指正。' J+ m* |4 p* Z4 F6 P c
5 q2 G F% M) h* L2 W补充一些命令:
. O5 H7 b/ q, E8 F1 N
8 h( z( g1 x5 a9 ]% F- J/ b8 D"wpclear" 清除所有监视点7 u8 X9 E( f! |( J0 u9 r
"wpenabld 数字" 开启监视点
, \" g$ ~& l* m% A"wpdisabld 数字" 关闭监视点
F8 h c/ d7 |4 C' w. ^# Z"wplist" 显示所有监视点
" u0 S8 f% B, y* L) T9 U
6 @' Q( l- B9 ^: h"bpclear" 清除所有断点* w$ F& h% d- j
"bpenabld 数字" 开启断点
* N- }1 B( b% W. N: i"bpdisabld 数字" 关闭断点
+ T! s- _) u4 @, c4 W l7 i"bplist" 显示所有断点% H2 u, @ d" U$ n! m% ?
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|