签到天数: 1997 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
' j# T' E% ~. i3 `* |) d5 _- ~' y6 M
(1)如何加载ROM! X. u. `2 g2 P Z/ K. W. N8 N4 g
( J1 V7 T. {3 {6 x先说说如何加载ROM吧' E6 ]8 G2 u. A. Q2 l6 q* J
# \' t! U: ~* g4 N! N6 k以MAME 0.148 DEBUG版为例:! ^) C, Z" Y$ B: l+ Y
" t1 ?4 t" x* }1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
& C* Z" |+ E9 V( ]& Z$ Q- S. `- I
+ H. K, s1 H1 G1 k4 c注:MAME官网的MAME是命令行程式,没有GUI。$ {; m9 R, w6 H
; M f; L7 j9 j) }( s, F8 C% h! f. Q
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
+ m8 p" i' r9 B- E, z* W) @. `# i" q* `' q, B- F; S
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:8 i/ Y; A1 i! Y9 J5 l; P
0 N/ S) a6 s2 ?1 w& N3 \7 r
d:回车
2 P# }+ V7 n* D9 \ @0 z2 {% y& i/ c$ R9 d4 U6 w$ `
cd mame0148b_debug回车
! h7 y# b2 J- N6 D7 o9 m& w
0 ~1 G8 q1 b* h3 u; ]. m如图1:
. \" k& P; Y; W( W
9 y5 e" h, l% Z, F( S0 W0 M
, Q, e) w7 t2 ]$ r) i! I4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:) }: Q! f* _, Y# S f- J% u7 P. b6 W
6 G" ^( K% s W4 \ z6 m
% P9 v4 [7 m2 \* E7 X
# C% C) t% \; U |3 {! p! K5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;" E, e6 A4 D6 O8 Q
- a( r# }8 H6 v1 X; F& g, {6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
?- P" D: d5 R2 E8 E6 }0 E
5 X* ~! p/ ?' E$ n2 D4 h1 `0 {" ~$ l(2)如何呼出/隐藏调试窗口
/ X8 Q2 j$ Z, T. ^- T1 a: k- u1 b: l9 u) v. m8 n# _' C. Z5 Q2 H
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
6 J- y. w5 l/ s+ N( m" j+ e J1 `
$ ]: w, n; Q8 M7 K0 M1 x/ v
, O' C- @6 V. G# [9 v
+ r' i* S5 p& |9 K& C. D8 h0 }2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:, V5 S7 w) D9 { H9 C: @( W
) h$ I8 R5 a3 \- P _2 s# t! s+ \& v5 {
. z$ R. ?$ a. E% B! p3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。$ s* T- m E) O
1 J/ ^8 q3 O" `, j2 }
(3)如何下读/写内存监视点以及程式地址断点' ^! _1 [& P: } o5 L' S! b
: ^1 ? {1 c3 E# `* ?
先说说如何下读/写内存监视点吧/ G, i3 Y% z8 e, t
! R6 x* A$ x/ Q3 Z7 p( \ _ N; h/ S
监视点命令格式:wp <address>,<length>,<type>,<condition>3 A+ F/ M- B4 }- T% i+ X% Q
3 \, B; D* z" }+ T3 F6 U& P<address>是地址
: _+ T: B w; A+ V
5 U% ~ i+ T. f; b' A' |& `<length>是数据长度,长度必须用十六进制表示
: X# q D v9 K3 m9 v
$ C. Q |9 ^1 D' k7 j. i' |+ x<type>是监视点类型,r是读,w是写,rw是读写0 ]8 ~1 y- t" T9 H1 Q
9 g0 f2 J9 _& Y例子:1 \( M: d! j, v5 u5 d6 u8 t
3 z6 O3 |8 {4 } O0 Z5 `* u
例如对ff8569地址下写监视点,数据长度是1个字节
2 @4 }1 H" L+ ]* d0 o; {" y" G" M! @4 h- y* _
wp ff8569,1,w
( y; G- b' g: \* L! S; o3 F3 `3 S% }) a0 D, P
例如对ff2235地址下读监视点,数据长度是2个字节+ P8 ]) ]+ w# c( h1 q2 F% P
* b2 f6 r% s7 ]5 {3 B+ L0 U
wp ff2235,2,r$ @5 a) ?2 D9 F. m& S2 T
7 g/ O: s; G$ b1 q$ g* a
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断5 Q5 y. j7 n+ a, i) Y! c* B2 P. W
; X; K2 T0 G' }. W4 Z8 Q/ N* Kwp ff7533,1,w,wpdata == 0; K: t4 {8 l( L& y7 S! ^
2 a* v) F# T# I/ S* k& n* \以龙王战士日版为例:
% F5 I7 o+ n) r
9 O- p1 ~2 K2 D! e1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:; |5 f; {# V6 T5 Z& \
! E% \( _: [& Z/ v. ]+ J
9 Q% L2 ~+ q) R! }) K
- R$ Z9 ?/ s" D! k, F$ v6 I6 ]2 W$ w! \! w
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:1 j; g, g4 S; V: _0 a: p* ?( e
0 H, ^, }$ i# r# y
2 M6 e2 N! S+ o
8 f" |2 c1 E) f9 S" k, f接下来说说程式地址断点0 B0 B% X. R- }, @. v* _
9 p' G R, c+ P f9 p命令格式:bp <address>, M' W; M+ j- Q* N- G0 c; [/ @
8 h& Q$ }: n4 J" t$ ]* U
例如对000488汇编指令地址下断点
2 n' m5 R% w3 g+ b. }
( \4 G2 F- T: i6 o; a U, mbp 000488
" ?+ y4 ^. x6 T! [" w6 n2 p5 b- m- Q# v' `) b8 S
当程式执行到000488地址时就自动中断; {1 n0 ^+ h, r- P! K1 `1 I& J
d/ |/ H( P$ Z1 U( l$ G u* G$ L# S更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看6 J6 \ E* [# {! C7 f5 v8 a4 j' C
4 }' p a; u& ~8 r. S; [有错误请指正。2 M8 |1 V) n) `2 H8 h/ k
6 W5 u$ I, }# M) N- z) u: R0 J* a补充一些命令:
3 d# [& g7 y5 P1 O
# ^8 v2 t5 t3 }- ?3 Q2 O$ ["wpclear" 清除所有监视点
+ u1 @2 \+ V g# W* f1 q9 _4 s"wpenabld 数字" 开启监视点
5 ^0 h( R- x* g3 J# t"wpdisabld 数字" 关闭监视点3 g7 ^+ d4 j6 [
"wplist" 显示所有监视点
9 l# |5 W/ P2 n- _1 `# U% k+ B
8 F/ ]4 f, r9 j"bpclear" 清除所有断点
% J s/ h2 T& Z! O- g. \"bpenabld 数字" 开启断点
3 H9 X1 A# E; ["bpdisabld 数字" 关闭断点
- j9 b5 I, c$ W6 O' y) H/ f6 A"bplist" 显示所有断点) J7 `8 X5 T8 U6 I0 J9 O
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|