签到天数: 1952 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。* H3 S* Z: Z2 [$ h7 }
. x. X, D6 B, q, N9 O
(1)如何加载ROM
+ h" f( E7 h) d9 W& s! d
) H: J. Z* h) [* g先说说如何加载ROM吧
9 a. |8 J( a# y) B
5 \ Y3 G9 }& b* a4 s: `以MAME 0.148 DEBUG版为例:+ i; g! f2 C0 I0 y& z, [ T$ r
1 F" J4 U/ n5 m i/ i1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
( ]! S0 B8 j6 R$ B' R+ Y; B. C& x/ [$ ~# s7 N% f; X1 p
注:MAME官网的MAME是命令行程式,没有GUI。/ P7 a7 C, Y# J1 g
# }, f! z$ _2 @2 X
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;0 p8 ~1 R4 P% v4 ?* [; o
) C5 }- ~* c1 f& G* R3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:% o; L0 d) g! N7 Z' ~" `5 Z
) u" q/ [. g" j$ P& J
d:回车6 I, v+ i" Q' x" x) ]8 C& T/ V, c
7 l; J- U6 a2 {& V" F4 F. h
cd mame0148b_debug回车
( ~8 T# N2 N: J, _6 c0 O. m) {
& ?- Z. d% U3 q: o( i [( Z4 q如图1:7 @6 D" x& X0 K2 u
- R0 i% j& o" u) f- I h3 }- O# @- m0 C" Y# c
+ K }0 d# U$ U* H: m6 O4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 x8 f( i- E* N3 B/ A" i( w+ D, Y9 W
; m) f+ F |3 i/ R" u
- A! \- U+ V9 @/ O/ s7 a# O' @# K v
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
1 i4 @$ T- A: X) L! Z2 l5 b3 k& {' u8 v1 H& S4 k. }
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
3 n% v$ x; X0 K+ |5 q# _- d) l) e# E v3 r3 O; p' W
(2)如何呼出/隐藏调试窗口* b P3 B7 L8 I0 w0 p9 {; L
9 Y1 s, }5 o0 r% R) v5 e1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:+ Z1 l6 _) U. x7 r# u4 u
3 N$ ~0 ^1 ~6 v, |& Y
2 B$ z4 n H% _$ i
' X; j7 I- ]5 [; P7 ~" H9 L, g# J2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:0 m; D) r% N- j) m2 |: U
( s! m" e; K. o8 ~# b
% a7 ?# S! f8 R6 \6 n. C; V7 t g! i' P0 t# w# [6 w5 x
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。7 P1 a4 B1 Y1 w6 y( r: |$ }4 }
; \; O: ~9 `: J0 @& A, G/ f3 H" v
(3)如何下读/写内存监视点以及程式地址断点 p1 \/ X% U& f. o. |8 n' v
& s$ U9 C( [+ s, a' h
先说说如何下读/写内存监视点吧
$ H' D9 b; C# X: i$ a9 p5 e- C' K A) B w) h9 p: x
监视点命令格式:wp <address>,<length>,<type>,<condition>
9 r+ e$ `; ~* K6 r3 I; l8 O0 y, \+ U7 E
<address>是地址& v' Q) Z$ D5 y$ u2 X* d' {+ b
G" A3 _; `( o/ p3 L
<length>是数据长度,长度必须用十六进制表示+ F1 m) @2 }$ G( k" l
; b) A; i( o r* C- s- r4 {# H<type>是监视点类型,r是读,w是写,rw是读写
2 c* p3 y c& d9 N5 t Q2 V+ d* |; E# b# F
例子:
' r. d4 Z; l2 c- J# O) K6 X% z! r9 N( h2 V2 u
例如对ff8569地址下写监视点,数据长度是1个字节2 y8 N/ i/ _9 p
: i' r8 y5 C: O
wp ff8569,1,w
8 S* {7 k, j- D- R( I! w! r& x% L# j/ o' G# ?% D3 K
例如对ff2235地址下读监视点,数据长度是2个字节$ m0 ]1 E Q; a' l
& e/ f# |! h9 Y# k7 Zwp ff2235,2,r
6 |+ P- Z( Z9 m& s
9 B+ a! ^* D' b例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断0 Y, ^: U9 U- z. p7 z
- P% u: X0 i, d8 R4 ~
wp ff7533,1,w,wpdata == 04 v: i# ~0 y% z& b0 X% N0 l
) p, o. k8 ?4 f t: O/ g! N( }; R以龙王战士日版为例:
, j: O! U3 J1 s6 ^! ?: {
6 o5 }* P# `; ~5 n6 C! x* ?1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
- f- G( W. U" z$ Q, \2 i, p
9 X2 g$ l0 k6 f+ ]. M# k6 Q# V' [ H Z( z7 t4 s
' m6 u& x# I) G1 N/ b- D, z! w" H) y
2 n& ^. {1 y' O0 {1 d2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
+ o" y! A% ?' R! \3 n+ {9 N: Y$ D/ [7 ]% I
0 H% c1 g/ K) }& ^, g5 a( W
, z; q: R4 @" e- [8 o/ {) z1 x接下来说说程式地址断点
+ R+ W- h# S& e3 [9 r% m1 x/ ?- v( u/ N
命令格式:bp <address>
0 x8 T! t7 w- m5 L w! L0 I+ v7 d& D& l8 E* S
例如对000488汇编指令地址下断点
2 I6 b1 c) J5 g0 y8 e
& t' h. Z. J Nbp 000488
1 j: B3 ^: w( v0 ~( T; b P1 j3 e- c1 _8 {8 t; |
当程式执行到000488地址时就自动中断$ s, _9 A9 U! b) M5 L+ u% g* g
/ D$ b8 U5 |! P, {* N, A更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
- i) W1 r! R/ @' c" E4 E0 f. L. u9 B$ T
有错误请指正。
3 }( h# f9 R( \8 _6 c" `
' l$ T3 B( q7 f; s补充一些命令:
! o9 Q5 w+ p& u7 u# l7 m7 X, X6 ^ ?# I+ m$ r, @1 \8 K
"wpclear" 清除所有监视点
( w7 o! [# `- ~6 J, b, w+ j% ?"wpenabld 数字" 开启监视点
9 P) @% P. C& G( i$ O"wpdisabld 数字" 关闭监视点# x$ y/ S5 t% p; Y M8 y+ n7 D S
"wplist" 显示所有监视点* o, A/ O4 S# v! J8 z: v
" @$ r/ \' Z4 }# G) o) k; E
"bpclear" 清除所有断点+ c! |; P& N0 U4 @" a! m* T: v
"bpenabld 数字" 开启断点, @! c* z7 M' L7 A3 h, x0 D
"bpdisabld 数字" 关闭断点7 _, j) ?. [) H W- Y6 |
"bplist" 显示所有断点
' L% m% q c2 X. A |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|