签到天数: 2172 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。; [. E$ c. ]) K' l9 ~
2 {/ i' p( S2 ]& W. V
(1)如何加载ROM
0 \) {% z0 m' t! B2 B5 F& z% {+ N# \
先说说如何加载ROM吧
9 V/ n% m" y0 m/ N' ]5 r3 C. c0 R# a1 } g
以MAME 0.148 DEBUG版为例:) R1 B9 c1 t& A7 X+ ]* {8 _
) s( o9 G9 O. u& c) |; Y q1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html9 M g% s. U, W3 Z) D: ]
8 k+ L5 G3 S4 O% I* c8 ?8 L* A
注:MAME官网的MAME是命令行程式,没有GUI。) K% z* D8 S9 T2 s$ c+ z
) E* ^3 u4 j3 o5 o
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;5 h6 ?" B0 B" }. r A+ d) E2 `
4 ~- Z0 T5 S$ P9 N ~7 p" O5 @% Q
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 {5 w4 h/ c9 z
; G$ A* m+ q: C! P4 ]/ I( Z
d:回车) r4 T) J' [) T0 h
) U3 J: {" P/ ^- t% B
cd mame0148b_debug回车: J9 }7 I, K/ n
. Q2 ]% B0 }8 V# I$ v2 w! r* N$ Z如图1:. m: i) B$ `$ v$ w8 t0 j' q4 [" z3 }4 Z
& {: k3 h1 T- \& d1 M
( [. o6 D: t0 y% k* Q% S! p4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( L1 E! f8 Q: T, X4 M' y# V
. i. w0 H8 o) E; H& a% ]$ r9 i1 O7 {# B( s) }& Q+ e2 }3 t
4 f) |" x9 p* b8 {0 K7 a
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
! V% `& h6 ?1 D3 U8 B3 o, q- M$ U Y; {8 R
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。' m; f3 h0 n; _; J5 F ^
9 z% A6 y. \: |0 |. q(2)如何呼出/隐藏调试窗口
0 U( w" K2 B+ C# G' i
t: W7 q; `6 t8 y4 I! |* n- q1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3: U5 Y& y3 @2 z$ B
3 Z" I5 S1 @9 X5 [/ n
4 B2 O7 ?/ m* d+ l) m' J& D, ]; l3 M8 B/ J0 e4 m" W& a/ H
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:# S) \ h3 l: G1 Z, r: ]
5 H2 x/ q7 h3 t
/ g B/ _8 p3 u' E$ p2 D$ ]* \7 y! O
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 \. @9 e" }( n7 M" N5 E$ U, g3 y* B8 O+ L$ n( n% @: \3 ]
(3)如何下读/写内存监视点以及程式地址断点
8 L' f: X! m' {/ B& U7 Y$ f3 F( g3 Y" G; i" |+ B& v
先说说如何下读/写内存监视点吧9 n& v+ Q. q$ X4 ~4 M. q/ J" A
/ c* _% Y/ w: _
监视点命令格式:wp <address>,<length>,<type>,<condition>
$ j& @" y# ?9 r. C: j: k& M/ T9 g5 ?: O; |
<address>是地址
1 T' s) j. E$ k6 ]7 q& d8 k+ J' y: E% a) k# M$ }2 `0 ^; c+ ~% Y
<length>是数据长度,长度必须用十六进制表示
# }( P6 v2 X5 k7 X$ I
4 h0 ?. J; b/ [<type>是监视点类型,r是读,w是写,rw是读写7 R* P' q O5 C7 P5 ?
5 c) Y1 U3 ~# r9 G7 B2 q
例子:+ c( x( a, K$ r; D+ L
; n' z+ K! z% ?2 ]例如对ff8569地址下写监视点,数据长度是1个字节
- Z* n1 w- r7 Y
U: t: E) l, ?, ?, z& Twp ff8569,1,w; H# k" }( h3 o8 r/ x9 E8 O
) ?, p: b, _" F8 o* X
例如对ff2235地址下读监视点,数据长度是2个字节: ]& Y* r0 Y" e4 S3 M
5 {" `; Z" e$ twp ff2235,2,r
n* c2 j+ ~% n# k N) F& w( s/ @. t l1 u9 l
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断4 D/ n$ \7 \$ S+ g
& [: c1 l5 T1 D- Swp ff7533,1,w,wpdata == 0' F% ~: Z9 U9 s: H" P
) L& r+ W2 ^ Y! V2 o
以龙王战士日版为例:2 @# R6 S3 a7 u7 R. ]
/ @8 o- {# B& t; x- J8 v; Z+ R6 P
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
# ~2 | q; P! e- p$ i T) m: e# R d, i* a: T- p! G
6 W, c. f; ^" C. x
% i$ h* k: w% i/ ^) M0 W1 @, ~
# L; n. Y6 X4 z* I" u8 c2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 Z0 G4 T: D( {1 C5 {2 p: X8 }1 s' E3 N2 h0 F) H
! L: V; ^$ _0 A3 s% e3 [8 j( n7 V
0 I4 f& z# [ @8 w: f' n0 v接下来说说程式地址断点. ^* z9 x+ j" s& i- l
! }- V3 q* x: n9 O0 F
命令格式:bp <address>2 K: a; ]" Y3 m
) `0 E! r& f, h+ `6 L |9 {+ `例如对000488汇编指令地址下断点0 m) |, b4 O3 P+ X- f# n! b9 j
1 i* z* E1 D% ^9 i# r" x" {
bp 000488
+ r9 p/ G8 z- o, z( z" h: e
7 X; [4 G* U3 G* H当程式执行到000488地址时就自动中断
0 d# c5 P5 ]/ V4 E1 R+ Z/ C
1 f+ \/ [. ] O- j% z3 X5 J0 u& e更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
! ~3 |( Q$ g& s ]- z0 v- Y. V% z" ^+ }3 {' ^ t
有错误请指正。
& p( H6 R7 x" d% N$ x( B# y/ o H, X4 D4 V; B% n
补充一些命令:8 u5 v- F9 y1 _9 }$ \3 v0 L
: l5 Q/ s5 A9 P; U) d7 k
"wpclear" 清除所有监视点6 O! T6 }; x" B
"wpenabld 数字" 开启监视点
& J+ |7 g( k9 I) Q& G& z"wpdisabld 数字" 关闭监视点0 H: G9 a+ @4 L+ g6 j
"wplist" 显示所有监视点
3 A. v6 X% O& u3 v! \( {
6 h5 d6 ~# }% `- {3 m"bpclear" 清除所有断点
1 {& ^* t0 c: O: n, W"bpenabld 数字" 开启断点) Y5 ]: ^- b% v& `) O
"bpdisabld 数字" 关闭断点9 b, {) p' j9 U4 a
"bplist" 显示所有断点7 r2 g2 y: X8 W" t9 Q1 b+ k( X
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|