签到天数: 2138 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
0 g1 K3 Z7 ?+ G
8 t$ X, d: P& h, S$ h4 x(1)如何加载ROM
& ~& K" y7 s3 s. U+ p6 R' w$ {' M9 O Z! |! Z+ C
先说说如何加载ROM吧) u! S; `/ e9 S
1 ~: z9 [% \* X! G
以MAME 0.148 DEBUG版为例:
. ?: D" S ]5 E/ @) D
1 @, Y3 v/ L$ X1 e1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html7 [4 Q- U \" ?+ D4 R
7 G3 \ o% P% k: n1 ]
注:MAME官网的MAME是命令行程式,没有GUI。
) V2 s, s; {' Z% t
" H, C+ K/ f. m8 j2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
3 }/ E$ w" U8 _/ |9 n) }, z
3 Q" U' _. l# Z8 N1 g% j7 n2 t$ w3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
; L' e2 L! h8 D8 C: y0 @! b( N
# d8 i* T e# o2 p2 j/ ]d:回车1 o; p/ g" W% _
7 v7 O$ j) `4 n7 m5 m1 zcd mame0148b_debug回车
$ C: R; d( w5 B$ |: T
6 R: m% m6 O* h( S- J7 g1 b3 G如图1: H* a% Z7 d: N. h3 d( a( H& z- V" H+ g
8 ?! ~+ n2 v# O. c/ V
! e- Y* t. G7 F. }% c& v6 F# P7 E4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
* O f9 {" r" x" M/ @6 z7 X3 p* Q/ s9 o/ Y7 [
- G! E, u/ v" _* ]% |0 c/ [6 P: v' U- O" N2 Y, G/ x/ p6 p
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;* c& g% {, U/ T8 ~1 x+ e
& v: a+ @! M+ U& k$ G, e
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。; J" l- N" ~7 K% l! |1 L2 b
. T2 L+ m$ a* z1 s0 _
(2)如何呼出/隐藏调试窗口
/ K5 t. y0 h+ W, F7 D* u1 j* f
0 t. ~% U ^5 S: [8 L5 _. u3 s1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
* q( u: X) b7 `- I. ?) @
: A$ i, ]* L" p/ o% o# ]& k+ h1 d& F% Q4 ^( Z) C
& D A2 ?- z2 N3 x( @9 M
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
& A- I% q+ m0 G( R0 g& g1 `4 z4 X- O, n% ]: N$ f8 J9 V; H' j
4 R5 ^" w3 `6 H7 w, i/ L; v x8 ~9 H- A x+ [
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
( y0 \" u8 f5 h& w/ @
# h) e' l. D j/ r(3)如何下读/写内存监视点以及程式地址断点9 H" S2 ^* R# J1 z; p
5 h( z- [) P- G3 w1 g5 b先说说如何下读/写内存监视点吧
: [$ E. l2 N% x5 e/ o0 q, J5 u4 o7 C R% K& B3 `# s$ F& B. {
监视点命令格式:wp <address>,<length>,<type>,<condition>- P0 ?: x: `) b& a5 g9 }! f
1 m, H! _+ [0 K9 m; m: ]<address>是地址- h3 @* d" m! C
4 B! {9 j9 a0 y8 x1 {1 T) @
<length>是数据长度,长度必须用十六进制表示% K1 h) O1 p. v
' P: t" _0 l" d- {+ p
<type>是监视点类型,r是读,w是写,rw是读写$ Z1 c2 J1 A1 `; T
$ V% k0 {- L6 k. F- ]6 D; m例子:
7 {8 y2 e( {( s& ]' K. b0 f( N: Y1 u N) B& e
例如对ff8569地址下写监视点,数据长度是1个字节+ M- z$ w @' j* Y
8 M1 m/ J0 B4 h' e2 W" Q5 `5 j/ Gwp ff8569,1,w9 C' G8 R/ \9 ?( q
3 ?0 K3 G1 `; _例如对ff2235地址下读监视点,数据长度是2个字节
$ Y- ?; a% }0 ` h
" F" G( N! O" i/ O* z- j' Dwp ff2235,2,r W C3 B/ Z/ w/ I# e/ I
4 P" V9 u- G+ g$ j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断- r. p8 @. q% s* e' I6 y
+ d7 J0 h$ b8 r1 l" C5 fwp ff7533,1,w,wpdata == 0- {+ ^$ d$ Y4 [. I
; @- x, F, E% _+ _, }0 D
以龙王战士日版为例:
]( r/ S- c) G) ~( g- A$ }; ]" V4 Y. E( X. E
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:- t' D4 G; z8 C) d. ~
0 B) |1 _8 F) y: K& y7 m6 X; C# H$ o3 [7 p' ~- w
5 s2 H* c1 q+ A( t F6 C$ c
& Q) t( r4 g$ \; I1 i/ h2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% ~/ G1 k/ Y& x+ V8 P& ?& c/ } v% [4 X6 E# o" V
' D6 h$ o) u2 G p+ t) Z
, |* p! Y* `; l8 z# r接下来说说程式地址断点7 J8 ^1 j+ N1 \+ q2 X0 L/ m6 Q
4 B% z3 U8 _/ V
命令格式:bp <address>
: Q. [# ^4 L e9 {6 a. }3 ^, t# M: M8 ?! G3 a8 R5 l* H' K0 K
例如对000488汇编指令地址下断点
$ ~ S# s9 s; ?+ I7 l% A. F5 W. V, \+ M. |7 \1 `# ^! v
bp 000488
2 Q' `7 B0 z6 D9 X, s4 e/ v" E1 ?. P) B2 m+ `2 g/ A, `6 ~1 N
当程式执行到000488地址时就自动中断
$ e6 r1 j0 Z" g/ ?, O# K( U v x( [" t! t/ \$ b" l
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
5 {8 q' h5 N, f) @1 g
- G8 m, O% D3 d9 m* G有错误请指正。# Q4 O6 V/ ~/ j3 |' \8 G- y
0 o: r* _0 X! \; D! z) |6 a, c0 x
补充一些命令:3 d- r# W) A$ T1 f. A K) E- H
* E H* ?- q+ F' W9 x7 e"wpclear" 清除所有监视点
2 a( K. F: e6 Y6 @$ E; \6 U"wpenabld 数字" 开启监视点" L c% @# @& G# b! w% i
"wpdisabld 数字" 关闭监视点) _) E8 O1 R4 }1 F' k
"wplist" 显示所有监视点" r) u; D8 X. I* P7 ]& i( }+ K) y
' B/ u# i# A7 k2 g7 V( ~7 \
"bpclear" 清除所有断点
( j0 p3 A2 q# I"bpenabld 数字" 开启断点) G* t( J6 I) B
"bpdisabld 数字" 关闭断点
0 O: T7 r& w* p) z' B/ c+ O( g"bplist" 显示所有断点
! f, v8 \4 U3 j. P1 B9 I$ e |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|