签到天数: 1909 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。6 E4 o+ G6 h" U {8 E7 n3 x
) o S" C4 I8 B8 l- G
(1)如何加载ROM
: ?2 n% G. ^7 O5 g- Y+ N$ U: n
) e4 Q) B& a0 h/ u& ?6 H先说说如何加载ROM吧6 X3 m& T6 ?. Q. d
/ ?1 t: {% t- Y以MAME 0.148 DEBUG版为例:
6 B, h" G# R9 F6 C6 Y' N- d+ X" ~" I4 g& y: ]3 k+ f1 a4 D& ~
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html: [1 u& W; I6 f3 c* N2 S& ^5 n4 t2 x
5 S# h. Y. c% Z注:MAME官网的MAME是命令行程式,没有GUI。
* _( [2 I; Y. d
; Y0 I! n3 \6 r+ X ~9 {$ f; W2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
4 G& J% R! I5 t. S% z3 M# g& a5 L( B: i; ]( e# f8 K- \% X3 U
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:3 [8 z% P5 U/ y& q7 N
! c0 c+ v% _1 R$ }
d:回车
* Q0 O; E9 k2 o! y' n7 H
3 L4 U, @+ ]1 acd mame0148b_debug回车2 `) r, R+ p4 V. k6 n
' b+ Q" m' m6 l7 Q$ M. B7 P% ?" W
如图1:
3 _. b1 y+ E# q8 J) k+ V
8 u( K6 C0 ?# S. t- h) F
6 ~; m( W2 ]$ C+ ~* x8 \+ w; ~+ ~4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:; Q% S1 t0 M( }" B% [( G
& P, T% a2 n+ x x6 z, G6 {/ B" i
# s; i2 G" f/ M, C/ k( l! C
3 u% O, X/ X' {7 ^1 J' H5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
) R3 S: U# K4 h7 B+ ~- U$ @0 Q8 Q' c# }* D/ O& m6 d' y- k5 R3 ?7 \
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。6 ]+ ]1 C3 x$ D( V8 O0 e4 \( h
8 _$ R' W6 p4 ^( a0 O- I# K f8 G
(2)如何呼出/隐藏调试窗口
' s6 W4 ] ^' I( q' D
" S3 Z/ q; k* t" F1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:3 `. C/ ~3 H9 Z" E: N' m
4 p# h5 _* d- a) q& h( U; q; @+ z# f# D X/ I
9 A0 C1 L6 U) u9 v; S2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:! J# c* N5 q0 _- \" \/ n
9 N& \4 \& V6 h# P! X n" c
; P. ]9 b `8 F
/ ?' \: c+ T* r& u3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
8 Z$ ?3 b4 H; q/ s8 G+ S7 b# d/ B# H
(3)如何下读/写内存监视点以及程式地址断点
" e' N4 H8 _5 | }# R
) f" P7 ?& _" d. b4 G0 F. E( o4 q% b先说说如何下读/写内存监视点吧
- Q% O, ^6 U1 z$ T& W+ ~: x9 `% I1 ~# m2 H: l
监视点命令格式:wp <address>,<length>,<type>,<condition># H% y! N5 Q3 l# }
" f+ `) D. i$ W9 g0 z" ]
<address>是地址
+ n* ~! }" e$ D5 u3 c' P
6 }, i" \" b' ~& R<length>是数据长度,长度必须用十六进制表示 f ^# Z# u$ H& v6 w. A
. @, K4 n9 |0 U- C<type>是监视点类型,r是读,w是写,rw是读写
+ P; d- A. B3 t# s
& t2 v7 t+ { c' N, r3 y$ j+ O例子:. @" p6 J' {/ j* X* n
( @- t& Z; n0 b+ c/ c8 H4 r1 m例如对ff8569地址下写监视点,数据长度是1个字节
( B* j' |1 M, F4 J2 E6 g2 a
$ C6 s3 {+ D- {, [wp ff8569,1,w
+ I0 r6 q( d* o6 a, Z8 A3 ]$ }+ u$ {( `, e& c
例如对ff2235地址下读监视点,数据长度是2个字节* e0 ~# @. C# R: D% R7 W* } N
7 L- t/ l$ u( P9 P6 ?3 v, w
wp ff2235,2,r
# z' T% X7 c3 L8 a4 ]/ ?7 N; x! E& x- Y$ H: |9 t' C1 R
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断( \9 e+ X7 \6 S4 j( U' ]
) c: D/ p Z4 d( L/ D; P6 n5 B6 Owp ff7533,1,w,wpdata == 0
& f6 @6 C! d n7 {$ Q: _0 V- \' D& E- C0 x' p* C& Y. s9 s. G
以龙王战士日版为例:( n0 t& i1 w4 h7 {
6 q3 w% R) r, L6 l
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
1 a" R+ e0 t7 b. k l3 y9 ?& Q8 l3 @+ d8 R4 G$ Y
7 P) J- ]5 ]$ I# i
% L0 w7 e, p& ?, d1 U/ e+ h
, w" Y: U* {2 p5 j) l2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:+ O2 v* Y- B% b$ x( n
3 p8 e- B: y h2 t9 n0 o" N& |* G; i& R1 F. f- b
/ k/ M* c+ O& b4 r' G4 C6 i5 V2 r
接下来说说程式地址断点
, A3 o) \) ^- ?: @7 s! g _" b1 j9 E2 f3 i
命令格式:bp <address>
- Z1 V4 U& D9 R" |7 o( x
% e+ E9 C+ B7 a; Q6 ?例如对000488汇编指令地址下断点7 p7 v, }- h, z2 A* U ]
! ~5 B, n. @+ c J7 ubp 000488
( R4 v# K8 ~# m8 j9 V
. N% c* c* \) i$ _, r当程式执行到000488地址时就自动中断
4 R- ]' `3 }6 @7 U2 g. l' ]0 e; ], d" z* [$ c9 \. @6 O
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看 Q- F- d3 [# p
, e9 u3 E3 N% ^9 P有错误请指正。6 e% D) P8 O) T* x, h9 r. U/ E" K* A
+ D& P) o, i9 N* o- _) Y# N补充一些命令:: _! ^3 I7 ]1 {0 i7 C
; O! X/ Q5 {& e j8 [$ X3 s"wpclear" 清除所有监视点) o- I1 u. l& H
"wpenabld 数字" 开启监视点 k; y* i; o: c' R* F* S5 Y
"wpdisabld 数字" 关闭监视点
+ P9 k) E" [/ T2 h4 C+ W6 D"wplist" 显示所有监视点
6 | X% h# Q/ a4 q, K- M# H- t! Q y7 x8 D3 a1 N
"bpclear" 清除所有断点
* ~+ m; x+ d9 R0 _# }& I$ [4 ^"bpenabld 数字" 开启断点
6 S I |4 Q# E; u"bpdisabld 数字" 关闭断点
+ Q5 L+ f2 h; m! D"bplist" 显示所有断点
0 h/ O7 ]8 Y" R |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|