签到天数: 2127 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
; f8 u- N: l% r! c3 d: ?4 L$ W% C4 U5 D/ v {* W8 }4 L4 f
(1)如何加载ROM
& _2 C4 B+ Z$ {4 Y5 L8 ]3 l7 m- B
- U3 l: Y2 w' P! B J4 l/ ^先说说如何加载ROM吧
4 Z. b+ }6 O( D" o/ v k; h' ]) H# N; r0 R
以MAME 0.148 DEBUG版为例:
' |0 B( v8 L% Y( \7 K% ~7 P( Z5 i p/ j! K8 J- B) p+ |
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
4 x) j5 S; h2 S+ l
6 `! E- @8 A$ ]; N/ k; ^1 v2 h注:MAME官网的MAME是命令行程式,没有GUI。
$ O- q- y$ O0 O! V; x D" O7 r* ]/ h. ?& e; w
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
2 Y- g' l4 A3 D$ h2 |3 f3 H4 a# D- G! y9 `
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:2 Q! N! R$ F9 h# q) j4 N* |
! k8 d& g! q$ u9 T1 S
d:回车
& M) @9 C4 r( Y& M
1 L6 L! R9 |6 Y! b: l1 a5 Y# Z- ~/ R; Ucd mame0148b_debug回车! x1 B6 B+ _- S0 M3 f
4 T; y2 t+ q7 O1 \ o( x8 g如图1:
& H+ f7 \/ X0 W" _1 G9 ^( ~6 {0 C2 Q8 r5 j; t
* W$ H6 e- N- x7 Z4 W* W- v; N) }4 G) S
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:. T# ]: y3 _# C
0 P# h2 W8 \" M7 u9 V
# w0 E/ i, ^3 ^5 J e) H8 J* _# {
- H# t5 @5 `+ ]9 S$ }1 k5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
4 d: R9 y% N# m' m; s( j( L: A6 T v' U7 S2 P) U- s: Z6 l
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
i0 q* s% j. R" y2 O) [8 `5 v# [( k* Q8 t9 m; o% X [
(2)如何呼出/隐藏调试窗口
8 x; y" w1 c# O4 S) B! B/ E( H8 s. ^ M, k! o, q/ B# |
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:/ o4 F$ X8 ~- X
+ R3 Z8 ~2 ]; T4 z5 D- {
) e, n5 c' D! k. I; z: Q
5 c- r3 F) l' m3 a& E( X2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:$ k- C8 [7 l/ j9 [; O* d+ X, R
# P K( w% Z, u( C, ^$ r
5 A+ N4 f" N7 o$ {) C+ r( S: P& _. r; C- }2 k$ l/ h( }! g% y
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。* \- e- P0 x" ]2 F! Y8 ]
) [* p( Q/ C- l
(3)如何下读/写内存监视点以及程式地址断点
1 D) L. w! q) m# ~6 b- u }$ l' t* h$ }& K2 S& m
先说说如何下读/写内存监视点吧
0 J6 I8 P$ _' q0 |9 Z8 G7 q/ V0 I6 m9 v
0 {3 s, ^1 a' b9 \8 N监视点命令格式:wp <address>,<length>,<type>,<condition>
, a% Z \- j! `+ G7 h
' M5 V7 P- {% Y% D' Q6 c5 u) N: l<address>是地址8 e: p% f9 Y; Z' Y& f& W5 M
" `5 R# V0 @& v9 o
<length>是数据长度,长度必须用十六进制表示
, h" z$ z; G. y5 z1 w9 X' S, q3 x4 I+ X
<type>是监视点类型,r是读,w是写,rw是读写
- E0 H& N$ _7 P% K( ^1 Q, R: r; `, F. X
例子:" w+ w6 F2 J. j) [9 E" y
. y* g: f+ ~0 @# B# J% e/ {
例如对ff8569地址下写监视点,数据长度是1个字节( z3 q5 P$ R: o5 u0 [9 q% T; S
9 q Y( T- i$ d0 `wp ff8569,1,w
$ p7 J7 Z6 [/ z+ S p" g3 _% K# }! Y/ ~8 F
例如对ff2235地址下读监视点,数据长度是2个字节; w2 u, B1 x8 w; b0 b! }
) w/ F3 J* {0 bwp ff2235,2,r! j% w0 W: _' I0 Y$ V
5 `2 u: f$ R1 W) b+ h" P
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断8 Y+ O# z ~' A$ f& h f+ l ^
' j% }$ S. s/ I: e
wp ff7533,1,w,wpdata == 0
- U i) ^, A+ J* c* u7 G* ]$ p3 N2 p8 q3 j8 K/ V
以龙王战士日版为例:1 `, Y X# d3 i2 B% f
# R+ }# P' I* \
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 V0 f! F7 {6 P0 _% s, n3 P
( n1 M* e; m0 p9 ~- k7 a( M" M6 i2 L/ r( P* ]6 L, a
6 j! `( q4 |. l! |! |7 i7 o: ^6 H4 n& p% k1 z& D7 f7 ~. l$ G
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:0 @$ r( g( @6 \
4 K* |! a' u6 \! e
" R0 O, g, U, w" ?! b8 l) o+ ^! D6 n3 L# I: n
接下来说说程式地址断点! {# y+ e: u% e; p
1 u% h: r2 [5 ~; ]6 t, S命令格式:bp <address>/ y4 v* {1 H+ u n7 {9 s& D' E' S
) D1 g* R- |$ u7 P5 K: A% ] y
例如对000488汇编指令地址下断点. a& `) m* U' B5 k
$ G# [9 M" L$ Z+ a' Cbp 0004885 @; z( L% F3 W- C
6 h- U' w7 b' Y- X当程式执行到000488地址时就自动中断
! |+ x' E! d+ M8 o
7 x* m; z- T5 u" ?- d0 {更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看8 t F0 x; N+ y
) x7 \, m0 X& A2 |- _5 ?有错误请指正。
9 v- h D& _! T+ T, k
9 |: J _" f0 ~+ h补充一些命令:
4 Y6 X) q! V2 @- n; o% D# `' r# v# g9 C7 `0 d* x
"wpclear" 清除所有监视点
8 ]9 [9 n& H# h/ j; }"wpenabld 数字" 开启监视点
7 F4 f4 `- S8 @) Z: U% O"wpdisabld 数字" 关闭监视点9 U9 }3 {5 u' K1 [) W
"wplist" 显示所有监视点+ \& W; j0 O! I/ V$ ^/ E
) P3 f3 ^1 A9 A; L- f& z+ s
"bpclear" 清除所有断点
- [7 y* K9 h$ T"bpenabld 数字" 开启断点' ~1 r1 v F& ~6 f' i
"bpdisabld 数字" 关闭断点% X! B; W, M# b. t
"bplist" 显示所有断点
% \1 W) \7 r) S, |: s/ l6 z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|