签到天数: 1945 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
/ n; G ~: K4 |4 l3 F% x
: O1 {+ x8 I$ d/ `, |5 R8 r(1)如何加载ROM
1 q& ^9 q2 B1 G8 Q; Y2 T( E. U- D0 D, a s8 _8 R; `" u
先说说如何加载ROM吧' Z+ O% o( a+ @( E+ g+ M: q6 ?7 {0 Q
7 i# \7 E7 }+ |. I* S以MAME 0.148 DEBUG版为例:8 v- ~: {- Q8 t7 ?
( Y5 w/ y7 {& e% G, B7 X& P
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html6 C5 Z6 g4 u0 l8 j6 V5 W( p
1 A1 G8 M$ S/ v0 s) R注:MAME官网的MAME是命令行程式,没有GUI。7 `6 }' J! o; w1 X- H( p `
5 ]' z h. w$ `4 h6 w! i5 |" g# O! ]2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;& X( `3 Y! z% K* V) f/ Y) _
2 _4 Z5 F- I! |: [% _: y, e+ T* H
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:9 S$ g' B& p _! c2 e: m( X) a. z
/ ~" k* \9 _$ _9 z( P, L- md:回车
; ], h L$ X8 F; j5 m8 X& g
! |: f' v3 n' [- Ncd mame0148b_debug回车& W9 i3 c. C5 B
0 P9 c/ H2 A) h5 ]如图1:! k; J3 c& R+ Z8 T
% Z3 z( h6 B6 g% w" t2 j
: |- s5 o+ c& q( y6 b" D" x4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
# |' R6 {! i3 U# U. t9 ^# b- K0 a! |; f/ E8 j9 E$ S8 g" Q
, ]) I9 y0 w6 q
2 P% r- q5 I: Z) h1 k. @5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
9 d! j( N& T( L% M# h! ^- @
+ P) V# C7 x7 j, \& I/ _6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。' S1 V+ `! n! f, l5 V8 X
* x; g* U$ x* r& Y* p( B9 q
(2)如何呼出/隐藏调试窗口
! {+ {" @* A) O/ L# L6 s% J3 Y J
+ w; B1 L6 {2 ^1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
' q( b9 y' X r3 B7 \5 d2 J( o2 N: d' K# T
# C, h1 K/ {- c. X H$ K' K: l6 s* H( v8 n1 c/ |
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:7 s4 T, O' Y* b4 J! V; w1 X
+ E- o Q3 ^5 l2 p) @# s0 R2 r, P- J
7 r) g( m' X+ X+ f6 S6 k( d# `3 ~, P+ M/ f0 C) P* f
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
% l+ } P0 d R! {+ R! F3 m0 B
( T d2 d* d [ Y5 Q3 ?" X7 c6 G(3)如何下读/写内存监视点以及程式地址断点9 P* h) C1 Z( O: q% q6 V0 q) ]
3 [# R! o' ^9 y' {5 j4 D先说说如何下读/写内存监视点吧
& w" V8 p. g" _' f
- R9 d8 ^) z* F$ x* K- G监视点命令格式:wp <address>,<length>,<type>,<condition>
. }$ w1 c# ?- a3 M/ s6 V5 V, Y' P8 Y: v" V! p4 K) I. e
<address>是地址
% j+ `/ I6 `9 B8 ]$ F4 l* H/ T$ R# G) w( Y: }2 i
<length>是数据长度,长度必须用十六进制表示
, C# @0 l& J# O0 H; ~$ N6 y/ b& j& F/ _4 X3 g5 [8 i
<type>是监视点类型,r是读,w是写,rw是读写
7 b W' y1 t8 c/ n: r1 T! Q' k. T$ z1 e, V. e: g
例子:
6 G' I+ R2 v5 q* _
4 F1 ^* x2 O. ^例如对ff8569地址下写监视点,数据长度是1个字节
9 x6 o! i+ R) X5 p$ N# y1 Q6 s9 W' _, w3 P; v8 t5 A
wp ff8569,1,w
% j4 j0 k6 P6 \: P& ^' }7 {; h# c, ?- g2 R: {7 m3 R
例如对ff2235地址下读监视点,数据长度是2个字节5 g4 [* u% @3 f# B8 h
. {/ @8 h( t! U: E. rwp ff2235,2,r b- _: D6 j0 b4 Z4 ~$ G `
8 D: ` Z( q! L- c2 j例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
3 k" T% x9 Y" |
, [7 l; _) ^3 _9 W* swp ff7533,1,w,wpdata == 0
1 W4 V6 D8 u& Y8 w# @7 ~
+ K) |8 m: Z, K; |" C- D: d- z以龙王战士日版为例:
. u$ @" i" B) M; N7 ~/ z& a& q1 @
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:8 h+ S; F3 e! V1 E6 b
# ^' r8 ]1 w# E4 k' C% ?
( j9 }9 e6 M# F# P9 z5 u& ? _; c
, i' b I1 g/ T( ~) w; Z- A
' w, R- {1 q% v7 _7 ?% f, l% `2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
* S0 z+ A2 D! y8 H( M7 k7 w. \; p8 v& E- O) D( G* s
" R6 m5 O$ }& \# E: G; }* z B5 a
/ I9 w% n* s( B1 H
接下来说说程式地址断点
: Q% e& B) ?. f& _4 q, E8 Z; a x) L) T# {% }8 ^* w
命令格式:bp <address> z8 Z6 v- [8 y
0 I/ A7 Q8 U; @9 e; O0 Q
例如对000488汇编指令地址下断点
6 O- _; q: M, y% y: b# B* P! M
- o+ V" `* b2 X4 V2 Ibp 000488; n+ R* O4 |8 |. h+ h( _3 s
& W! q2 Z. L B; V8 Z7 y当程式执行到000488地址时就自动中断
) `6 Z: u( z _0 @: l% V# t7 Y B- ~6 q( |% n, m
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
( H& X5 p; P9 t
( P2 a' a. R7 h3 R有错误请指正。
; z+ H2 Q; @8 x4 I+ D2 C" ^
1 I9 @- `! C# z% W3 o补充一些命令:0 g+ |1 }, U1 [( t+ F( ?; i
" F# m, W0 r1 p' U% \"wpclear" 清除所有监视点9 V# C+ Z, t9 l/ ]$ @4 r
"wpenabld 数字" 开启监视点4 h7 R! Q1 O7 C9 q! k% S' R
"wpdisabld 数字" 关闭监视点: U7 ]- z9 V4 [: m3 ?
"wplist" 显示所有监视点
, m% M+ y7 k! }0 `! g
6 T# `3 r4 r$ F Q0 |# s4 x5 r"bpclear" 清除所有断点2 S' J1 L7 s7 s0 U
"bpenabld 数字" 开启断点& c" L9 a6 g. t
"bpdisabld 数字" 关闭断点
% s+ t, |7 e! c9 k"bplist" 显示所有断点
% l- u. u' t9 Z! o1 m' f |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|