签到天数: 1908 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。- t& q$ k C: h+ i6 J: [
# ~7 M: w* \% x, d$ Q* f
(1)如何加载ROM$ `, e7 O7 ]* l# Q* N9 {
) y2 a* F6 S [1 B& S2 a先说说如何加载ROM吧; a' v) Q1 E' P. l/ b$ j
7 t. Y C" c0 |& m I) B \1 H
以MAME 0.148 DEBUG版为例:1 |# }! Z* @6 _. P/ I8 g! g5 e& A" r
) ^7 F, Z3 Z; E4 K$ u5 C
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
1 p. M4 P1 K' t" ~* m8 H& z& V) r0 @+ l3 i! P
注:MAME官网的MAME是命令行程式,没有GUI。+ e& F T# x$ e! ~5 v! A, f/ R: H, G
0 K" r# q8 [3 }4 y2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
2 Q8 Y- \% a8 Y% L" E$ w. w: L5 b, ?: V
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
, B4 u& b- K. q) A' _6 S6 r
* u( D0 X- F) `# N& ^$ ^d:回车. w4 U8 S6 { _* N, w
- x' c/ Z* W4 g( F1 N4 h- Zcd mame0148b_debug回车
5 `9 j( m1 x* Y9 d6 C; Z" w1 J b
( ]3 ~* i8 u+ P, }+ ?) F3 Q; u如图1:* `: `% [" E) b, M) _* ^
4 q+ s8 W' H, e- @3 J
% Q. p- | m$ P( S4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
& y" n: a* Q6 u+ a
4 A+ c0 o* [. G% a% H; a5 e' j, w3 K0 p
* R6 D: g' k! K/ K
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;% r) h- k8 \2 l# Z/ U; j$ I8 p3 @5 |
: H H' w2 @ d5 N+ S6 N1 b2 p1 V
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。; Y9 i8 `) |; I( c" d, p
% x$ r$ _/ q, ^" F0 p0 B0 ?
(2)如何呼出/隐藏调试窗口
; k6 M* P0 w, O9 P6 }7 k+ @; a i4 d$ R n P3 p- G) s8 j/ W$ ^
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
0 X3 o' L. s0 X" y) M/ e, B% R: P) `6 {; F* n6 M; B
/ J% Z8 S$ O8 i6 v8 A: ], A
% D4 ^& H2 {" X t6 V$ U/ C' ]2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
* I8 O. }* l5 X
, u, _! g1 a6 ?: k$ c0 L
$ u' j; c- X& Y" U$ y! F! i! }' b
5 S# ]3 h# I1 r3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
/ L6 w% E# ^9 R$ E' j* y5 D
) b6 a$ ?- P3 h# X(3)如何下读/写内存监视点以及程式地址断点
" V$ r9 A1 }( f8 E
! W) C/ m% ?3 [! p/ w先说说如何下读/写内存监视点吧
) e! z1 Z4 u1 K) U/ m% o- o# I1 n$ v9 s1 c' } [; k
监视点命令格式:wp <address>,<length>,<type>,<condition>) |2 w: |4 l5 P
+ P5 e- p" P4 g5 W<address>是地址' E( K8 z! H. k+ m) m3 C3 g
, n: i0 c$ J4 ^$ }' H<length>是数据长度,长度必须用十六进制表示
+ }& S1 Q9 F4 s+ q6 k R
. W& Z3 _% L ?) C<type>是监视点类型,r是读,w是写,rw是读写
2 E$ K2 s( p. b" V( O( X% M" H. v6 q! m. q2 _, I
例子:
8 A, j8 Q2 Y( M5 x8 X% ]! N5 K1 L# k* K& E
例如对ff8569地址下写监视点,数据长度是1个字节
& G: w a" g% w; G2 K4 O
: `" S4 p2 Y, Q* kwp ff8569,1,w2 ^+ q4 I! ?8 }$ s( u
1 c7 o j' S4 v! \' Y
例如对ff2235地址下读监视点,数据长度是2个字节& o2 e" r, f0 o( c
- ~9 E3 s# R! K& `wp ff2235,2,r5 g) o( O* J3 Y! e1 l' U
1 i, q1 n* {8 M% s1 |6 J! S! {2 A, m
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
G; i0 m5 |' \0 C' x- s: y$ f) T1 z% o* P
wp ff7533,1,w,wpdata == 0
; @% }' `) A' T6 S( a$ B; W1 m8 h7 p! U: u' s
以龙王战士日版为例:6 d0 \' T& u! _9 r. _- b
" e; L# v. D, y. P1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
" `. {1 C6 D( L7 {% [
" o8 k: N5 @0 Z- ]$ b, o8 a- M% E$ b/ ^, f0 o C$ u$ x
/ c# W6 O9 D% r4 N& P* ~! F
- H: ?4 F3 X. ]6 F2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
. J0 l8 l: G" `' E- u' H
' I# f- y0 s/ i4 L- z) ]/ Y C7 O" O9 W' H$ l4 h1 s- L
$ m5 O3 s$ g8 \+ m* O9 T9 n接下来说说程式地址断点
% Y& p, d+ ]( q6 `# ~7 j
: Z- L) [: B" i. @/ k5 [: S命令格式:bp <address>0 _- F8 X* l1 n5 b3 a
( _! L+ P) k* `
例如对000488汇编指令地址下断点
* s% W: J9 {& m# L9 P- t
5 H5 J7 d' H* d& abp 0004883 R! A5 F# }( P3 h# |) U/ {- N. d
# ^% O2 m6 S& H2 I. _4 R
当程式执行到000488地址时就自动中断6 `$ q. A& P9 f4 Z1 y
5 t% a! H4 X3 u5 `- M1 Z" e
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
- J7 K7 I7 g2 |/ K; S' x6 ?/ R6 _) ~5 b* X5 i: W
有错误请指正。! `" E( {! Z& _' z' d4 E Z
5 @/ K' v7 a' ~5 p: M- _
补充一些命令:
3 r8 }- {5 \ ?: [' t4 e4 P6 \5 N% F
"wpclear" 清除所有监视点
7 ?; M# k/ a+ ]0 x"wpenabld 数字" 开启监视点4 O# s2 n6 b) ` z& p$ q$ x: T: y
"wpdisabld 数字" 关闭监视点# S7 G1 s9 [$ _; ~/ w* H
"wplist" 显示所有监视点7 f( g q6 Q! F0 A2 Y9 \9 T
# p* [4 A6 T y: K
"bpclear" 清除所有断点
" |5 l4 F5 B3 q4 s"bpenabld 数字" 开启断点
+ Z* ^9 e1 c1 f9 p" I" e"bpdisabld 数字" 关闭断点3 }2 y# O8 a: Z; k2 [/ v
"bplist" 显示所有断点3 q( H; H8 O' X. J- ~5 E
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|