签到天数: 1972 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
- y+ b9 F, Q' `9 l8 u. `/ }: \2 l1 F! B' g
(1)如何加载ROM
3 L: d+ M. _. a; s' Q! U
' v8 l3 G/ M) e+ e1 g先说说如何加载ROM吧
$ Z0 ^) o4 k! n4 n) }9 |1 R$ h+ W6 m0 Z; M Q8 N3 w# S# [7 G
以MAME 0.148 DEBUG版为例:: g( A( {; M f- H8 [ B- [
1 n, U, l" @0 V" K/ F7 I
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html: p. G* [2 V) }: b8 ~' T+ ^
1 ~! C" F% a& M5 L# Z/ s7 S9 S5 `
注:MAME官网的MAME是命令行程式,没有GUI。
( H% V- V" c. G7 e5 l$ y2 K' u* t; N5 v
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ H. f% g [2 }3 Q6 m K5 @
6 o, P1 H. m8 ] Q: C' a3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
. D; P$ S3 R3 C* C- ^7 _4 ~( R* p5 f5 @/ Q8 u
d:回车
. M' y. k2 A, c' K4 N3 z( j) J7 ^8 b0 V. B* z) L( o
cd mame0148b_debug回车 G0 J6 Q; T) m
) Y8 @ Z+ G9 J$ P- A如图1:. M' z- |0 J! I; R* m
4 Z8 z; ~6 f8 G# b% g* Y% [. z; h' K$ H1 W' p8 S2 c. ?* I: h9 q
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:+ S' E3 ^; B) v, h' [# J
! `7 V& P1 _' |/ \
- F# n; g \$ E& r5 ?1 i; {& x2 P9 u t
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;8 d# \ h# B/ @* c6 N* f1 ^
H1 q3 q) }. ~7 p4 F
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
; ]& f! p: e& ?& b5 N* d5 S
% `. u7 M! {; r& L(2)如何呼出/隐藏调试窗口
5 x0 C# H& N6 J7 P1 P0 a+ [& _+ R* [/ E
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
9 x8 V( G2 }2 Z* p8 e" v: ]& i' @- z; B% w4 |$ _* H
) D; S7 r* m# F5 k" V1 s
* }8 }* s0 z+ W2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
" N, S& H. j" g. |: X; o/ x" w6 H5 C4 T" W6 w: y, a1 `
* t0 F0 s, L G: k6 X# a
7 m9 Y8 P3 B3 {0 L4 ?" i/ M8 g4 |# I
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。2 p5 K! i+ _; n8 ~! L
" ?- J& F& K9 E. ^0 m- B- @. z; l(3)如何下读/写内存监视点以及程式地址断点( l1 X) c4 b" N8 `0 C! }
) O. I; \8 ?' x8 Y先说说如何下读/写内存监视点吧
$ `" q7 T, ^, |- ^$ @* R
/ b$ x% T' e8 p4 t( n, I8 x7 d3 U监视点命令格式:wp <address>,<length>,<type>,<condition>
" u M. q# n0 ]$ D- C
) v1 j" a& ]9 q# ~* g8 @<address>是地址$ J% f4 O4 `3 a* B L1 G
0 }1 V' f+ B# U6 [
<length>是数据长度,长度必须用十六进制表示
' @7 X2 g; j! E* k8 F8 u; o+ `; ?+ o1 E2 v' C6 Q6 |& j
<type>是监视点类型,r是读,w是写,rw是读写
' O& D$ B! d+ q/ r) H V3 J( k5 ], W; k+ s* Q2 z; k- R" n# D
例子:- \( U( Y2 x- w/ V3 p' o) @! y
: \3 u# A# X2 a- q0 {例如对ff8569地址下写监视点,数据长度是1个字节
% W% N2 d$ \& T; o5 q! i) U/ d1 o) N a2 x$ N
wp ff8569,1,w0 Y6 l0 q4 h. v! F4 t
& a, d( g( t6 H5 _例如对ff2235地址下读监视点,数据长度是2个字节) ]- D; a9 r0 d+ u& S5 o7 b" T8 l
* v, V( g) J5 h9 b
wp ff2235,2,r. B+ }) ^0 q2 ^$ g4 c [& O8 S
, k/ m3 k; w S% [3 w
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 c/ |3 A: m) t8 o% j. B; C
3 V$ u+ N7 X8 k# k+ w
wp ff7533,1,w,wpdata == 0" D0 s& F$ y1 x. H
- u" D' n6 c R2 f' `. [, B7 \以龙王战士日版为例:
6 Y3 |. S% r# ~* X( E( t" w+ x3 \$ r: Z
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:/ U. K* g0 M) }6 J, B0 Y0 ]
% j$ r1 g- \' S8 Q& [& D! A( U) Q- t" C1 ?1 `1 J% _8 `8 ^1 K" K
- }, \' K \% I# Q; W
/ X" K. `+ X* O& [* t2 W
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:0 F& s; T% ^- `- h4 S+ H' J- J6 C
- h9 m5 i, p3 z' Q% f+ B3 U$ [
+ A0 F# D) a6 ~8 D' e/ Y- k: }/ a% ]
接下来说说程式地址断点
: y4 J2 G3 C# @ Z, `! z8 p
5 T, I5 Z6 }" d' m6 }5 ^命令格式:bp <address>* } v6 O3 R. R" {$ P0 w- ~# J
1 {! t# T$ c+ b8 a+ N例如对000488汇编指令地址下断点
- l y# F& C N4 }1 n
. i( i7 z( j9 U. abp 000488- {' r5 _5 ?* m
3 V: L0 G. u& t/ z
当程式执行到000488地址时就自动中断- C, @/ ^; y! K/ T& n1 E7 k
! l0 j, X% B5 U
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
6 k3 V" x6 T) ^- c( b3 Y% `3 l. w0 e# u
有错误请指正。1 b2 {( `6 s% p/ t! f/ T3 ~2 v
( |. A9 b) g$ i. o/ ~0 Y, p' R! ~2 E
补充一些命令:. G; \+ C- b$ U( P3 S4 B- t Z' e
; O8 f ]+ d! E. u' E9 L5 N% P( q0 ^+ i
"wpclear" 清除所有监视点5 |* v9 G/ O- Q' p$ O A+ K
"wpenabld 数字" 开启监视点5 k% @/ u3 I/ |
"wpdisabld 数字" 关闭监视点
n3 b6 _% ~! G9 ]"wplist" 显示所有监视点" J. J& w2 ?* |
, E2 d6 [9 M5 t& x" ^% a) g
"bpclear" 清除所有断点+ H6 u8 d2 f4 c7 ]8 P2 X
"bpenabld 数字" 开启断点
3 U) _! }% o6 S+ ~" j: @"bpdisabld 数字" 关闭断点- t) @3 `( z: R" q
"bplist" 显示所有断点
6 x( u3 s7 U3 J# @ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|