签到天数: 1992 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
+ Z2 F0 b3 h! B7 m/ d& L- |* r$ b6 M& q, t0 V5 d! e
(1)如何加载ROM
6 z7 p$ A$ I9 |$ o; d: I, m2 s: y9 v9 h3 ~
先说说如何加载ROM吧
1 Q f* W" s) e7 V# P2 D: t2 ^0 \2 w" ]& z- \1 n1 x
以MAME 0.148 DEBUG版为例:* W$ P5 P! j! v W( P7 B5 @8 h
8 c- _" v& F2 `& m1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 A& ?+ ], t C/ a* J+ {
+ v9 Q/ g9 A$ m( N/ L( A
注:MAME官网的MAME是命令行程式,没有GUI。$ H/ b8 b t& m
( B7 d- T$ R8 k7 @% W2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
Z4 J) B$ H0 L" e
& [- w+ V( l, |, [# b3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:; j# v& u* A7 u& M
1 h7 ^, S) W: V) S
d:回车
. P) d& T; E s. U: _# ^
, j/ q! B% K1 L/ v* M5 F( p/ ccd mame0148b_debug回车
, S) x1 x8 N$ v4 B+ z% _% Z7 c8 {
- l( U: Y. Q6 Q$ r$ G/ h x- Z# X! C如图1:
/ D' ^, g4 e. ^* p% M# Y' Y" E# Z, p: p
. }, W- V G7 W/ f$ V
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
# f6 F3 A& i6 F7 M# K1 G L
1 o% ? Y, P- e) K: K7 B0 }' v1 N
. s/ ^6 H7 E7 l9 u; e" Q# d2 ~+ r; q& a, z
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径; b0 C; e1 J1 x1 }' q$ t
* M4 D' d+ s2 c# _+ u" \& f3 N* N
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
1 U1 B9 N0 n7 Y/ Y% ]
! K4 B1 \ A# {2 A(2)如何呼出/隐藏调试窗口
6 n& z- s2 C. a) i. P+ @3 r: ~
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
0 l/ S* J: t- a1 A+ Q6 c9 i# R8 m$ F/ a6 t7 m) N! |
/ }3 Y( T# \. l6 L! U
: `# s5 L' R5 J1 ?2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
2 q, Y, F2 ~ a8 e
2 T f2 y/ \) G% Z/ O' y
3 T; j+ P" Z e7 r* R* {9 E3 W ~7 K! Z4 A3 \0 _4 v
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
6 s$ w. R! \3 d, F3 [5 X2 E7 N0 i
(3)如何下读/写内存监视点以及程式地址断点
! d0 n6 T1 s ^1 \
2 \2 p$ O; k* T% }, v, S) Z* A$ u先说说如何下读/写内存监视点吧9 p' I5 i2 g& m2 ?4 A' B
4 ?; A/ @8 m Q) E/ r: u
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ Y, J1 E! P8 D+ X+ h/ f$ Y6 Z1 r
, T- X/ |; Q$ e<address>是地址
# t }+ \) O$ [$ q Q6 e4 ]
& O2 G& q( e+ |! K<length>是数据长度,长度必须用十六进制表示1 i0 w5 z' \' I: d
/ T& e- f. y. O) J3 E, j }( m<type>是监视点类型,r是读,w是写,rw是读写
# \0 R1 _4 W! s9 O7 a- M: d0 V2 E( s% K e/ `( R6 v9 Y j5 {
例子:
" l2 V# m) Y' h9 W$ r" c8 `8 ~& c+ U+ C% n5 O" n
例如对ff8569地址下写监视点,数据长度是1个字节, H/ o! Y8 j9 e+ n$ Z
, ?0 ~! v- d7 x
wp ff8569,1,w5 x% S2 V0 K1 t! d
$ W2 }/ T% u* U5 u. G; o例如对ff2235地址下读监视点,数据长度是2个字节! @% f* F9 @2 I+ G: B8 Q
9 d" ?6 k! T% I" {' L7 d0 iwp ff2235,2,r, b9 U* V- E' d1 \. p
( s4 q a) O: [% {5 r- k0 S例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
1 H4 J) Z7 A0 ` t3 m6 K$ I% J7 [1 ~% B8 {
wp ff7533,1,w,wpdata == 01 h) ?( _6 F X- R+ f
/ [3 Q9 M& H* {8 L以龙王战士日版为例:
9 c' b7 A: G+ Q3 T0 C# L) o
; `" A; M o/ V5 [# l6 l1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
7 t/ V) M; Q8 ^$ y
8 w& Q" I% k: _& @3 z" h
$ K) A- ~* D& u. n8 a
6 Z B- S" o% @. r4 m; c: F& I# k; V& `! N) V2 d, J1 _
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
( K$ P4 K* L! \! H# @( J- k
( W3 f3 I& G) i5 R1 ]! g9 I A- d2 r4 H
+ Y) v1 J9 t- P" {+ T6 V& r" M5 x接下来说说程式地址断点
/ Q) y1 I3 N' ^+ N o5 a* H) L* b, r; _. j0 i
命令格式:bp <address>
& E- I- {$ ], P3 w( h3 C3 v
8 _/ |' Z3 a9 z- b C4 e5 }3 E例如对000488汇编指令地址下断点
! ?1 ]2 p: `# W7 N' r' q) R3 c2 N2 L4 U/ c& h% [
bp 000488
2 I0 O0 y* v' W3 Q" U! u" [0 j, T @
当程式执行到000488地址时就自动中断
3 w& D, s+ Y6 i1 T! u7 U7 a
+ P. f8 z- F& A k* Q; ^7 h更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看8 {/ \% O5 y7 R) n- N( ~
8 r" _9 F, B8 e5 D i g- h有错误请指正。
4 S. c% N3 b/ e) Q1 G9 l7 J$ Y$ Y- |* K+ R2 I6 `
补充一些命令:
& i: M8 D. \/ Y/ d% V
$ M+ `6 h3 T3 ~. y9 W+ ]2 h; O* r"wpclear" 清除所有监视点( {9 J) j8 o" C
"wpenabld 数字" 开启监视点) U& W+ P: q8 D: q4 g
"wpdisabld 数字" 关闭监视点
+ }% g: w9 x$ \' x"wplist" 显示所有监视点' P' s; ~5 H* N" y. M& l& y/ Y
; l! ?0 h% C: I, M) O"bpclear" 清除所有断点5 H4 G% y* o' }! d! U& c x
"bpenabld 数字" 开启断点
5 [" L; E: s6 Z1 z0 e8 K: r% {"bpdisabld 数字" 关闭断点
9 n6 _) f- x( y- p/ a0 a* Y"bplist" 显示所有断点 h/ {2 H* \5 H2 ~) ]
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|