签到天数: 1869 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。4 r: L5 f6 u8 w" e7 q! g1 w& E
8 O" S8 i5 Y" B* t. v, v( H(1)如何加载ROM
: u: Z) q8 t/ y' H% x m9 p2 W
, H$ z: ]8 {( L$ d, }先说说如何加载ROM吧' ^, m* B$ `8 S, ]; D |/ l! N
7 H0 \8 W3 N% j5 g Z以MAME 0.148 DEBUG版为例:% @$ M/ W; |5 z4 _. _
7 j. X5 b- _- e$ A$ Q% k S
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; q! Z' {4 _: M$ q4 v. A% `- N' j% S( S: _" m+ j# H
注:MAME官网的MAME是命令行程式,没有GUI。: R( b/ P. W6 E7 Z: `
6 J. H1 L5 ?: t8 ]" i6 U' U2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
( \- c& A' z( o: } u; e$ `" r q& I6 |; a
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入: F7 i* N. ]! o
/ D. [! z# A) h/ O7 N
d:回车
' T- U( R' o/ h, U+ R0 [* l
6 i3 O. r. U1 pcd mame0148b_debug回车
3 f" p/ S$ J a+ v f- Q- X
" z3 {: @( u$ R如图1:5 S# P( B. e( y) E
* a5 s. Z9 \- b( m! p- \
1 B' e; J! d5 N8 w4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:" y; w/ n0 { f3 Q3 Q3 B
% Y9 q3 t! P8 f/ N; _' _0 U. h: P9 o+ g, W
8 z- [+ s& L1 Z8 b, i4 r
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;. L" @) b# ]) h! T+ a: L- T4 \
4 P" i t0 j) a5 Q+ s! V# b6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
) f. {" I( y5 V9 `
u5 j8 g& ]9 m(2)如何呼出/隐藏调试窗口6 h$ f' e7 d7 g1 Q' F/ c+ v
3 H8 g `+ j Y
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
% ^- P7 @5 a! ` I* y
5 x0 G& r, F6 u9 A2 t/ t# F5 S( ?. o4 I/ t: N* v, c1 q4 ]
4 V& @ m- w1 H
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
2 p% _) ~/ C0 h7 D1 H( v, j" c( O2 }6 P- v( v! N
1 G. i; Z8 Y6 F, |( f- a
) D+ z$ k- |. V& z: P3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
$ J0 I: S& O X: z, f1 D7 D( p* q' Y8 H' g- I
(3)如何下读/写内存监视点以及程式地址断点
# x r- ^7 c" n% U1 W' t# a2 Z: B
2 j/ f4 ^* l" t! }! U% o! {先说说如何下读/写内存监视点吧: [5 k% \/ [, D, Q6 F
! `( A( l6 \9 I' V) T5 r监视点命令格式:wp <address>,<length>,<type>,<condition>
- v0 \2 b+ a. b7 u4 @
0 l- d" R9 |) D, E( Y: ?, k<address>是地址- f/ R5 O9 e1 ]: n
' w/ W7 a) x1 U8 S0 {. E<length>是数据长度,长度必须用十六进制表示
! q3 j% F7 z5 t4 x+ a
% Q2 L7 M! M" V. b<type>是监视点类型,r是读,w是写,rw是读写2 o2 s0 Y! M0 b* `$ j
) i7 N4 `* x8 Q$ Z
例子: n0 ^3 g- @' G# X5 o6 ]
" j3 m4 y* _# I9 V7 I例如对ff8569地址下写监视点,数据长度是1个字节: W/ J! q" |5 J0 H+ B
, d: L6 j/ W6 ^& j% ] W2 ^8 c
wp ff8569,1,w
) v, W' N& ^; @$ G- A
1 W9 _7 Z8 b/ z; R( z- a' {6 b例如对ff2235地址下读监视点,数据长度是2个字节
' ~* y" S! l5 D
0 I3 \) N, E( _( n9 m" V7 swp ff2235,2,r
3 L& ]# Q- C4 M* T4 j2 _6 V8 T
2 \- s8 E* s0 p6 {0 O例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断: |+ _0 b! x* t
1 @3 O3 i1 f9 @ J9 \" Z# G" A
wp ff7533,1,w,wpdata == 0
4 a( u$ B7 R a6 Z, T; Q8 ^/ k, c* y% H
以龙王战士日版为例:
3 _0 @* K. M3 w& B$ R; ]! p$ [+ \; Y- l$ k$ _7 W; G# X
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:& o2 ?+ d7 r, W7 T4 J1 P
8 q3 G: T- p$ z% V% t/ b
6 [6 Z, b; N( d# I/ s8 r! q# u
( b$ K6 x7 c" N5 J5 C' p1 A; v
: A. b* [: j& v$ c; W- p6 C$ k- l2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
, S' E. @* m! l% \" y; L8 s! \' |, K E( J4 o6 v$ C" l8 q& z8 v
4 e) v' a! l% q h# e6 m: b" ]/ ]5 X
% v+ _$ \5 W' C1 R, ]接下来说说程式地址断点3 E9 Y. C2 I+ h; ?8 p- D4 }* N: a" K
- S# V" y$ e7 @! x# V
命令格式:bp <address>5 J! t8 v+ T7 X2 T3 }" d6 `) l! m9 Q
, q. H; P4 q3 w7 a# h% @- S ]
例如对000488汇编指令地址下断点
: e$ ~0 G; h5 a, g% E" p6 x
1 N4 f4 O* w) g: l. d/ P* Ibp 000488, Z4 e) \! b3 [
8 i$ Z! v4 D3 X4 Y
当程式执行到000488地址时就自动中断 E- e( @& u: z5 R- ~+ c
/ M; M( x1 w+ e0 e3 u- c. B更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看" [6 v1 A6 S4 U( B
! g8 N# S9 |: R: j4 ^9 s C& S6 O有错误请指正。
7 P( r) ~) u5 {+ f5 ?) U4 B3 q6 T! K3 h, e; R/ I' [9 H4 t
补充一些命令:0 R' d8 |) e6 ^: }3 w
2 W+ n( W' c1 g; [; h7 V2 O& P7 j
"wpclear" 清除所有监视点
M/ k5 K& P! S0 N& P8 t" c: t9 n"wpenabld 数字" 开启监视点
" j$ Y5 M8 T# U2 `- a* j"wpdisabld 数字" 关闭监视点
( d$ c1 E \# i+ }) b% p& ^6 I"wplist" 显示所有监视点0 X2 A5 e p% |; M* y6 L
Z0 w: s& ]/ ^$ v' f* h
"bpclear" 清除所有断点
' I# |- k& z0 n) N1 v p2 E"bpenabld 数字" 开启断点- ^9 t |; ?' R4 w/ R( m! {" o
"bpdisabld 数字" 关闭断点 j; X* T5 _. I P
"bplist" 显示所有断点
5 L& j6 u$ l6 Q& i( w' F. R |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|