签到天数: 1802 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。( b5 n0 e; w& ?6 A
" v8 L0 _# q3 {; w) x3 [( _) V
(1)如何加载ROM
; i* r+ a- l9 q( K
+ B3 Z. x" a; h2 u: C* l2 T先说说如何加载ROM吧! t3 x+ \+ T* }8 A( I
4 q# a# m, }" N" P/ C7 c" O
以MAME 0.148 DEBUG版为例:
7 O0 L5 c6 H* X3 T+ F' V/ G: ]# }! N) k4 K- k; o5 g/ N7 j
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ Z# \3 @0 i; ?* \1 C
( _: n: }& v4 M% @5 _7 \注:MAME官网的MAME是命令行程式,没有GUI。
7 {# E) v) K5 Q6 N5 G r9 K
& b" [9 l0 h) r. v% a" T2 z2 p2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
9 X1 T1 _9 {- K; G% ^
6 \) ]0 Y5 m9 n8 o9 r8 Y3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
) s; X+ u& p/ k
$ \, V% {/ P2 @4 t5 Ad:回车
% N0 |, [# J" ~( X6 w
" {1 ^6 ~0 o3 p5 x6 u9 e4 [cd mame0148b_debug回车# m& _4 S/ v1 _" c
6 p5 F" D2 c0 ]( t) E
如图1:
# e: G% i8 g* V1 X8 o3 a9 y Y9 e* X" T
7 ^2 F. Y9 @( f; o6 s V' W/ d
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:5 T7 h* T1 R6 f$ ]
. h$ s( ? Z0 y) q8 p
$ Z* T1 a0 h. a, m
, y; u6 J* H; X7 y5 ^5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
- o5 O# }8 x( R
8 ~$ `- g- Q$ }, y9 w$ S8 y6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
) Z! I4 t8 }- Z2 i0 X* h* T0 ^5 w
+ J4 T" }! j5 }* T% i(2)如何呼出/隐藏调试窗口, @ `$ t$ ?* P; @6 a9 y
0 B9 S: L6 u# H" D: p7 C \3 w1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
, z5 E G( S9 Z0 i0 n4 i( N% ~# H
# f) `2 W0 `; W5 j8 |7 V
$ l! S6 Z9 l$ i" m, U" O
* J/ M$ i G5 l/ M2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:: V4 _; J4 x% R4 k8 B
0 n5 [/ m/ z- L" v" }$ Y
2 l# V, z2 e9 R: R! n( d+ o5 X
$ r$ y# x$ @2 T3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。 D5 L# ]+ G A# k
+ A# U' ^8 e. a6 ]8 b5 S: G5 T& W(3)如何下读/写内存监视点以及程式地址断点
# W; {5 C2 b+ B, x& b7 ~# a9 `: X' V. A) J, }( o
先说说如何下读/写内存监视点吧9 ^. _+ w8 Z0 z; q! H0 H& E7 U
3 v$ |* z `: ~: g监视点命令格式:wp <address>,<length>,<type>,<condition>
9 N6 q) T K! ?1 G) K6 v4 P* U) I m' A. i; i- j: u
<address>是地址
! O$ I: x( |8 P
) M$ E# C, F5 |, Q<length>是数据长度,长度必须用十六进制表示
& W- e$ y( Z2 }! o- F9 @- {/ g" o, z. U" z4 `2 i% ]" G/ m" ?
<type>是监视点类型,r是读,w是写,rw是读写6 U- F, d3 }. f! `, s& k- p- n
' t$ B, s# X( z$ \3 l9 F例子:; A" Q% e n- e$ w% J9 }( _. x
) w' f% \8 H! u# R# u( o
例如对ff8569地址下写监视点,数据长度是1个字节# B, T- m/ n7 g6 R* J6 O
8 \& c U6 _4 m! F
wp ff8569,1,w/ E' g" S4 ^5 M7 k o0 |) U8 z; |5 o
; B% k0 O. M$ U8 U: o- [
例如对ff2235地址下读监视点,数据长度是2个字节
( a! {/ @9 U+ @ s/ a! g' E6 w
+ }" K" `! K# t! G6 Y) f( b3 s" a4 Swp ff2235,2,r- |) }# T/ Q9 m d; J
0 G/ n# Y/ t, }+ L' h/ n' K5 U4 d
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
( j6 h6 B F; p F) f7 U( o4 `3 Z1 l% q2 O; H5 P4 W% {/ i
wp ff7533,1,w,wpdata == 0
! @" y* k7 m0 K/ F& i) f: s5 W0 d: ?8 f
以龙王战士日版为例:& d" b7 [2 ]/ b/ q
1 }* M" i5 ]% A% {9 N1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
' H2 E0 Y6 j! V
6 ~7 }5 a/ T2 T6 s3 H2 I, ^3 K5 f$ A3 S, z
' w# k: s) I D; X* X; m
' y% K2 h+ H8 t3 {+ x% u
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:( T2 }4 H! @: K( W; c2 t( N! }
2 x5 K' y B" }) S' {$ k0 P" N. O, l
/ }! W" ~8 g: c8 j8 s
接下来说说程式地址断点, r$ t' ] [9 q
+ p; ]2 c8 e1 D1 o* J
命令格式:bp <address>
# N7 n b" N2 q( V5 v2 F, h3 S; t' K& F
例如对000488汇编指令地址下断点
0 K3 Y- ^/ h6 T# j# a% z
9 b: v' {3 R/ Vbp 000488( W6 e+ r }& ]9 a M2 R' D
+ p( W# x8 w- v {' P
当程式执行到000488地址时就自动中断 @' ?1 C2 F+ f( q' r6 h$ y; ^0 I
+ J4 k2 {3 J2 D9 T) U; _+ \1 @1 {
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看1 b6 [# A8 s& g. k$ \
s- z$ n/ ^6 c* i, {3 D8 B) f有错误请指正。3 w6 w3 t3 K# e6 y
" ~/ T5 T, W% C/ d7 @/ X8 Z5 y补充一些命令:
8 W0 y: {# F4 ]& g. Q6 b
# \2 p. d: ~: r: N6 V"wpclear" 清除所有监视点& U- d" `7 U' ]. [1 s
"wpenabld 数字" 开启监视点
7 C! Z' Q/ y! o* \"wpdisabld 数字" 关闭监视点
: I6 ]! s/ @+ S y: B' s"wplist" 显示所有监视点
4 L% ?0 S3 h, p4 N% {6 A- f
, `: v! \, _3 s+ \"bpclear" 清除所有断点2 L& N5 ?) X" K: G; F
"bpenabld 数字" 开启断点, p5 W6 ^, E# C, I1 P3 B
"bpdisabld 数字" 关闭断点
! X+ y9 S; R& G) X"bplist" 显示所有断点/ K7 d# f `& d# K* U$ @
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|