签到天数: 2012 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
" t9 ^ K+ D% I. w" [; |& q9 C+ Z7 `) z
(1)如何加载ROM
5 k3 N8 h4 n7 `- A. p/ H( T7 N% q
先说说如何加载ROM吧
2 F8 T6 B" |/ R7 C
; {3 u6 C* L' r% g4 _: c1 s以MAME 0.148 DEBUG版为例:) T$ ^; V1 t9 w
4 i- J4 a# d1 w' L. u# b1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
' j% F8 G& s, R) M# y7 e( ~* k$ x0 W
注:MAME官网的MAME是命令行程式,没有GUI。
1 F! f: y$ E& a* }1 F
4 F% `! _+ o7 q# b! A8 I* ]2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;: h9 v8 h9 k/ ]9 g5 j2 V# N+ x$ g% b: e
0 _% t& a/ D8 m/ i2 E* u! g4 @3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
: R+ m& \ h3 [( d7 `2 c# u! E8 S! L, u0 n6 @% d9 l1 h9 o
d:回车
* x# C! a; I+ `; J$ \
0 r* o% w1 ?8 Q* h7 E- E" G/ Ycd mame0148b_debug回车& v1 D a& M3 e k) j0 S) P# Y; x& @
/ b" ?: `1 D) L+ }
如图1:/ |% A S! e$ R( ~1 n) ~& b
4 v3 m5 K5 _. ~& c# b& e' Z! H: @! R: M0 P; w: n2 Y5 a. p9 [% K
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:- s: p" m, \7 f; Q
8 z0 F6 Q3 p& ?% T1 n( x1 L' F: W" ^( @9 B z- D) W% t
( W3 V6 G) g) _3 S0 D `% P5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;; O5 V+ P ?1 }( N- B* p; V
- J2 `8 F& m5 q+ v6 t
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。5 ?+ H t9 R" K, b5 A. p
& p+ \! a: z# l
(2)如何呼出/隐藏调试窗口" F# U4 f$ T2 S, q! n# {2 w
. k2 E8 U: f* M& x' e2 M5 T
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:4 f# c# _- T0 [
6 c4 @9 p# X4 m6 \3 z- }
: \, D$ ~' ]% Q+ N- s
/ y$ F' ]6 }3 L7 p+ [) o2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:: i9 W1 `! M" S' ?2 I% l2 `
) w: ?9 ~' C% V! w- n
2 W. w" D' o( X
3 n5 @7 c8 u2 I; t v I
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。* M& q( w W" A/ \; v# s
$ d: |& N: l4 n! c1 y+ r" ?$ s(3)如何下读/写内存监视点以及程式地址断点& _3 D2 x }0 ~1 _" z0 x
5 o% Y) i) y/ d' D, R
先说说如何下读/写内存监视点吧 i, ^4 q5 X. e O4 G3 U2 n
; r5 t' f" q9 Y! \, n$ o: b! I监视点命令格式:wp <address>,<length>,<type>,<condition>
6 M$ R+ m8 B0 k( z1 P+ F
, j- C6 a) J7 F3 e- Y% a7 a( ] c<address>是地址2 Q! v4 J7 Q( n0 j6 t
- g" s3 d* H+ j5 E6 ^<length>是数据长度,长度必须用十六进制表示+ E1 [# Q A0 c
4 O. r# K$ R, b2 w4 h8 f, W; r
<type>是监视点类型,r是读,w是写,rw是读写
1 N! I* r7 b/ p
/ o2 `1 t+ W6 t* Q: a: O2 q例子:$ n: B& B; E: M; z8 E( k
( L; V7 e" {) H7 O) F7 ]
例如对ff8569地址下写监视点,数据长度是1个字节' ^7 W! @* B& Z' Z9 m5 d
, f+ _' s0 m+ s) [( E5 M) ^( Twp ff8569,1,w+ r0 K0 {& I; `* t" u- R
4 W2 ]# u5 r8 o/ P# f
例如对ff2235地址下读监视点,数据长度是2个字节+ A# b1 c4 F: Y" x3 X
) m" C, N. ^( r/ F' M
wp ff2235,2,r6 X. ?, _# A$ ?( y9 I: U
: s# X8 ^1 G2 p' ?; I4 p
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断9 w& a: M& t0 j, D9 W0 N
4 F+ b, y: H |3 ]
wp ff7533,1,w,wpdata == 0
0 G; P2 f: U) ~! l1 F0 B2 [9 c+ N
以龙王战士日版为例:- y9 j: M _0 f# K z# b2 Z" X
. g( `/ {8 [& i4 Y, J$ E1 i, _2 v+ `% Z
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
* N* s$ ?' u0 ~2 Y" w4 O! \
2 z2 m5 C2 b" g Y4 ]+ w( g4 t5 k
5 \0 q" s( v( l& y% w/ Y
! z9 }4 [6 p6 Y' O' [, H% X' ]3 `" g+ ^7 j/ c7 |
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
' J5 l; s; K& `
7 @" Y! b7 |6 n% |0 x' W" a: {5 e0 d! v/ U
. m* R* |1 N# Q7 F1 S. R接下来说说程式地址断点) n. w3 S2 B, E+ X6 n1 U: r
3 s+ o% i$ f u4 c- L
命令格式:bp <address>- K- j( O/ g" W& W$ N
$ ~( \9 j7 z" [- V3 Z$ k例如对000488汇编指令地址下断点+ C5 o9 j2 C# E* O
) R" S2 E7 Y3 n1 Y2 v
bp 000488
( q [. M8 P! d1 }: f2 y8 B, m) D$ f, p; I% U
当程式执行到000488地址时就自动中断8 J$ [/ f3 T' m& D
7 A0 n! Z" A4 @ L! g# X更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看6 y# l+ \# z, w) b. Y
& Y. G$ k; p; e/ H1 M
有错误请指正。
2 |. D7 L( L1 ^( ]
* E! U- }5 [5 t! D9 Y补充一些命令:
( b) G& `) z: d3 ]' k0 {
' e8 Q! }# p; j* e8 N& f; @- _"wpclear" 清除所有监视点
5 ]: p& a3 P6 u; s"wpenabld 数字" 开启监视点
( ~7 T7 t1 k9 R9 O"wpdisabld 数字" 关闭监视点1 w/ D0 N, a9 a1 M5 I
"wplist" 显示所有监视点6 \1 U' q4 `# G( B' Q
# A+ X- h2 Q n" A" u3 {4 _
"bpclear" 清除所有断点; N9 v, @" k% l( j! n7 Z9 f2 V# G
"bpenabld 数字" 开启断点& v& t* R0 s* f. X8 u% F+ b
"bpdisabld 数字" 关闭断点
5 {* C! z9 d t" B. `, \2 A"bplist" 显示所有断点
8 k$ y% P1 B. ?' }/ t$ ` |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|