签到天数: 1868 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
( Z" J/ Q9 n* M5 n/ O& ?) P. f! A. f5 a6 X# S
(1)如何加载ROM f; f) x& H; O+ M7 M+ L. _, A
7 f! c8 h0 W6 k, w4 W
先说说如何加载ROM吧
. ~: X/ @' o) ^
$ R2 ]& L' X' e+ h以MAME 0.148 DEBUG版为例:- l2 z+ z# P( J
0 X3 Q3 A; V1 }# ~; A
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( J2 A$ X+ z8 f5 `% j$ t: l0 ]( ?/ }! f! }7 V, ^1 }
注:MAME官网的MAME是命令行程式,没有GUI。7 Q# y+ r1 d( @6 q4 V7 Z
; G. u! [, X. t) Q$ A0 g( B7 C2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;6 r: h. D3 O2 S+ k: h5 q0 Y: r& s
! ?* p2 N$ ]& u* p8 Z4 E ]9 e3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
" Q( m X; J8 @' {0 y5 J; X! V) {0 t/ k6 I* B& u7 H
d:回车
0 |! v4 Q- b! b1 e* n% e
+ n( S! l2 G4 O' m" D! ncd mame0148b_debug回车+ Y4 v% x# W9 R* A b( B3 Y/ o
* i, n* J0 ]4 v$ G- Z- ] `如图1:
* o7 u6 e0 ]% ], p4 C$ Q8 K
) c7 J( U- H* v2 d0 S# w* f% ^7 I* M# d3 a* h, F/ G
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
5 P+ q) I C$ h% Z5 C- x) ~4 ?4 m# O5 n: U. f) u
/ D; C* m- j8 L; u4 `9 Q2 A& t& e
; A# H1 u' A" k% N6 a5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;) p- X& c/ h' I6 S* H& u
8 [8 r$ I+ s4 a/ N
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。( v5 W: o5 p# q" a8 ~/ ^% v
9 v( O4 E/ w( N6 M' G' p, j: `* ]
(2)如何呼出/隐藏调试窗口" V1 T2 ?, c" \9 A3 J
8 R. s& \7 j1 a) C9 G" w
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
& L; y6 Z* b7 _# ^( C2 B; B7 ?( d
& Z) a/ P1 A4 `4 B' C/ f+ F$ L3 {1 }$ \& k# B! F
4 Z1 z/ W( \ [4 u- t# _! {) G8 v
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:0 G- s1 U/ \* ~3 F7 l& {! Q
/ L* v- y$ D' u6 N+ j6 k1 G: N
) R! c0 U0 B9 L {8 [) u* ~' J7 C! H. B3 \: `7 f2 N. x
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
0 B: \5 _5 l4 s! h d
. x. ~4 n( L) t$ g(3)如何下读/写内存监视点以及程式地址断点
' b& ^# ~, C. c0 A3 e2 S+ y2 p3 \$ N0 e% f( z- V
先说说如何下读/写内存监视点吧
4 W, K) ]; y! D1 w* S' [. x+ t% R( c7 G0 P9 e) k. \/ f7 f
监视点命令格式:wp <address>,<length>,<type>,<condition>- @- x! I( n6 s. N# H! c2 }
* K( y- s, c! T6 m% Y+ ]# T8 G<address>是地址
4 M" A. c. D9 n. @' o$ F3 G8 G8 x% S8 \. }1 E% i H4 J' n
<length>是数据长度,长度必须用十六进制表示
* O/ j8 k) w* k" i
6 W; b1 O5 L6 K<type>是监视点类型,r是读,w是写,rw是读写
% D9 J, d" M1 M! D* ?, B- j8 X" a B$ J) B, M7 }! c- S3 K
例子:
1 j4 Z* n% q# U; p- c' _. J
2 D: }" Y& @# y3 ]3 i例如对ff8569地址下写监视点,数据长度是1个字节
4 A P6 }6 W- j3 M) S) y% {, Y2 k6 X8 `5 \7 _; B# ~, {
wp ff8569,1,w. `: H/ v! q4 J* l/ m* f8 I
3 Y3 R+ W& b( a- W7 J" c% M8 x& _例如对ff2235地址下读监视点,数据长度是2个字节* t* r% n" V% H3 B% K, O. P* m# O
, g! _0 t6 I) J ~3 Cwp ff2235,2,r
5 n( } K- p2 G/ t$ Y+ }+ n8 p4 I7 r5 a% C4 q7 I
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断/ G! V$ O0 ]( D/ v7 I2 C* t1 _
9 \* F- _& @% [* X( O
wp ff7533,1,w,wpdata == 0- ?1 Y1 t0 @) }7 ^
9 j% ?: A) v" b5 n1 \3 ]0 M
以龙王战士日版为例:# n5 K) p/ _$ b: f( c
- R( C# r0 m& k7 L1 H7 \1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& `* k$ _1 k/ `/ \
( o) W5 V. G- Q* m W* L- Z3 ]
8 \% u5 ?' B, H, u8 N
" U& b- a9 | C, k; b2 L
( Y* y4 r# V. ~+ n2 t+ S; g2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& f+ I3 j3 S7 ~3 \! s
( [! I/ r- I7 I6 u: `
q2 B. y$ S8 }7 e" |
% B; x ? X$ D4 X ]% ]% L
接下来说说程式地址断点( K; v( }7 R, p4 S( n/ X
, D7 a# j+ Y# l. v# w" V7 ] q w命令格式:bp <address>
) ~$ y, h1 j# E& C! s4 x# ^" O: D+ l( y P9 P# v1 Q+ i1 O/ M" R
例如对000488汇编指令地址下断点
0 T/ R" v! t3 v, R# s3 h5 |1 A
5 n1 V" P$ k$ G# c0 @( G( mbp 000488 C; C- O- m- ^0 ^( T
0 M- S" H! \- h1 p( E2 ?当程式执行到000488地址时就自动中断- L0 S5 d3 G( q0 V. F, J
4 A, |( ^/ M5 p3 X8 r4 h. o/ j4 X
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看5 N/ {" [: O! T6 S9 s/ _
1 p& L1 j# N8 ~) G2 ^. W
有错误请指正。
( }: i, i5 U: O5 H0 U. i/ ^& F/ X$ z; S- l+ s" _0 U* x* O
补充一些命令:
, C* u0 ]+ @& M. V$ }& c) i
3 I# b! I3 j# }"wpclear" 清除所有监视点 b# z2 p" O: o4 G( W- L0 ^
"wpenabld 数字" 开启监视点$ g9 U0 B5 r. M
"wpdisabld 数字" 关闭监视点6 l' R: _% T1 i& S9 U& U1 R% s' G; {
"wplist" 显示所有监视点
0 |, |, r% @: r2 l7 V" `
/ p I' u; X) L3 j1 |"bpclear" 清除所有断点
+ d/ @' W* k4 f& b9 {"bpenabld 数字" 开启断点& d6 z& K- @7 O% \" S: `
"bpdisabld 数字" 关闭断点
7 Y; E/ T) T# L5 v. N" H3 q"bplist" 显示所有断点
, g9 M% {" i: [6 k# G |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|