签到天数: 2072 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。9 a$ q& K* ~5 l# L) E0 X
( C7 f k6 \2 z
(1)如何加载ROM8 r3 u+ w8 F1 @- S" t' N, l" o
& _) k$ r/ z4 g: q4 ~3 h先说说如何加载ROM吧$ s8 m% Y! v; }$ L, s
- H9 t- t# E" n以MAME 0.148 DEBUG版为例:; Y! h* G/ T/ u$ n
! L" S# I; J4 u' h6 x# c2 W1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 i7 m( k" ]- w# X9 g
0 q# G) V5 {$ }# }, s% B& J注:MAME官网的MAME是命令行程式,没有GUI。+ @! t" K# Y* R& [
" E7 ?% Z8 d3 V+ f, y9 E
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
$ @3 V( w& ?+ @
0 e- O8 k$ A& R! n2 t* ~3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
: }1 r3 n% [% n0 ?
5 z8 s2 O3 S# D. d, u/ G4 md:回车1 P ?5 P% k! i" S2 ^
0 z4 c4 ]6 X$ x6 \4 d/ Z& |1 u% ]cd mame0148b_debug回车4 r q8 z9 M/ G# Z# d
& p8 Y: z0 F) A如图1:- \ P$ o6 A) f5 k+ R
/ k/ B/ s) t1 H% M3 W
$ {* {6 b6 M" a: t- E7 Z2 {% i4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
& f+ }9 F; t6 g4 _, @4 ?, X0 ^; G
* y" m) n4 O( O- _6 f& C
5 t I' C K& w7 r/ ]5 P; I- x0 @; A8 g( Z0 y2 D% Q
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 B7 V4 q; ]; ~% S5 O: ?
! ~6 {& q: c6 A% i6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。7 Z! t2 O( N" E) N, {6 H5 W6 `
; V4 ~3 [, `* C6 \; I, v
(2)如何呼出/隐藏调试窗口
$ D* ]+ ?. B( W1 l* B" S9 b8 [- {
4 Q9 L0 f% ]' A: O4 U7 r1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
_% _) k6 C8 f q; o( }0 k5 m) ]. L" D& b
/ }) l8 Q. l2 O+ C- S( i& k
# I* R" O8 u' j3 D- {2 Y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! K9 i7 Q1 Y5 O2 n% a* O+ n; o0 \5 |0 Y& A4 G1 [0 [
* A9 t& l- o$ J- B3 l1 p! k! [
! }# M4 W6 h+ @2 i& ?$ |% U3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
# R, A. `: S1 V5 J, q2 Z( ^" c8 \5 z
. }0 v. z; h h3 F) Q5 ^: i" p; f* o(3)如何下读/写内存监视点以及程式地址断点- c% V7 b' M e
7 s4 Y8 ^, W! A3 `- z# j% f Q5 E
先说说如何下读/写内存监视点吧
! K. s8 y% X7 q$ ]& u" T+ M* L2 l$ ?* h1 N
监视点命令格式:wp <address>,<length>,<type>,<condition> |4 Z; k( C. _: R0 j+ e6 ^) O- Z9 t
; k1 o- G* G3 G% `0 a$ S% Z<address>是地址
) S* @" O' ]. [1 L! L7 C* m6 S9 P: W* Z* \2 Q7 B* k% l
<length>是数据长度,长度必须用十六进制表示) H) |) f7 D) l7 W/ ]
# X- h, V7 F8 L<type>是监视点类型,r是读,w是写,rw是读写) u: x8 j! ?' o% U$ @* K
+ X* ~+ y' u* M8 v例子:% c9 F- J+ {- A/ w) E, y3 Z
% h' _5 q% R, U- o# z$ |6 r! o例如对ff8569地址下写监视点,数据长度是1个字节$ } l7 X: s7 M* M
$ @9 e; g. C3 A3 A6 i1 P% c& Twp ff8569,1,w
. h/ U: I# s, B" ^# X* A5 C( \- y( v9 A% Y3 P$ W4 y
例如对ff2235地址下读监视点,数据长度是2个字节! R& r/ }, Y$ Q f
6 G# e4 @, @4 }% z" Z* ~5 ?wp ff2235,2,r
3 V; Z. }$ q$ V* E5 J
4 }( }( s- o9 o例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
# i+ Z! @- z6 K7 X& p& R' N) y5 E2 q; o5 d' s
wp ff7533,1,w,wpdata == 07 u. Y6 { K2 Y: W
* r% B+ l; n0 |; o0 g4 R2 U以龙王战士日版为例:) O5 o3 K6 y m0 G
( [6 R S: \9 Z5 y1 g2 F1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:. M$ z6 U* V6 b2 Y
1 j) ]1 E4 t. t
( d& ?+ g, S/ W: _7 X8 _' G
. o0 O3 O8 e! H0 ^$ k& g1 U
& Z% E' T& G. X! M" `2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* J# k, E5 j* T
- R! w) I! G; R4 Z7 P1 L$ _
, i: U7 g( q( G$ W% f0 P
! Y9 A& z5 x, B" E* z! k5 o; i+ [接下来说说程式地址断点
, A: n) v: w0 f& \8 {$ H* D9 V: Y5 h% _" y9 A; v# [
命令格式:bp <address>& D1 S9 u7 n% G0 H- T
2 S j. Y, B$ W6 J, D例如对000488汇编指令地址下断点* ~' m$ k) p+ B9 G. F
4 T, \1 d. J9 l: N& N. Jbp 000488
- r# }" {8 d$ t( D0 j& e; M8 T* |' `1 D' V2 J5 a" y
当程式执行到000488地址时就自动中断
/ F& e4 G. `8 l8 w |" B8 f
7 }) p5 C6 ?+ Y7 D( z9 P" l更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
; w. A. A4 \3 V$ e
$ O& ^3 F% Y+ K# d3 k7 q; X有错误请指正。. l0 ^2 e, N; s$ m2 R: w( X+ |
0 J7 i+ f' f6 Z& V* k( E' {补充一些命令:% G, b9 u0 v4 W3 |
d0 @7 s. T, k9 n% S) C2 N"wpclear" 清除所有监视点( ]& A' f& Y4 c" K& \7 H; ^
"wpenabld 数字" 开启监视点
& U+ C I, {) C* c# x8 S/ z/ h"wpdisabld 数字" 关闭监视点6 R7 s4 G! U7 c3 h
"wplist" 显示所有监视点
7 `7 r' y9 I f) g' r {0 M6 _+ s4 [; ]. e
"bpclear" 清除所有断点! d2 { c! O% z# O+ }( A
"bpenabld 数字" 开启断点; L) g6 m- v, g9 {# D# u/ V6 }/ X
"bpdisabld 数字" 关闭断点* F: c1 Z9 ~) A/ d
"bplist" 显示所有断点6 _) N( T5 [7 }- R, x H1 I% ~; S1 j
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|