签到天数: 2052 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
% a- g+ D! ^" ?5 Q& \3 ?9 ? [& R$ [2 p/ K' O% p% ?* n O0 ^$ {
(1)如何加载ROM* l2 M* k+ F# v
3 |4 Y- n m5 d' @" C, S2 S0 a: x先说说如何加载ROM吧
. Y! k, c- z$ |. G2 h5 O* r! S9 x# h! ]! L! Y9 K# m: H/ i
以MAME 0.148 DEBUG版为例:. l1 k5 ?. x' K4 C
) Q9 l" G$ Z, ^) E3 {2 @& ?! p5 P
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
* g7 n2 l* w. K" E" Z7 a' e% x2 [% ~6 D C. C* f
注:MAME官网的MAME是命令行程式,没有GUI。; O1 Q2 C# O/ v4 D
@" H: J, p) K& {
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;% y/ l2 }4 A9 e' B4 G1 F- X
' x5 n4 w* R1 h8 ~3 E
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:5 T) @/ i- k% S Y
* c6 [% @& Y1 p- x! P. c; p; g; I
d:回车/ r; a7 P% \; C( n
* `7 _9 h7 e1 K6 V" ]$ S7 F$ y
cd mame0148b_debug回车# r' T+ t" m3 s2 Y$ e, W' ~
8 P4 m! T0 I: j- z如图1:! W" s0 r# G' S5 e- c
9 j5 s9 a; _3 W+ O" k1 p5 r4 Q
; k0 u% I5 s' x( [5 ^' M; O$ y4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: c: v k6 [+ Z* s! u# R" p3 v9 @" J7 e. Z1 A6 c: K
7 W" Y% M. B/ h
! b& Z" k/ G2 ]! L9 z
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
7 L2 |5 I) G5 P: v5 p8 q6 f, e. Z8 ~
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。# a8 U. V" {% s$ k. O! {. k
. E9 k+ G5 K7 r- n' n4 Q* o4 o
(2)如何呼出/隐藏调试窗口
; ] P& b8 v, i, F' r: g0 ?5 ]/ a: ^ m4 m3 S
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
D/ N( @2 [3 v# i4 N M- S
1 W/ a5 L" s4 n) |1 |3 m3 g) r, w0 o& @) s9 o' \. h4 `' p. I
7 X1 I% b$ K# E) M" V% c
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:. Z4 t- J) K7 `( a# U- H& M8 Q
. U; ^# N1 Y S6 U p
7 H B9 g: x5 }& D
2 ^# M4 c4 N/ o( I. o4 D. m
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。8 E9 ]; `- \9 L
5 Q+ c2 D% {- K9 L' k(3)如何下读/写内存监视点以及程式地址断点
7 [7 G6 Z: K ?$ M" V7 N4 @, ~3 n' }+ t4 F- A
先说说如何下读/写内存监视点吧- D0 D, _8 p1 g' o
: F( ?) ?* R7 P
监视点命令格式:wp <address>,<length>,<type>,<condition>
% {/ R5 _* O1 ]* f3 e3 M- { _- A( q4 I. Y- G$ E, ~8 v) }
<address>是地址
) x! W$ q6 B) J. @1 a2 T3 Z8 R$ N: N5 T- ^9 t* @
<length>是数据长度,长度必须用十六进制表示4 x4 R+ J3 _( i0 R5 m" J5 {
5 Z* v3 P2 k: T% @3 ?' u+ F
<type>是监视点类型,r是读,w是写,rw是读写
, B& ?+ i' U1 B& [3 ~& b8 M' r, \5 B: F- _
例子:
7 _6 Y* v) Z) C3 G1 i
% ], u" E* F- A, P/ \例如对ff8569地址下写监视点,数据长度是1个字节) u5 `4 v3 M; K& @) z' v
' @9 c% m3 l; u0 y3 ?* U. awp ff8569,1,w
7 }! _* G; c: P! b
9 X6 \- B# {; O+ u例如对ff2235地址下读监视点,数据长度是2个字节
& }/ ?# Z) @) I' B5 z7 M! v4 m' @1 c) }/ \. _
wp ff2235,2,r# e! ?# P [* r% _1 X: Y
1 H( y% T% n9 ^& m3 z$ v+ a
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
, E' I' Q$ | y# i" _: g- u1 H
$ d. C! Q" d" r: ` Z1 x4 Zwp ff7533,1,w,wpdata == 02 C k( w& }7 y9 J
" y; o6 @1 Z2 h4 Q' f- }9 t
以龙王战士日版为例:+ H9 d! l7 h: w5 k% a7 `
6 a2 x3 D! P5 M+ v
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
x( N' @7 V' m& I* }' p8 y& l9 K) l0 y
M6 f6 n: K: g' q. @6 a, ]( s' ~% C' w/ h: Y
& q2 f" O I+ s: j3 A/ t9 E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:' n# _, y6 ^) u- p# W
* J9 I0 _+ m7 V( y% A$ L9 a
/ [ Q4 A0 G* w" u. r3 D- `& L9 s2 [7 m1 }
接下来说说程式地址断点
. X: ?# `0 o6 @7 ~/ I( K [# \1 h: g: n
命令格式:bp <address>
7 Y* E- b5 y8 M* M3 B" w% Z
5 w. C {( [# C) Y6 }9 {7 R" k- m例如对000488汇编指令地址下断点1 i4 E8 K7 D0 E1 M2 s" m, a
( m" T' g' e% N: J, p, x# [, [4 Dbp 000488
7 }' v3 J0 ?3 _% ?
/ u4 i( R2 c% N" O7 J当程式执行到000488地址时就自动中断- s1 {" O* I; Z- z, \. l2 ~ [' E
7 ~( }) g! ^: n, j& M: t! N更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看; T! G4 b$ \2 b! y# z
& Y( w9 T5 g$ {& k% z& O有错误请指正。" V) q: d' V9 k \1 Z. y1 a
) ~( V1 v( `: N, A" x6 [. Q补充一些命令:& b; G" v3 W# R2 {& G
" K) Z8 L: n9 h6 o6 H, D"wpclear" 清除所有监视点+ V! x5 [6 |1 p |* c7 ?5 z8 t
"wpenabld 数字" 开启监视点
2 m% Y- x0 l$ u# T: j' y* _+ S"wpdisabld 数字" 关闭监视点
% V7 h) w$ q( R# K( |; J& R"wplist" 显示所有监视点* [0 R t3 s, n+ n9 X$ C
& Q N2 z l" T% [7 r
"bpclear" 清除所有断点- s% L \( M, I. S
"bpenabld 数字" 开启断点# C2 v* G; Q# A+ x3 K& r% q
"bpdisabld 数字" 关闭断点
\' c& r Q+ K0 v* t6 Q/ s"bplist" 显示所有断点1 g: k; Y2 f) _! |+ e' R4 A, ?
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|