签到天数: 2166 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。$ G: g2 l! C9 d% u. s; W
9 {5 u% N" s: D/ ~% W0 ^
(1)如何加载ROM! Y w* b1 n% @/ Y7 P7 p
5 r7 `; L) X9 S& |6 F6 a& u先说说如何加载ROM吧
+ _( @- [, {6 o; @6 n
; J- B% t8 Q9 h1 [" i以MAME 0.148 DEBUG版为例:
2 i4 w% g4 w5 A3 {( ^2 Y2 m% u- `; y q& {' n
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
8 k, }: I$ r8 ~3 x& w/ f' k
7 C5 N! C( z' c1 I注:MAME官网的MAME是命令行程式,没有GUI。
( S1 |8 A# h$ i& n- z
. H* t0 Y% S' G2 M- q2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ Z$ k: Q3 u0 l! ]* N# ?4 x+ `7 @- ?1 |
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:3 y+ [' P8 e: a6 K, U4 z
' {/ z5 U2 K. e0 V
d:回车3 t, P5 m7 u% S" a0 g3 [
' M4 }! b/ k7 X7 scd mame0148b_debug回车; J6 M; `* _- w& R. ]9 G" U4 f
/ v; h. ~& w9 I8 p如图1: k' j5 w6 Z8 `4 i# g; p% i) t
6 x: \1 T M+ E% \0 p- _- A
; r, _, w5 x9 ^- V" @; _4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:1 o$ x& Q2 Y1 T2 V2 H. s8 Q2 H' |
) q$ }' a8 U7 w( k* T5 q; P/ b/ d* r5 z0 P; k ]
, M; P7 l# }* m7 B5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;4 i" J! m3 g* y& y6 J
0 Q8 c! l9 K. m5 {, _
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
; s8 R* q7 Y' \
% g8 e( B% m; I T6 V; n @(2)如何呼出/隐藏调试窗口8 \" l0 w. ]& l% }/ p
( |1 B6 |, ?" Y7 q1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
$ D2 I' Y( ?# u# _6 w
: z# |+ G8 e, }( l! ~, i& R
/ \# \* i) O& X6 q8 a4 ^9 e
/ c8 h3 U( k" C# E% r+ Z/ p2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
4 A9 L" ^; A* R; [
" G# n# K: V* W1 V [' z2 o- R" \- \
$ v# z- S: F4 a3 j% k! Q0 c3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 L! y2 w. r$ S7 g3 j2 q
# Z _' H. ~! d, b( q' t(3)如何下读/写内存监视点以及程式地址断点4 ~" }: Y9 y& _ M* g( z7 U; B
* R( t3 E' R; |9 i* F' L% Y先说说如何下读/写内存监视点吧8 P5 }) |% E4 s" ], q- `& m/ M
* _6 Y6 G& a' ?+ c9 q
监视点命令格式:wp <address>,<length>,<type>,<condition>
( s5 h {( y% R& N3 u0 |; i% e$ |
<address>是地址
6 B& G% P6 G5 w5 ?' F
* U0 j* N9 U: e) U* N<length>是数据长度,长度必须用十六进制表示9 j5 i p/ v# u3 y6 h" P% L6 p K8 w
1 e# z; `2 ~& c8 o5 L; p/ `; i
<type>是监视点类型,r是读,w是写,rw是读写
' ?5 u1 p% z. K q2 W( H% ]. o" k7 r( T' J" \& M
例子:, r4 P1 ^3 Z+ Q% x. u7 @
% y: p: j0 S0 F; c/ J0 y) {; c* t
例如对ff8569地址下写监视点,数据长度是1个字节
" ?0 Y6 z3 D4 A- ~' |' u9 _) O% I+ M) S+ I. c$ j9 V
wp ff8569,1,w
+ e+ J" _, F* |) _5 G
. N( [4 C! \. o) w [. d4 k# R- w例如对ff2235地址下读监视点,数据长度是2个字节% h& v! \( _% ]! Q/ ?# C
% |; m' A( f8 m8 o1 k/ H! W
wp ff2235,2,r: ^* ]1 s; u/ H& u4 o5 {0 A
; e' ?9 |8 q* {1 l/ T2 V6 ^
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# }1 H4 g8 [7 }1 J
: V5 I# y% O# B: j* b
wp ff7533,1,w,wpdata == 0
" a* k, A. D& h8 T8 O4 u, M4 G' U' h V7 |$ {, z4 o6 M9 {' q
以龙王战士日版为例:0 N6 U ?1 W3 r/ N2 Y
, v8 A9 m4 m! p( c$ R. z$ H
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
, U9 D) [' [7 k0 \5 V% H& U8 A2 H# c' @# X. }
0 E; _; \( h2 m2 ~. ~
- m/ U) u7 D9 f8 o
# m- p9 r: J2 n8 c6 P; A2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& x T- ?$ m* \* Q u, X% e
& N+ h' }% u; R. M% |8 q
! ]& d; e4 K7 w5 u4 j! P1 }# V: o$ n
# @* P. l! S3 H接下来说说程式地址断点
9 E5 I+ u6 L2 N0 b8 r- r) L) h0 Z4 y1 e5 f
命令格式:bp <address># ~3 p! A6 u" @6 ^2 k; _# [3 [9 _
0 ?6 F1 y/ ~, ~% }( b例如对000488汇编指令地址下断点. a6 a8 P* E) X8 x
4 ~3 f0 P/ p c! \
bp 000488$ p& C* k/ o5 V" S( n
* K* a$ K+ A1 R9 C% t9 s
当程式执行到000488地址时就自动中断& e, h4 j3 Z/ p
. X2 i( I, D) i1 W; s更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
* E: y5 h8 x; G5 h8 _' a/ h9 Y0 g( P7 P
有错误请指正。( H$ [- I; o1 n1 J9 j
- I8 r( |& p& C4 n% }
补充一些命令: V0 \$ w8 g- a! i' F' j
9 u, z" I. y/ Y' i! I- g% w"wpclear" 清除所有监视点
3 u F/ b% U) t `& X" `$ |"wpenabld 数字" 开启监视点
' B. H3 l: U0 g+ ~"wpdisabld 数字" 关闭监视点
: i; S8 d L2 |* u4 K: D"wplist" 显示所有监视点* e; w. c5 M. c# f( K2 U/ g
% I4 \# i* p3 H" A6 p# M8 }% R: Z; e8 r"bpclear" 清除所有断点- x! }# l- c; k: o* v- q$ a6 t
"bpenabld 数字" 开启断点- }/ A# E, D/ p% Z I# K. x
"bpdisabld 数字" 关闭断点* C4 J% c) c% K; s% ]6 z, Y0 d
"bplist" 显示所有断点0 F& C' y! }9 o, V. {
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|