签到天数: 2113 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。* l7 b* U$ {4 ^( R8 R% t4 j
5 A- S% h, C) X, Y; L: ]$ y) O(1)如何加载ROM
' ^; `3 l6 w' m& l' e Q' e, a8 i; b1 w; P( f a" V
先说说如何加载ROM吧6 m; }) w$ c j; Q7 {8 J( m* t3 {
* ~2 q8 s- H/ V2 Y
以MAME 0.148 DEBUG版为例:8 f5 h2 B- ]3 z# L
3 s/ z) A4 Z9 I, `
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html9 V$ x/ j5 P* I6 T5 G0 N! x# y
6 K8 g9 k3 L1 {0 x4 ?
注:MAME官网的MAME是命令行程式,没有GUI。
$ x* L( D$ I! {2 A3 D% x3 v) U k, \1 G) F9 O+ Y' n. ?2 ]( K
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;" }' \& E# f' j, i
" o* Z% I. I f* b _0 F/ A, ^3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 y9 r% `# p1 R* L
( w4 V9 Y0 @$ l; f* v
d:回车
0 D6 o! R' X4 S/ }& m3 ]1 I- Q5 _* m& {, [
cd mame0148b_debug回车
1 O) d! b1 H- ^4 f+ w' F2 }9 s. M0 y" U! X. U; X9 [' M, v/ Z
如图1:
/ w1 m9 D/ c2 \* H+ ?! k I* n8 b$ I& ?# G% h" J" f
& q( D2 W% Z$ M, x8 c: ~6 G. M" a
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 j8 `; c$ x4 `# e
. p* K9 w; n4 M9 m+ j Q* m' F4 p2 n' T7 d
, q3 W" v) C- ^3 d5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
t1 \ n0 T% F5 v0 Z: J% F3 N* ~; \5 ^9 c6 s: f1 K c
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。0 A Y2 g% I6 f- i
+ P* j# [& a4 ?' t' F1 m1 [8 @
(2)如何呼出/隐藏调试窗口' P, {6 g% L4 r }2 D4 j4 u( O" A
2 Z9 n, |( A8 [, F
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:) w' q% F- ^; N! j& v
1 w! }2 _) \, g: j* A B2 C+ E
3 U. e8 E' p! r! S9 _+ O# @ L
/ J2 {# |1 d4 u$ _% l3 A
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:( ]5 S# P0 H$ w( N0 F% {
: _% k" G7 k) m3 D3 @( H% N: r4 O* `: e/ `& x6 s% h8 s
( x8 `+ N( B0 P8 |" r8 N" |3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。% X7 s, ?5 r* x3 P! x
4 F2 o* H: Y" v
(3)如何下读/写内存监视点以及程式地址断点
3 _; ~# Y7 y7 b
, ^8 ^; \/ x$ K! s2 c0 L先说说如何下读/写内存监视点吧
8 U7 t: b2 ]0 V% V9 G( L6 _
- @/ h$ B4 ~! x* i" `监视点命令格式:wp <address>,<length>,<type>,<condition>* G$ J; i2 Y" H
. u2 V N5 U7 h; b, c<address>是地址
& w. l4 E. o( o& m. l W& U% f/ t% @/ H1 M1 A/ p! @2 y8 k, L
<length>是数据长度,长度必须用十六进制表示
' J2 ?& v h, m3 i! _9 b" I* E6 C- s& ^% q7 y% h
<type>是监视点类型,r是读,w是写,rw是读写! g. W- u, Y. ~4 P- V$ M- F+ |% f
4 J3 `/ e- t' `9 D2 }- z例子:
/ R0 h& q7 o! y: N/ I. E# {9 s
) Q# n7 T9 s5 V; g% i9 C) G* r例如对ff8569地址下写监视点,数据长度是1个字节
$ w. M/ w# U) E# K3 G3 D, k7 {" }6 s A2 M
wp ff8569,1,w
% O! I' H) p _; J* f; E' X6 e7 j
2 D0 ?% G$ C: n4 l% \例如对ff2235地址下读监视点,数据长度是2个字节5 N, |+ K1 l# Y" i
8 o* ?: a# k/ a/ t k
wp ff2235,2,r
3 E! F9 h' w3 l
2 ^/ D/ i) o" g5 N例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
2 k, }8 S d8 o
1 P9 i) T) g; O) C, Swp ff7533,1,w,wpdata == 0
) W+ y# X. z: r) ]0 v7 ?% f# K; B2 b4 Y) t) E8 D/ N; v
以龙王战士日版为例:
. I% }% \3 b# S q3 V; }% Q% W8 f4 D3 ~9 K! W* a
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
2 X% u3 y" a1 K: _. Q) x/ x6 C; a, ^9 @- M3 k( {/ ^; T
9 e8 I; f& n! O9 _* `# h" f( |$ c& Q6 h' ]3 g9 } V' @+ E& t* K P7 @0 F
8 x: E6 @, A: d" `2 R$ q2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:4 s: v6 z% A1 W- {2 y, E; d! [- F. c
8 j8 B, U9 q$ m9 }) P8 u5 C) A; ]! T
A7 J5 [: x, t( L, I3 j' j
接下来说说程式地址断点
J9 S5 \% Y; \7 ~2 l. ? R9 c W
& }* b" j" v9 j2 N命令格式:bp <address>
, o# t" M" m. D* w' L2 }/ J/ C% i
) G! [$ H7 m9 n' m3 K例如对000488汇编指令地址下断点
. d. A+ t+ g/ j _) G, p
3 F- K! a5 d5 K6 N2 c: E. pbp 000488/ k0 {* d# x# T! @$ ^) }
8 L+ ~8 ?# D3 n- f. l当程式执行到000488地址时就自动中断
% V. I; o" d/ j
2 \+ ~. v6 W* b( F/ B. J( R更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
4 Q0 p2 }. f* Z. N( O; h0 {0 H$ W3 Q1 X
, L$ }) Y+ q/ Q8 _+ `有错误请指正。* C3 K2 B1 S2 h: C
8 ?# S: b1 u5 r1 Q7 u& |
补充一些命令:2 n8 g! T4 U# Q: m+ S3 E/ P" {' Z% Q
3 u p. u! X- k; u9 u- V
"wpclear" 清除所有监视点. c! f* i: K* M" d, z; x4 j
"wpenabld 数字" 开启监视点) M+ I) M/ I. O! p
"wpdisabld 数字" 关闭监视点
- i# P2 O% @2 ?$ X* s# R6 F"wplist" 显示所有监视点
3 b- ~. y" o3 N
! ^6 B1 q. u4 ^+ j$ J2 I3 W7 _"bpclear" 清除所有断点
2 u5 ?. c7 m4 @"bpenabld 数字" 开启断点
- O( O2 K# U. C# g"bpdisabld 数字" 关闭断点
4 c. {1 g, Y6 F8 E( L3 [* ~+ v+ ~8 L: c"bplist" 显示所有断点% }1 l% t0 n3 @3 P, T) G6 O% H( f
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|