签到天数: 1574 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。* N* v' Q+ d$ r$ Z( [3 E: a: V* f
0 Z. a9 s S6 X
(1)如何加载ROM4 c" H1 k+ l6 H$ `, h+ t
. D/ g% G" o4 T Y2 ^/ [先说说如何加载ROM吧- L; `: s; w* p" E+ f+ B# ^
' v+ G, Q# Z' B1 k' h# r+ f
以MAME 0.148 DEBUG版为例:
5 {2 F# @0 h4 m+ T; q
4 H0 U# k2 j% A" C1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
3 I8 C1 L% H0 Q- @% N
) K# c0 T) y) a4 L* F& A: A& ?注:MAME官网的MAME是命令行程式,没有GUI。2 X0 T* ^- K, @2 y2 D! m
9 l" e# B! [, I7 \8 U: K. O2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 {* c* f* k$ A; M7 V; a" u9 |
" z( H6 G6 X k1 R* u: p8 _' B7 E
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
T5 O, X: z% r6 S+ j& K5 a! f: T/ M2 ?
d:回车
; g2 T. G4 \" x1 F9 o
8 B+ D. P# S7 ?; hcd mame0148b_debug回车4 J' k0 k/ ^9 b! H) C! J/ h1 D/ z
: ]2 _6 B4 i: X2 \- s& w1 [如图1:
$ g3 F; A5 C, z. X! ?
5 y- L. j+ T% V& ^5 b( \! ^# |" x- H( Y* N) G% o+ R
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:9 e* {) Y+ s+ w$ F7 x- i
3 b% e4 p' f, ~' }& J. v1 ^
~, |- {2 n, D/ e r6 @$ T. o) O$ R+ v3 x" { [
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
% n# [6 n, G" r/ O P$ G, G5 ]! a8 b7 g9 U2 {! k" o7 r
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。* c1 V& f" p! U. Q {3 E8 U4 H# T
4 p( a4 p% J# I, Z D6 {$ D(2)如何呼出/隐藏调试窗口
, l1 {: x' r. M: p+ |* q
/ s4 f* h# j' b/ z% Y% ~1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:4 p4 r; Z: g: f; e8 r1 g
& G) u6 y' v! K' K% S/ ~& v, n
& \ @9 l4 G% E8 N1 t* k# V6 K3 N' @5 t7 p4 e+ v0 W
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
0 Y% i8 A5 }& R& \+ w/ L' E4 n8 I4 T& E- H0 s
. V( {( x* y4 b) I8 c
7 v9 q, L% n8 o# o3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 a' @% a# k* N
! }7 \* E& |$ [% x5 y(3)如何下读/写内存监视点以及程式地址断点
( [3 ?$ ~3 I1 o: h4 s8 |
7 X4 g" p. R0 _1 c先说说如何下读/写内存监视点吧( k3 p y, U/ J. F6 k! f& H6 U
8 g" G1 d# b; K7 v0 J( x( B
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ R2 m$ y' l+ T4 J" ^
+ X. A9 ~5 o+ S) e* M% Z<address>是地址
& e5 \* c! @& U& o
$ P! l% q3 p$ C( T0 b2 f<length>是数据长度,长度必须用十六进制表示
* p v" H. ?( R# f8 E
1 i3 M9 w/ B8 W/ Q; q<type>是监视点类型,r是读,w是写,rw是读写
U# B, h- }! h- H/ g$ K- _& g( D& B3 @! I0 o, R7 K9 P
例子:
q- ^( O- K" L2 [
" ]+ I8 b' l `! A. f {. g; K2 D例如对ff8569地址下写监视点,数据长度是1个字节
3 H2 E" h4 \+ w1 u% V
! i! N+ `/ W) K7 c% @wp ff8569,1,w
% h7 A# g7 f q) o, P/ ^. C' d: [* G# N7 A z$ l9 [$ u
例如对ff2235地址下读监视点,数据长度是2个字节
1 B$ B& m; s/ p: S) J2 N$ t7 {2 s: ~( n. J: Q
wp ff2235,2,r/ M% n# X5 @( o! s ]. d
! D4 U# S9 l5 o% a( i1 @' l- N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 F& U0 m% N0 T! B! S. D$ e$ H+ k6 d
/ }0 ?+ ~* V1 t1 p* l q* y3 Bwp ff7533,1,w,wpdata == 0- w2 n6 O+ u6 X/ O
* ? A0 [, p& I9 c5 O9 G2 C- P) C2 M/ O
以龙王战士日版为例:( f, H8 e1 A7 I1 J( N* N
' x# t+ _9 Z; W+ } _
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
2 D7 v, r9 y, w8 `: A
" E) C$ r6 A9 g& `/ L: v1 W5 {7 r& [7 Z7 Z
8 F: _5 ^" @3 O9 O* V; M4 ~
* n( H+ H( G" B5 ]2 Z" |+ a o2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:6 ?4 G+ z& {: |! @, H# p4 o1 h
7 P3 J! T9 d# w4 W$ U! d; y/ V0 g& e9 N
9 C) j' h* Q' ?
接下来说说程式地址断点, u' _3 Y2 \# c0 v0 Z0 B8 S! K
2 J9 a0 M" c; h( ^* D0 [
命令格式:bp <address>
v3 p! b. X$ T- f0 T3 Z
1 b! J0 F$ [8 |% b/ a1 P例如对000488汇编指令地址下断点7 X7 g/ L0 I7 u8 u7 ?* s0 o
; L* W; A" V* }$ X! o3 H1 P6 [$ O1 y
bp 000488
7 |9 L/ b( y% c& P
/ I8 I6 j; C' |& D! ?当程式执行到000488地址时就自动中断
6 c7 z0 |( }' l( e" O* L, j5 E; V/ \ R2 n) R2 Q! o+ M
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看3 O% v' L. m" Z, c P
/ d. Q$ Q& a6 @( d4 P |有错误请指正。
( L8 ?7 ^% T* T5 w( B# j
! Z( n7 k( t* E4 z+ V补充一些命令:
$ g' a* w( `6 N& h5 V3 i$ n4 V
"wpclear" 清除所有监视点
( Z5 Z8 e( t9 J1 B"wpenabld 数字" 开启监视点
9 u) m; W/ a) C& S0 k c"wpdisabld 数字" 关闭监视点+ ~5 N6 Q( _; J, H: Z# @% W" e
"wplist" 显示所有监视点
0 a' n3 w0 X* |5 T6 q
9 x2 z1 f V" {- P* b9 h5 d _8 Q"bpclear" 清除所有断点3 I/ e: r8 k; F+ y3 Z
"bpenabld 数字" 开启断点5 k' f# S8 \3 G1 ?/ p
"bpdisabld 数字" 关闭断点
& n6 i% T. s( {2 [& b+ J6 B"bplist" 显示所有断点/ T. G9 }7 C% s8 K! k2 N' b4 D
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|