签到天数: 2179 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。+ L* d* s/ P) N2 }/ ^# i. O4 {
5 D; B }% C& T8 f) d! \(1)如何加载ROM
/ c: E5 x' H! n/ n0 d4 _' n5 Q" d$ a, o% O5 p: e
先说说如何加载ROM吧
* X6 K$ U& ~' K3 R9 t! E, o' E' T" G* A: } S
以MAME 0.148 DEBUG版为例:5 N- R }3 e9 @- C- a
0 j$ q. j# P! i0 A+ `4 X( [1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html2 N& U; e% `; X/ a: [, P
( M2 V) m, N! k8 e注:MAME官网的MAME是命令行程式,没有GUI。
2 Q* W+ w9 p# Q& |4 b4 o
1 Y1 U/ i6 r# f; H3 {0 L; B2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
4 l2 j' ]9 i& [$ L% X$ t# J8 k- v/ e
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:' `6 a2 e9 d8 ^6 c% X
5 W7 H! a; S* q. A$ g
d:回车
( }4 d! U' s) [0 s e# H+ n; K; K& _ C* A( P: o u' t
cd mame0148b_debug回车
q' @2 l$ i8 b7 f
; E: S2 ~: K4 P U8 `8 V如图1:
1 D- q' Y0 p; Z' j, p4 s" H4 C9 O; x" r! L1 I/ T
( k6 ?$ t; C: i8 H& P
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
" Q: z1 o$ y1 ]2 ]
; m+ ^% n, y- e$ V/ r3 ?; l2 T3 S7 Q: W7 [8 R! f* J; K' J* L
8 O3 a% t* |! Z$ R5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
# W5 P6 C5 k. l+ P
* m8 P. Q* v7 h: L2 x- J1 w3 A4 Y6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
# ~8 x' Z9 b. R' j( I- U3 u' ?% J; }6 }
(2)如何呼出/隐藏调试窗口1 i1 r; D/ ?4 W9 P0 X
. s8 V L. s4 a. e( d$ B4 Y9 f1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:1 o1 G* V$ T0 O' V' {2 R
% c2 R4 U( e4 k/ C' M* _
3 D/ F; ?9 C/ a0 Y* Z+ |- Z" T
$ p! |$ I3 u- t! Y- X3 x+ Y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
$ ~' d1 z+ b5 M( I
0 N9 ^' o b- c. U5 o- s
4 p% G3 Q! f3 Q- v, E+ Y7 {
" Z% H; G) [$ y4 ]0 W4 ?/ l! j) x0 W3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 o* y. `' h# U* @( C+ Y
# m' j2 G) o/ x( E1 F" |(3)如何下读/写内存监视点以及程式地址断点
, r5 _5 u1 M p' T% @6 l* U/ _: ?7 m
2 P4 ]1 s* i9 w+ F3 T+ r7 A" A- l+ O先说说如何下读/写内存监视点吧
' ~0 H2 E" }* Q+ ?/ P+ T" \2 V) w0 }' I K( h
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ v X a) P: Y. b0 w& ^! R4 v. y- ^4 ?. y+ p$ V4 K; o9 y
<address>是地址& W) U. [! S! A. i) F
. L6 M! P* G" ^( J) d8 a# x! F
<length>是数据长度,长度必须用十六进制表示9 K8 T( J+ U& h: E( G- b, ~
6 l/ u8 ]& k* Z8 K4 \! \! L<type>是监视点类型,r是读,w是写,rw是读写& V, x) x* V7 ~7 R
2 W% i5 b2 q* l- c
例子:
$ o8 J% s& `# G) C) ^
$ |: G( m, V# L4 y, V# Q( [例如对ff8569地址下写监视点,数据长度是1个字节8 l, z$ `3 v p" I8 e3 q
1 U# a" i. `: Z+ g% b" m) C) U2 Cwp ff8569,1,w
8 X. I4 d3 M) n! \5 @2 k1 W# R6 q/ t
5 K: o8 S% C0 ]: v, y例如对ff2235地址下读监视点,数据长度是2个字节! z. U: i5 k; u+ J [% N# B' ]
; O; F! b% b9 e8 ~
wp ff2235,2,r; ?. @. e; B' \7 q- N2 V
. ?" C; Z0 q8 B# j- C4 ]2 g$ u# j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
, r$ ?$ f+ p8 o! q
& C& h+ e9 \' B B( J5 dwp ff7533,1,w,wpdata == 0# j, s7 w' T5 Q) ]3 Q$ g
" W N$ _ B+ @6 d
以龙王战士日版为例:+ I: \4 ^; g2 l+ I Q/ }4 q0 P
3 H9 a, o. i! K% S& [7 V1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:, s$ Q3 B7 T6 K4 O9 b! a
; S9 h3 H n9 ]' ~# M
2 l2 t, r+ M& ^
0 s& n2 K& S6 Z" ^! x/ x7 S8 g! k1 o. w& J5 U$ C
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# S' l- [9 {: Y
2 z6 s* N( v2 ]
& Z) ^+ h: W* t4 T; F' j
1 |2 J' H+ |5 w8 W接下来说说程式地址断点
7 R% C/ A. F% Z6 a3 v. }& {$ t4 ~" A" K
命令格式:bp <address>
# n7 m8 X& i3 }9 E6 }$ t5 \/ u; Y) Q3 ^3 F$ K
例如对000488汇编指令地址下断点
4 a4 E6 Q3 g4 r! V; f* r
2 H, d+ J2 W: Q9 S- V, L$ Kbp 000488
# k J3 p( ~% A5 _& J- ]8 V) W1 v- u' H
当程式执行到000488地址时就自动中断
5 C. T: R+ {4 n: t. I! R# C
4 ^+ Z- K3 `3 v$ t; J& G' I2 B( y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
0 g* X' U/ h% P9 U0 J! L: l& s
有错误请指正。
' ^" R: \) ~/ G6 L9 K0 B* X/ K0 [, G+ t3 P% [
补充一些命令:
" H: G9 J8 x! h, a9 n! N$ ?+ V) e7 D* v/ F$ J
"wpclear" 清除所有监视点
d0 `' z, ]) u% }) k"wpenabld 数字" 开启监视点
c( \ G, ^1 }( V& A"wpdisabld 数字" 关闭监视点; V7 c1 l. G6 N/ v: n1 n* T; s' b
"wplist" 显示所有监视点
) m4 f) D) Y: ?8 o
% }4 L6 M: i3 u8 H2 `; X9 g6 E"bpclear" 清除所有断点+ G9 W* j( _( n: j2 T
"bpenabld 数字" 开启断点
- R/ }4 _6 M+ `, V( U: c8 Q# J"bpdisabld 数字" 关闭断点* ^" K# T- j7 H! B e" Q
"bplist" 显示所有断点
- t8 _! ~( F+ L' d |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|