签到天数: 2157 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
* z( o1 X( X) T5 V# T
: J$ J! ]( E4 c! y/ g, ?" R9 r: I6 d(1)如何加载ROM
0 ]9 `- o: b8 Y: R p3 p/ b) o" p. A2 G
先说说如何加载ROM吧
! J! Z T8 |5 Q! u3 c/ Y, F. t' z+ I y3 A
以MAME 0.148 DEBUG版为例:
6 ]& U2 n& H: B# ?5 ~$ N$ ?( U9 y: t
7 c& O7 m$ x; }" Q. S1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; ?4 V. i6 [- s) z6 ?9 u3 p
/ e* h7 ^& S6 n1 @注:MAME官网的MAME是命令行程式,没有GUI。! _* K& V# t! Z8 W6 G
% Z; s. G' d% L% e7 ]! \
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;' k5 j7 S, K/ K1 D
6 {& [; G) _& t* x, ^) ]
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) A' a' @( R g* T) U; q
9 j* p" ?, k) V& | b
d:回车
. `6 ~. i, K& d% o. o( w" P5 C0 A# K+ I9 \5 `' @' t
cd mame0148b_debug回车* C! l( N# v! U& G, H
3 g, T& |+ ~; J( Z1 Y- \2 [2 {如图1:) Y" z# f0 Y4 \- J7 q
+ p# ^3 L1 a Q7 l& g j# M* Y- ?& O7 n. a0 b9 Q3 u' G7 L7 l
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
1 b& |4 o" y( Q6 {7 _" V7 p& g$ c6 m
& G' C) @2 B# W' a) m. ]% m% i& W
9 s5 q$ k4 l2 R: Y3 |5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;: w I7 Q3 `+ d" P* @; I3 ~
; [! g. t$ [. W& }( O
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 o8 m( [9 s0 V
* r) b8 }' c" X(2)如何呼出/隐藏调试窗口
7 C5 G. I) t& G. p7 S! W' }, ^1 Q& b
1 c( a) U! T8 p& }" S1 N; J* `1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:5 T3 ^ M/ X: N; M
, u0 B4 s) }$ O! {# i. q
1 @" w* P8 C; e& Y: k, m
l9 E" [- J2 N [; _' u7 h2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4: q/ }& v' _) ?' V, }
# J$ @! D0 T" H8 L& h3 |6 q
; L6 D* o! i( s5 g1 |8 f
" L3 L1 n$ F+ |& _' Z9 l- I9 t3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
! ?2 ]# _; R& O, h6 v! S! D
* B# ~- W: r" @8 L* a" K(3)如何下读/写内存监视点以及程式地址断点7 f- B& I) U4 S# c
9 x4 w9 S% b+ {% Y
先说说如何下读/写内存监视点吧
, X, N- L9 h- h7 v# A/ q* |( `9 z1 C- G" r7 | f# Y2 c; i2 B
监视点命令格式:wp <address>,<length>,<type>,<condition>
0 D5 Z5 E) J7 _+ {5 V
+ F% L" P$ e1 ?- k1 }<address>是地址6 Q1 r/ v( V0 ^1 @! R2 `
$ p0 F1 R" b( X- O# N; E D<length>是数据长度,长度必须用十六进制表示! Z; }2 U, h! K" [/ o9 Y# W" Y
$ `% Q. E* }' K) z( F( [/ H<type>是监视点类型,r是读,w是写,rw是读写
* o8 l q8 y% t2 @* i4 g& [9 ^; y) M8 F+ y. a! I! Z
例子:
9 L) O+ Z, d) A: k8 I6 C4 X7 m2 p$ A$ s. }0 j; a
例如对ff8569地址下写监视点,数据长度是1个字节
& D! o9 S9 ^. ]; c6 a, V/ ~1 X9 u9 J$ B4 b2 W5 P" V# |8 M
wp ff8569,1,w
6 b/ T# ^- e9 o# O- g3 k
. {7 ~ |2 P: ~7 ^! L: v例如对ff2235地址下读监视点,数据长度是2个字节
/ C! O2 ~: H1 E' `# u
4 J3 B9 l/ Z/ ^ [, m$ ^wp ff2235,2,r
; K( b6 L6 P/ i4 l7 ~. t
$ }: a, ]' O) w4 y1 @例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
5 C4 Q3 V0 a3 |7 Y$ Q6 C) {# X$ U
* l" P- G- i+ ~9 I/ `$ ?wp ff7533,1,w,wpdata == 0! V; a1 |3 O& X# W0 o$ ^
2 T- M: b0 F, h0 a以龙王战士日版为例:
/ I! G) c E- B. F2 i3 d) P4 q8 x8 O0 ~8 `; ^. F# h( h
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 N; l; U7 I. |8 _, l9 @0 \
, j: B! q; V5 C# T3 T9 _+ m2 f: q9 o5 K% n% _. n& [7 ]! B/ {
' T7 K0 b; o e6 \- p7 d) }
$ N/ w% P4 @8 P6 o3 y2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:$ @7 b& O e2 \5 a! A) v5 K4 b
( [, @, A" Y- z5 T: h
/ x" W9 |7 {1 s: q* v) J) G; b1 t
接下来说说程式地址断点; \6 y$ [ F2 r" ^9 m
. P+ j. L% Z) `# _4 A" M$ O; E命令格式:bp <address>
/ T4 a- y5 E4 q5 s" T8 a. C7 K0 v' a0 _ u- ^7 S, y) d
例如对000488汇编指令地址下断点. M2 E0 M! K# E1 w! A- h
1 `" V' Z' ~: f& H3 V, B6 u
bp 000488* Y: \/ G; r. a* L% h% o9 C
+ E4 s+ A" J6 N8 S. Q- a1 ~当程式执行到000488地址时就自动中断4 ~+ X$ o: F- y. u/ C2 I g
% V% u. \6 C3 V! }3 J
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
& N- L: ]* n" z. s3 g# Q- P% X, j: f0 h+ _
有错误请指正。+ [% J5 p0 n4 K* p8 `
* i# B6 Y5 X; w补充一些命令:: w U; X6 F a( T! o2 | v
# L+ B$ k* e- @, x0 t1 j"wpclear" 清除所有监视点' ?/ r A4 ?( a) u$ \- n2 p7 } U/ r
"wpenabld 数字" 开启监视点
( X" Y( f5 G% u `! _% T. {& i# O"wpdisabld 数字" 关闭监视点7 V; `7 _: A, B* g8 y' ? h
"wplist" 显示所有监视点
6 f; Y( K* Y4 e. g Q# k% W/ [9 G C/ o: t5 G1 }7 K2 {
"bpclear" 清除所有断点% B9 f: z9 K0 d) I: E R+ U
"bpenabld 数字" 开启断点3 T/ m, |. R3 l/ Y* K
"bpdisabld 数字" 关闭断点
: t# N* x; J2 f# A0 X; W"bplist" 显示所有断点$ r! \4 e# G1 [2 ~) X' e
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|