签到天数: 1770 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。# K4 h% V% b. s: P" M$ c
* M8 V6 ~: k4 }(1)如何加载ROM
0 |/ p; F3 R) S+ L- ~0 u
0 d7 y! c% r+ W# G1 C R先说说如何加载ROM吧
; G, C7 \& \6 b+ ^: T% T: e2 Q8 r. o/ K! j
以MAME 0.148 DEBUG版为例:8 F% S% Q i- `, u: X M+ ?( h
" W# X4 L3 Z/ s I2 @% R
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 A: O! J! v3 e
8 P" ^" X1 g! Y% d. s, o
注:MAME官网的MAME是命令行程式,没有GUI。
) |0 O: q3 a3 S% V% N. V8 Y1 k8 I' m' W1 D# b3 G
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
" A, b/ P) ]" s; g% ^. ~* L5 H5 ?) U0 g( I3 u+ P0 D
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
5 `! m0 Q: |% h$ n; ]
V$ n7 J9 c, Y- L& G- q8 _, Fd:回车! z5 M, f0 N" b. W' o
+ |& e6 F, Q) _7 S! pcd mame0148b_debug回车) X6 y. U' I6 f* }
4 h7 D6 L3 @) h' A7 U) e+ _
如图1:
6 q% e& Z/ T6 ?) y4 n6 S s. ?+ X$ T% V
( @1 O# T2 G0 L5 T, b- f
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: a1 a3 O) p1 Y% b+ t
2 t- K9 B: Y7 f, z- P; v& b( D7 S( C
+ y9 G; X- K) e
0 e. S. F( h* N, n% H' A% f5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;& }- w* R2 O. E8 ?/ [
5 B, x( ?& |' F3 s2 D& c
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。# W6 Q3 R9 h* D' J+ H2 Y
+ O# O# o. J" B ](2)如何呼出/隐藏调试窗口
: q3 ], e8 \" B+ I! N3 C" F; C4 f, j. {& W
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:$ z# z2 e7 f/ w
+ b9 ^, N. l1 O$ i2 X: ~/ q
( w! a* Q$ S3 {* }. _- L$ A9 c0 j. }; V& G$ u
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:9 |$ M# d7 d( G
7 P0 S$ }9 e; H U" v9 d3 R) c3 I( ?% L4 K, f
& K- {; \5 V7 `9 u- \$ ^( F
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, j$ T2 a2 {; n
% X+ r& o+ H" Z5 K! l( T: @' H(3)如何下读/写内存监视点以及程式地址断点( N: Y$ p, W) z0 G+ |
, V0 Q" W) J! B: b先说说如何下读/写内存监视点吧# r7 q8 ]- G! t2 j3 e- V
7 A8 m$ Q2 M8 V2 p# k5 t) p监视点命令格式:wp <address>,<length>,<type>,<condition>$ U) w# Q7 f( }" _$ x+ M
" Q: f7 Q. V; y! i8 Q y a
<address>是地址
F: o1 L3 }# i2 L. U; [; u$ T# m
|7 X, L/ I- r7 b% w a% ?<length>是数据长度,长度必须用十六进制表示8 v% L0 W* Y* \% L( ?2 U
$ g2 t1 d0 i; Q) {9 P, T<type>是监视点类型,r是读,w是写,rw是读写
0 G7 q- k9 j$ s! b1 C v; w/ a
* {* x. b Y" m* X. d" t& O0 e/ c例子:
2 T9 n6 M( P' [/ H% l
- o8 o5 ?# Y k) K8 W& S! B) Z. ~/ E+ k例如对ff8569地址下写监视点,数据长度是1个字节. ]4 l8 M# ]. D
5 q' `3 I8 g; H! ywp ff8569,1,w, m9 ?' X0 p% j, L
, c) Q7 F# |2 H
例如对ff2235地址下读监视点,数据长度是2个字节
( m2 a! M7 S. R1 {/ Q ^6 V0 s
* _( t, J. _* a; K, s0 j* E7 _wp ff2235,2,r
[, N! j, J: v4 c4 b6 N$ W& r' E# k4 l. B* [/ ]
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( e3 V2 \! z; M, m$ z
5 [0 m1 [7 e" F0 ?0 ~wp ff7533,1,w,wpdata == 0) q$ _- W. |0 X6 j0 d" Q& T5 Z2 O% j
6 r; t, @! O* ]' i3 H' R7 z
以龙王战士日版为例:( s( I3 k6 q7 V1 f6 b
" ? u+ U& Q+ O7 K4 N7 o* s1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:3 \: }& P5 m% F) Y" y. t
- V- W6 L3 t% k/ a8 c6 b$ D7 L, ?: p7 \5 r" ]% o9 M$ n
, w9 O5 B- z2 v# t
: u g* m( X- e4 U% q; U2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
; j8 C- O" ]" n( y7 [+ Z. j0 L: D$ C- f3 b
9 V( Q2 [( N* m- v2 h( d0 v! d9 p( [) E3 z" Q
接下来说说程式地址断点, Y& C5 K6 k1 w4 q
) k( f) v6 S' s" j4 y" l5 t3 \! {
命令格式:bp <address>3 A& i( M3 G, A4 p. v
3 V4 [6 g. h& \& z例如对000488汇编指令地址下断点
2 R* g! @' e8 b( O' y9 {6 J) B& i% _) L. E- w, n, j
bp 000488
5 G9 a$ w5 I i& k T, h r
+ [/ @+ f* N3 p' q! U& ~! L9 E: J当程式执行到000488地址时就自动中断0 A0 A8 p/ M7 C) x. x! Q, z
5 ~5 ?% c" n N/ M更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看, Q4 N5 W# F( P9 i) B
8 j6 R& }2 w+ I8 l6 P
有错误请指正。
5 g6 a# A* A3 v6 C( ^5 {- P& Y! Y6 x& |
补充一些命令:2 `$ p Z" U% A+ X4 e, N$ {& J
6 n! C- y9 W6 Z9 f* K2 `. u9 J"wpclear" 清除所有监视点0 m/ I' W- R$ [: F7 b
"wpenabld 数字" 开启监视点
# E" j1 U4 t& }; x- Y, r"wpdisabld 数字" 关闭监视点
' g* N+ n. x) \9 J"wplist" 显示所有监视点
$ O! J( c0 g; L, W) n4 {5 _) S+ @2 e& k, ~$ D& V! \
"bpclear" 清除所有断点 L' U! O( P8 d1 b! Y' s) O2 ~: l
"bpenabld 数字" 开启断点
0 M, f0 x7 S; j; c6 E/ a: h4 N% w"bpdisabld 数字" 关闭断点/ N, f+ b+ M* s% u% O. V2 @
"bplist" 显示所有断点; K e# h0 g1 d; W0 I
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|