签到天数: 1941 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
% z7 x( |: l, j# ^9 m
2 }1 i: E9 J& n. J8 l0 M(1)如何加载ROM
' y; ]1 M! `! ]4 E* g6 J' [8 I" R; Y: e
先说说如何加载ROM吧# Y$ n, o' I. z; ]* M0 E" z
' F7 \8 n, G( V# m! ^* U+ |. g
以MAME 0.148 DEBUG版为例:
/ Q/ ~) u p+ p! A/ }5 o/ L+ F+ E
% U" F( x7 M- C. q1 Q& d1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html( _/ \# P% J( ^3 T7 F
' u- v: |. u- }4 T5 P' n
注:MAME官网的MAME是命令行程式,没有GUI。
8 v7 L1 S* x1 ?& z9 J$ S
: a( w, N# c" x2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
" d" ]7 _6 d% I. m6 }9 I, w( m/ ~4 ~7 O9 W3 E: c; b
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ Y' l( y* a" u- A, W
4 T1 Q- o1 K9 }- o& C) [' I
d:回车
: J: M6 {' s- ]" s+ d6 \3 Q; g8 L# j; k' Q5 x5 [4 U, B
cd mame0148b_debug回车
. Q- W* T% Z$ ]4 M: m# M+ s" f
6 Q7 U1 f- `& ]2 q) r! ^4 Z* c: b: l如图1:
: J" Q6 k( |1 p% p7 e9 C# O
( [( g4 M" S5 i( V0 }- Y8 [' j F( y$ F: t% @3 h
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
3 ]6 p4 @, y8 c4 a$ w* Z9 G/ E+ O+ [6 s. j% c
8 }* f% m+ |' X* m2 U [# s7 o# U& t% F6 q( E, ?( _
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;/ x3 {/ s6 z( a# V9 f# |
}6 m/ f7 r. ]& w1 F* p6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。2 H1 I9 m% B" B( \7 G
' h- k& N5 i; S9 o3 I# B
(2)如何呼出/隐藏调试窗口
# s; X% u5 w4 x; ~1 j+ |. }1 _
2 Y1 N' e' G, t$ m; R% E! |1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
O1 D$ N" t- p) I; g* Y1 P$ S' A7 L0 C5 A( O; s+ k# p( ^
4 L+ b2 q$ w- w* {
3 B1 N) d1 d9 o v
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:' T1 w% T' d6 g9 y1 J2 v) X
) U9 q; O+ g Z5 V" j4 \8 f0 o1 c$ f1 h
0 G7 ~/ K0 `& T/ l* n X
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。4 D9 Z L* r0 }; G. c
/ Q7 J2 B) D b* y
(3)如何下读/写内存监视点以及程式地址断点
1 z6 u& q8 N% A; O) @8 C! L4 P1 C9 v) o) O
先说说如何下读/写内存监视点吧
' o& O s/ q% r6 a7 y0 F1 ]! b/ k' A! ~% G1 p' k
监视点命令格式:wp <address>,<length>,<type>,<condition>: [3 Q' f' r; R" m! p! v! R
5 l1 y3 Y( r: j. }2 ]$ r
<address>是地址
8 V# Y7 m( I/ N5 K. P5 ^6 a$ ~ P1 w! j. g& u* c
<length>是数据长度,长度必须用十六进制表示
! d- V; p( z/ F7 T$ T
3 [' p+ W8 B3 j* \ r# w) x<type>是监视点类型,r是读,w是写,rw是读写
) C, }, w: J: w; F8 q) \
9 W4 e& g/ |! c5 N例子:+ X3 ~9 I! o: a& b7 c0 a
. T9 I4 c$ ?2 O/ j: A例如对ff8569地址下写监视点,数据长度是1个字节' W- O% v' t. N) Z
8 f" l6 l0 V4 s" m% Kwp ff8569,1,w
6 i" W$ R7 M7 I( R' V2 }4 ^1 n
例如对ff2235地址下读监视点,数据长度是2个字节. j% b {! v' j' k: }9 z# A: p- P
% W- [4 W& } F+ Y' E8 w# pwp ff2235,2,r
! E- w1 ~# _# h" i0 j1 n' }# z
) U# U' S' U, o+ D例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
7 E2 \9 e6 z/ Z3 v4 s
7 n& N9 I6 p% Y) Ewp ff7533,1,w,wpdata == 02 W8 |8 A, W; k3 R# l. D
T7 g, |4 g' J+ y( i6 y7 P5 Q, C2 F以龙王战士日版为例:
7 s2 V2 f# b3 ~2 L0 `7 p: m1 T6 K% U& G: t/ J/ |
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& C @7 s) g6 m, H4 q3 n
7 g2 ^$ H& e4 ?& f4 A
* u& @; L. A1 L
4 m7 f: h, i- K w Q _' U) d9 _' o- r' _
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 J) l0 L# L3 N" A7 v
0 W# ]9 E1 U& y, s+ E3 u6 ~
; k( ?0 l4 G- o1 Q5 W$ b. k
* I8 R1 L7 B6 }( {0 H% \9 r
接下来说说程式地址断点
* E% S1 B7 ?/ ^& }! r
; Y$ B* S& O8 b- b0 ?# M' q命令格式:bp <address>5 T( `1 H3 x6 o4 m
' S3 M( |2 @( T& n( _" e7 X例如对000488汇编指令地址下断点
7 J" P, _6 e. B, h1 C# [& E4 O
% }% n$ u+ H( W$ ~' R6 Obp 000488
5 M# t" P4 }% Z3 [7 b/ k2 a" S1 I
* Z' Q' g5 t) J) c1 m当程式执行到000488地址时就自动中断
- C' o8 E; ?% E; q, P. g) u! U$ s3 x" _& ~
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
$ N* E, A- o6 p+ r7 k( v( g& d
! F4 J# q; O. y( U2 C" f" O0 e- B' A有错误请指正。
" @ l6 x, p. o0 N% Z2 M, N' h8 n& k `4 M' |& b
补充一些命令:2 g. `0 E. k- n% S# p1 t7 L& S9 ^
7 h F4 c0 ?& d8 p$ W" b
"wpclear" 清除所有监视点+ o7 T- F7 M; z+ f
"wpenabld 数字" 开启监视点3 P" [) n: D, M ]6 n- q6 d
"wpdisabld 数字" 关闭监视点
& \& R! N/ L+ P# W( o2 ?4 r/ k"wplist" 显示所有监视点 M1 D4 m2 E7 C
$ J( d6 f$ Y: w: s8 h5 K2 v"bpclear" 清除所有断点6 i& K2 a9 q& O# W, e- r* I
"bpenabld 数字" 开启断点: p2 S* ?, v' L
"bpdisabld 数字" 关闭断点) ?4 p9 P, O2 ~- G: r% _" j
"bplist" 显示所有断点. G& H# k' G7 K
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|