签到天数: 1996 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
p& M: s& D+ Y6 t7 X% h0 j( v# K9 `/ ~/ q) r
(1)如何加载ROM
. d" S2 C+ Q( p U8 S
" N- L* I7 ~$ T" O" q# r先说说如何加载ROM吧
. B9 W6 \' b/ R# S; `3 o8 z$ T% g7 E. D, `- _! ]5 K
以MAME 0.148 DEBUG版为例:* ]9 a. i' o }1 X; c4 I- X0 z
8 `# x, E! D M* \5 k/ e: X' [8 `' @
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; ?1 R9 k0 c7 S, x* F7 l6 R, u
( g2 \. a2 M; N. }注:MAME官网的MAME是命令行程式,没有GUI。
! P4 d$ c7 ] q5 }
' _) L3 r# n' w" b" a, R. x+ n' A6 u2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;1 }1 @. x" q% _. i( h* a
; w' U7 a8 H1 f0 i+ l# S
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 q* c6 m. f" U+ E! }
# K' c. u+ [8 j4 S% H( x: X2 zd:回车8 L8 F" s$ x% K2 ^. `
8 g) T# {* _( P5 }" B" b
cd mame0148b_debug回车
9 k$ i- s( P2 J7 [3 F4 z
' Q8 K j* \0 o3 g5 a# q! z如图1:
: q9 l- b5 Z$ G6 G7 W v! _$ [; S/ W% s1 J& ^4 O1 C5 w7 n# f
3 [3 I% I" P' X4 C* [$ o
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
7 o; R7 h" n( m) }) W: ~2 K0 h! H' a$ F& H
% |# \2 O% o. @5 ]0 i
6 R* _9 j8 z G; K7 B' r" I& K5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;# P' f' k! b- _" E; y9 w- V
( s+ x' v% m8 o7 ^+ k$ Q, \, b! t6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 s0 O) d" b% E) O6 t, g3 ]/ E
w1 f0 ~- C& S8 V/ V' J8 b R% n(2)如何呼出/隐藏调试窗口* k1 Q" D# C& C8 p X- n
+ D# J$ E) y( F9 J2 V/ |1 F
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:3 \0 y) e2 H4 u8 J4 P' b1 ]; d
3 f# k$ \9 E r+ T, Q
) O4 j" I4 T0 u, c& O1 O- S+ J
. k }3 W) y% I3 k. v( }
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- Q. q- d. v& v k/ x7 V$ [ R, J- h
# \: V e* B# E
9 F2 H+ _1 I4 z ? \" ^7 t
" C. i2 n V, l! C; o( r" g3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
! Y4 i \% S5 m( G
: U7 Q0 N! r t: s3 E% |' M+ [1 x(3)如何下读/写内存监视点以及程式地址断点
$ `' A; c# F9 ?$ e/ Z7 |# D
9 A! c( K+ K. x) i; ^先说说如何下读/写内存监视点吧" C2 h( a1 W& b w
' C# M2 l* ? M
监视点命令格式:wp <address>,<length>,<type>,<condition>/ `$ x& e1 V4 A/ {* d) ~7 [0 _
2 o& c6 p6 L. {7 X Y0 U( Q7 n
<address>是地址4 e' B% p3 t [- L
9 d, x; e/ l% z5 `! A7 h<length>是数据长度,长度必须用十六进制表示
' _! g% S1 Z) ~8 ~
3 ^+ Y* S. X" }0 H2 ?<type>是监视点类型,r是读,w是写,rw是读写/ Z+ o1 @* l0 Z! N, b; G
7 w5 p; j+ l+ @, d$ r$ E! n. w例子:
/ p% u$ }- E! q1 _
8 ]& y! w/ X+ h" g例如对ff8569地址下写监视点,数据长度是1个字节
; k1 j( |$ `0 C4 s; a9 J" x; w+ ?- V; P6 n' y: L) N
wp ff8569,1,w
+ R! f% p* I) p8 v! o8 a# l9 ^" l- q/ }! v- a4 H
例如对ff2235地址下读监视点,数据长度是2个字节
+ q$ P+ j E) U7 O" ~" |& i- O' v$ w# X- ]0 _- ?: L0 `- r
wp ff2235,2,r- w4 d$ W8 ]3 ~) D, l+ a
a9 b% s8 m+ q! c3 |: u$ Q* ~. @! N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
) i, r1 Y( V$ g3 n$ ~" `) I4 Z) h2 Y+ m3 ^, D
wp ff7533,1,w,wpdata == 06 n- f! E& n( f
$ S2 G8 f9 p' @% K; [
以龙王战士日版为例:6 B! o+ t; F7 y, v5 \
, h6 ^2 R* N& V1 V: y. ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:+ L$ v) X- Z9 p( d2 K7 E/ l
9 `' P3 w& c6 F+ ^' }
1 i/ F5 z6 M- S4 B. p X- _
, Q+ z" T( q5 \! u
/ U/ |# J) `7 e' r( }: @2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7: f, J7 ]" N7 D$ g! Z( m0 v, `/ L; j
/ L) r0 C' p% y8 w' c, t
6 p% J( x x+ u- F: W$ \
: R4 W1 d" B' f6 I0 j# T' H8 A& V
接下来说说程式地址断点. M* ~, H* J5 I- M
+ i g. b" }3 M% l8 T命令格式:bp <address>/ ~; i9 ~# }( R; l
. h& n( T. g! E( @, P* g例如对000488汇编指令地址下断点: M8 \- r' S1 f; P. d
) _: j8 {& h% a: t+ Q, ?
bp 000488% ?" _' P; D: C" b! B- y7 n$ X
+ t* S5 M3 |1 p b1 V0 |当程式执行到000488地址时就自动中断
# \( d4 [# U( T7 T" B0 b0 i# I4 B2 |5 N+ f2 F) O2 V0 P
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
: b9 F6 |$ Q3 f$ g7 M' v( o& Y! H0 ]; b1 u' c0 E
有错误请指正。: K& o& v" V, Z$ `, ^2 A' c: E; V
8 D" s! V6 e% x补充一些命令:
, k& F/ D+ _" u: T/ e0 G. O. |. S
' ~9 |! x6 q$ P"wpclear" 清除所有监视点
. q- ]* `! `0 |8 u( ?7 M* a"wpenabld 数字" 开启监视点
, X% Z$ _' K8 R' n3 x"wpdisabld 数字" 关闭监视点1 U; j0 k. B2 X+ u
"wplist" 显示所有监视点" u F) V. N# C6 c8 m* P
0 O: N! }2 z! [% {8 V k* m"bpclear" 清除所有断点
5 j) m, E: Y: s( g"bpenabld 数字" 开启断点. g' X# S1 m( `6 o* I# o; ?0 v
"bpdisabld 数字" 关闭断点1 I$ v4 w. u+ a8 u9 y
"bplist" 显示所有断点
+ J0 R6 \* ~: \4 ]) U. L |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|