签到天数: 2019 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。( `/ P; a5 j, e; Y
5 i% g8 s! L- G u2 T( ](1)如何加载ROM
+ y8 Q" I8 q, M; T e6 p5 S/ O# y, r4 A( Q8 U% t) y. c' _% e
先说说如何加载ROM吧
% P/ p. x; m9 p# x6 s
4 b6 _0 e+ k5 Y, [0 E以MAME 0.148 DEBUG版为例:% }5 t& x* @1 f: M
; s% Q2 U, J7 l& B7 _. @- p5 [8 Y$ P1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
$ t5 z. G! v% g- {3 u3 g/ {7 v: c7 ~. f4 ?) a/ Y1 a! R
注:MAME官网的MAME是命令行程式,没有GUI。( j/ T" u6 Q8 ~4 W5 Z) _
& g4 | S( f8 g: d
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;/ z: P" m3 ?' P# u8 W
7 {( s9 i2 p* y B$ G% v
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:+ M3 W, [# z. I+ Q
, B- H( X5 u7 q4 |d:回车
) V n+ ]0 h4 ?5 g, G, A3 K* }1 @4 D2 |0 v2 y+ y- P
cd mame0148b_debug回车$ l+ r/ [' ^ \& k S1 G. l
: k" l% ]; ]$ w4 N- ~
如图1:% Q1 ?2 Q6 r. T% Z" [' {+ D+ F+ ]
2 {- h9 ~6 ^! n
* l7 ~' N# L0 v b' D% t4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
! d+ u* Z/ b" v c7 q/ h7 n4 f9 W5 i( @3 {1 a! I. }
I8 r* l0 B: d2 e Y0 p g6 N
. t8 f; ^1 Y1 ~3 D5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 h, n$ y! N& V
, X3 R0 H# K% ]( P2 s6 i8 o$ G
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。$ J8 ?1 q# H% @. n& C/ f
' f- e0 H: x6 ~% k: j$ A. ^! N* [(2)如何呼出/隐藏调试窗口3 I" X: j& X/ S- h
2 @2 A6 }# w& `# y8 w; {/ l" _1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
* \# O( ^$ P1 b9 H1 R! }8 Q" e/ M8 A$ `: r3 L/ K3 P
8 U u5 N7 i7 D
3 J% p. @) I/ a7 e# \: j' r
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:* x# F) k- d: ^) e
2 g) w, a- L* b0 K
5 h7 V. m# p% X4 A7 m
5 }! I' P0 d4 T; Z' U5 v3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。: @0 p- V" D# f- Y# J
( u" v- c+ s2 ^' C- S: h
(3)如何下读/写内存监视点以及程式地址断点
% c4 \ z2 ?; G! Y( ?8 n$ X9 C7 e: q; i$ o7 R; p
先说说如何下读/写内存监视点吧
: J" x* I5 D$ a5 }0 Q. H; y" V) c( {# |: n! \2 j: I9 x
监视点命令格式:wp <address>,<length>,<type>,<condition>& F1 g3 y- _ j, A7 J
, [* |& @6 [+ ^; Y% }<address>是地址
: M. x+ f2 K, f. }
5 S/ J6 T5 G J8 w9 \; {4 g8 ?<length>是数据长度,长度必须用十六进制表示
8 ]+ z; o' o7 ]% n# |* e1 B! X
. C( T" `: k3 Z- M W. v<type>是监视点类型,r是读,w是写,rw是读写/ ]( E3 Z, s; }2 C, D, |
; G1 S) f7 Z) m1 r3 v
例子:
" S7 Q5 Y: Y# z B0 }
8 S( e& b1 n/ ~例如对ff8569地址下写监视点,数据长度是1个字节, n. N, S; s: s W, @5 O5 \
- ^( K' W6 \& D+ o) twp ff8569,1,w6 ~3 _5 O( A. b( L7 \$ G3 t
8 w6 {& y! }3 ^; k6 ]例如对ff2235地址下读监视点,数据长度是2个字节
7 v, _" w6 i( p) F
# p( A! R1 k9 F" L( F. |wp ff2235,2,r
2 J& Q2 ?6 ]8 Q- T* P: Y" ]% c9 q) n; U$ O# X9 v
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# ^- x+ Q6 i% v( E3 m
, T( R \$ v5 f7 t9 v R& Q
wp ff7533,1,w,wpdata == 0- G7 @0 K; a/ W! x. B* T
' o& @( v! s/ w, ?; \$ ^$ N% i
以龙王战士日版为例:$ `5 m4 S- C) ~/ p5 H
/ P4 f, |* N% }1 K. Q- b1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
0 Q4 G `, V' T. S2 k! ^( m
7 l) B4 a `0 i" V9 t
5 o8 c' n8 ]; x% i% z' F$ M+ _8 b) g% E9 c' z
& G: h8 J2 ?% |
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
% B" K$ p1 |3 F1 X% c2 p( Q: B2 ^, L) a5 [$ `8 y: {
. d: O7 W2 V8 U, e! T4 a
& \# }# r+ V8 k
接下来说说程式地址断点# \8 Q. x2 D' |( t8 H; L
+ d( f( j& @( j2 n P& W
命令格式:bp <address>' p6 Z: r& C0 y" g! s
7 |3 O+ K+ U9 h7 Z" g" c
例如对000488汇编指令地址下断点
7 K) b/ l( p/ X
J- K* ]9 P5 Z' l8 J0 gbp 000488" w1 Z/ R a9 M4 D4 c* Y9 f w
, B7 t" f+ `: K0 F2 C6 j$ T8 y5 a当程式执行到000488地址时就自动中断: a. n6 h! A3 A8 L0 R( b0 ^- o
5 D: s. d2 X/ _9 K G更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看. |0 p D' Q, d( A) Z4 |7 H
; F( {9 y: @/ C& d+ }3 E5 w+ D
有错误请指正。
5 B" j- ~( U; _$ A
) V. n, C0 C/ l) ?2 c" F补充一些命令:
7 r/ ^! _3 e! k: Q+ R4 }
, F& E' j" w9 ^, r* X6 i+ u5 _7 i3 l"wpclear" 清除所有监视点
3 a5 k7 z% I, Z& A! }. g& X"wpenabld 数字" 开启监视点
0 ?( n# G8 \, O) ?( p6 ^% l, f7 M- |7 Z& ^"wpdisabld 数字" 关闭监视点5 S, }% ]* f6 H
"wplist" 显示所有监视点# J% w: p# b! b9 o. P% z- L8 h3 Z
9 p+ O; Q& W# z' P& Z
"bpclear" 清除所有断点# V0 t% K% b! B' S8 m2 F. h
"bpenabld 数字" 开启断点4 n2 k+ o- R% Q, z+ e
"bpdisabld 数字" 关闭断点$ C$ }; B4 l: k4 @0 H% l; O/ e
"bplist" 显示所有断点3 a2 U+ e. d) E) Q% Y
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|