签到天数: 1834 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。* s0 ~+ P. t$ V; Q/ m m# E k
' Z2 L1 n% ?( j
(1)如何加载ROM8 ~, T+ q& X' z; R0 q
7 \ B- f' o ]$ m先说说如何加载ROM吧
3 p9 R3 J- r# j5 J3 w) |2 N3 ]/ Z9 o7 D( }" ?- P/ C v
以MAME 0.148 DEBUG版为例:
$ u, m$ v* p/ I& z% z! h/ H
% F' e% `% q0 E; l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ d+ e; J3 c# c/ j& _% T4 w8 z
' u+ M3 i$ R7 U% r% M7 }注:MAME官网的MAME是命令行程式,没有GUI。
! ~" B8 {1 Q |! {" r- s
% O6 l0 l* E, c7 u' B# c, E2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
{, C+ |7 G' v) N; P
# C5 f+ P7 p, c }; o& U3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
9 O) m0 G7 Q/ [, R" s* n L& m- T6 m7 _. `3 Q
d:回车
" \- l5 c. z$ r7 r, W+ P$ r: A8 I/ N* O" m* D! [3 k) [7 X
cd mame0148b_debug回车
( D6 h4 P4 E1 n1 B( r& P0 ?+ |
p5 x6 t N3 I5 f4 j) v& x如图1:: c* n1 w3 X3 r- M8 D4 d! B
- m1 L3 Z' \# ]$ o% ~
) }3 v& E, l% P: x7 m7 e
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2: `+ E* y5 G' G
4 b4 z$ i) O' e3 Z1 d. i
# N$ I! G& o8 v/ I) p- e0 `8 D( a
: H5 L0 G7 P- c
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;6 D2 o7 ?; O) T& c$ N9 p7 V& q
8 A( U: W* t; \* C) B6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 b4 h$ S2 q6 h: v, V6 C
9 F- l/ a! K! T/ }! z' O(2)如何呼出/隐藏调试窗口: C% M, ~7 t1 t
! x3 N& z2 N7 w: {! V, U: g
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( {6 Q& j$ T% E& b
' u7 I- H3 n1 h
1 n$ u4 F! K. b% R4 u% Z2 v6 {
! q3 u' B# [% `2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:! T9 g& ?9 Z) E f1 D- ^! K( k
8 C$ l4 K0 ^, i; I
' g( U# E! P; a" w% Y" @( G; h# P9 J
: R% n' o* `* R* o6 J& P$ P3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。' P9 c$ `: v b2 V. x" h: e9 [2 Y
}$ ]3 T( P; \4 N. e& }(3)如何下读/写内存监视点以及程式地址断点* \( C9 ?3 k5 q" @4 J5 N
8 h4 O* g4 i9 z0 b2 y- U# y
先说说如何下读/写内存监视点吧9 _! N% `, f. j' k
4 q: ?! T% X- o! _ L监视点命令格式:wp <address>,<length>,<type>,<condition>
4 z+ ~& |5 |; U. G
% [8 n) E& y7 S$ Y. Y0 s<address>是地址
! |- y% u& [3 Q3 |( B/ `$ B+ w% k1 D! v `; E
<length>是数据长度,长度必须用十六进制表示0 y1 m' A; f4 X6 i) `
/ C/ M- m: I& n1 y3 N! V. s
<type>是监视点类型,r是读,w是写,rw是读写
s. h3 \4 \( {' X/ z! O7 f; n6 N Q
例子:
# \3 j+ g: @+ ]+ g* K, d
1 X. U2 R k! t7 f0 x! G例如对ff8569地址下写监视点,数据长度是1个字节4 ~# [3 X; s5 e3 H5 e9 O3 b: N) Q
$ x9 Y# e7 \5 z! J: h% l: C
wp ff8569,1,w
( J2 K+ c$ H Q( ^- B4 `# f
! G' x- C( d4 M' d例如对ff2235地址下读监视点,数据长度是2个字节
! [( c9 o* t, ~7 `1 Z) ]: ^
}; X/ |8 L! E# L9 L- ewp ff2235,2,r3 a; l" y; U& N5 d: f* s
) l: T w0 `: E. k3 z$ A& e例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 [& v2 v% k7 V% R' [
0 W0 ]; ~ t$ {2 `) Y$ B+ A' W; V4 x" e
wp ff7533,1,w,wpdata == 0& }7 c2 |* {& p$ P7 B: G
& J/ s6 Y6 f m* O1 O7 o, j: S以龙王战士日版为例:
# X8 K7 P6 o: X) h1 [, L1 Y( k, Z- d5 x
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& o$ k' ^! ]8 Y
" ?6 b: j9 _0 H4 O4 ^! \& F2 m
) Z* F* v2 H y3 [5 F% S; O/ j2 x0 U
% }9 T1 s* I8 y, _$ k
2 o' x# ~0 q* T; q3 m9 \; I2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
; ]9 F! h" |5 i1 N4 T" Z, o1 X5 U, m3 k4 o5 f
6 t1 B5 c8 Z( f T @- n, |* l* B$ V( C. ]9 l
接下来说说程式地址断点4 [- T' j2 u# a5 j5 {8 b( x
% J6 U8 M+ |3 b6 q( Q' l
命令格式:bp <address>; q4 G X, W, O2 q& u8 k
\ X( a5 b( M0 z例如对000488汇编指令地址下断点3 D" @9 e& {0 C- }2 Z- F) W: s
. L g$ ?; `* {* Sbp 000488
, m, k6 n3 P4 F0 Q) R1 M4 L& U0 a: x r4 b7 J
当程式执行到000488地址时就自动中断
8 r) G- o' h- f+ o5 z/ j" r. Y
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看# P; |/ P- n2 r" x1 t2 n
7 B( ^4 r4 z* @( [. Q( ]- [有错误请指正。
* m* B1 i1 Y. H3 o6 [
$ ] w& ~# r8 M1 q9 L- X补充一些命令:. p, k. H+ X+ x3 t( J. ?) ?
6 H; T9 K7 ~) _) k" \"wpclear" 清除所有监视点
! F* O D2 c3 X% w! L- `$ W8 D" |; [" T"wpenabld 数字" 开启监视点
8 C" j% H' a/ I1 y, R M' I. h"wpdisabld 数字" 关闭监视点
: p* g. C/ ?+ R/ y( G"wplist" 显示所有监视点3 J( m% l4 N! j$ D5 `
4 W* _0 l2 I% q, C; s"bpclear" 清除所有断点3 G0 s% R/ b1 q# k! v
"bpenabld 数字" 开启断点: G# N$ Q/ X/ q: C% y
"bpdisabld 数字" 关闭断点' d6 F7 X6 J, _& o c n: w# _
"bplist" 显示所有断点
3 X7 T) s/ q; q0 R |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|