签到天数: 2105 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。7 m+ }: F) T; ]) X8 Z4 e+ k
. T. X" F* n' m! S9 R(1)如何加载ROM9 Q3 }* L/ k- R* \* A
/ ~, j7 h! W9 r. h; k' z# [! V
先说说如何加载ROM吧7 `& j) E# s" Z7 f% d
+ i" h e+ X0 Y- X- A$ f( s2 ?以MAME 0.148 DEBUG版为例:' T9 x9 t7 L% P5 J
/ I* O: k5 l5 q P9 y1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
* f% D/ I# M" J: q
1 P# H, w0 l! d$ ^+ B2 D, A5 [ l注:MAME官网的MAME是命令行程式,没有GUI。
; S: M, e, |3 M& |$ ^' N5 j6 d R) M+ T& I$ d" h4 B
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
1 u3 p* A3 G: `, t/ s8 W; w" k1 d( @1 c. y
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:# @& N# A2 d [5 J$ g% B( R9 }
! \: n' J, x, }/ v
d:回车& z. d2 J$ W' a! N/ i ]: p; [! T6 ?
3 b3 O q$ }+ I7 e5 K9 T) U
cd mame0148b_debug回车
) l! r" o( h* `8 D: {0 e' I6 I& F
6 K( b9 X9 @' K) L( C+ i, S1 a( T如图1:- Z3 B5 M; O1 [0 d R+ z
1 q3 k* v2 P; j4 R. E8 A
]1 V9 ~0 F9 I4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:4 r5 J" j! R& @% O" R2 Y; r
+ o9 e# j, X2 G# d. N/ k5 y' e, H
6 ^! s6 G' i1 e: a
% _( e a& \, P# h0 I
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
/ p) o8 _5 [. w
5 d3 ]. Z. I" }2 k6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。+ E9 v9 S2 A4 q9 @: q6 o& t) K
! p% U! p/ J4 A
(2)如何呼出/隐藏调试窗口# D6 @% T+ t7 q! E+ R
1 f1 L' m! ~9 r/ w# t" ]8 z1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
' p/ X5 C$ Y R
" d7 r4 x9 w2 Q$ H1 N& f7 q: G% V; \, {& H! s1 T8 a" Z7 `0 \& W
( e; {/ f/ }* [. {) }6 l2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- a* l2 G0 {* l+ B R) B' O' I6 }6 R, r! z: g
% y( [$ S5 ~9 W* Q
* i" _! I; w4 o. e3 y# X; Z3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。, W E. I) l! v4 S' W7 t! I
+ I# t6 l$ g0 U1 r( A! I
(3)如何下读/写内存监视点以及程式地址断点5 A' c7 r9 Q, r" K4 U! g7 J# ]6 y
* |( D! k. q6 c Z; y( P先说说如何下读/写内存监视点吧% _! E- V' c U6 ?, l& Y: h1 Y
; A; l# |! {1 {' ^. ?9 S+ \, ^3 }, V
监视点命令格式:wp <address>,<length>,<type>,<condition> Z& f5 x" A4 N
% i! X# }) j7 G3 m# L4 O
<address>是地址
! k9 n( a4 k5 s& z* s0 ~' `9 d) |; l: [" h4 P4 U5 h
<length>是数据长度,长度必须用十六进制表示* ?# J. W; P4 q3 W4 T( o
; \8 H7 g7 }% }8 ^
<type>是监视点类型,r是读,w是写,rw是读写( f4 q& Y5 }" ^
2 s) C) H; a0 a0 x
例子:
4 k. S0 C* |5 E
% Z0 ?+ c7 i3 I( P5 [例如对ff8569地址下写监视点,数据长度是1个字节
7 v1 w0 I% [3 _
3 s/ b6 W; l$ P9 k$ Gwp ff8569,1,w
& [8 b! l6 @5 P% X6 V! V: F3 @$ N
! `3 s6 r. ^3 e/ k+ N7 |8 q例如对ff2235地址下读监视点,数据长度是2个字节8 V% A/ z' f8 \: w& h4 C0 s) B9 @
/ B3 _1 P s2 D6 Q5 j3 [1 e/ Rwp ff2235,2,r
5 E2 H. B- c# s# t" ~+ T: }6 r7 X0 ~2 e; k! i" j+ m
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断# I& R2 ]& \& {- N1 n" N' k
4 T! H* |" n6 h A# }" P: t
wp ff7533,1,w,wpdata == 0$ b. m H) V. F1 P# q* Q+ P
0 Z8 P, Y# l# j* l以龙王战士日版为例:
( ^, o0 I& h- I e) l9 L7 T, W% @6 m. u5 G7 L
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:0 [. H0 t! {2 r( Q0 j
8 H. U g# G8 W" o4 A/ u( I3 ~5 x5 J. a
0 M$ i4 @4 B1 p! @) }
2 T* Z& ^' |) o/ ^& \
. f0 j8 {( z. t4 t4 c! n) x* |+ k
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:0 T s* J5 {. m! W) k
, h4 M7 L, G# U5 I. f* _% r: Q
9 }" a0 J2 {0 F" r" [: j5 C* F
4 U9 s4 O6 N& q! e9 p3 q$ r
接下来说说程式地址断点* R+ E+ q. k& \: e+ |* Y
" c* y! u. {% p3 w命令格式:bp <address>& P# |. k8 u8 ]7 l
/ R R9 j" z3 l0 j& b: D. r" m
例如对000488汇编指令地址下断点
" X/ j7 Y, B+ ?8 z* t! q. }7 c; h% x1 `3 R- {# u
bp 000488( Z6 [2 B9 l& D6 c( L, \) v/ k. b
" A5 ^) C0 a- A
当程式执行到000488地址时就自动中断
! J; `7 w. K4 S1 ?, e1 N. f) U! b/ {- c/ o7 I$ b* ?* y7 S
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
3 d; ~& V5 ?5 Y) |
: `2 }) q9 u; e* K: A; L0 f有错误请指正。6 Z# w" b; D/ B- G5 e
6 B, s/ p/ X" x5 A9 M补充一些命令:1 D* x( I& ~3 p8 i, c
p6 i% I" E& V! }7 P, ]4 @"wpclear" 清除所有监视点
) n9 \2 {% ~, c+ h; q# t4 a"wpenabld 数字" 开启监视点4 h" H2 s8 T6 N/ o- q( r
"wpdisabld 数字" 关闭监视点 k+ E! C; A' W# w0 k
"wplist" 显示所有监视点
1 r7 m1 a1 K. \7 j
; w& I$ ^0 w7 T% R% k; A"bpclear" 清除所有断点
) W: H6 f; m0 H$ T"bpenabld 数字" 开启断点! _: p5 T# A4 g6 Q l
"bpdisabld 数字" 关闭断点
. e. w7 w# C- x$ p! F) d"bplist" 显示所有断点% {- R$ \3 Q* b5 m; H- `' o
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|