签到天数: 1826 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
8 x! j" l0 {- M
" D/ J% j2 p5 J1 W- a7 W, V" Y7 b: ^; Z(1)如何加载ROM
% D- l4 x d# z/ r8 z4 P) m/ I4 F/ d' z6 W U) ~/ ?
先说说如何加载ROM吧4 A6 Z+ u6 u6 a7 Z8 l8 d- E$ [$ u
; Z- T9 B# Q+ O( r4 V; a$ ~7 ?
以MAME 0.148 DEBUG版为例:
* Q6 [; ] I3 N+ i# R% n% s* T: r5 `8 s" B; Z/ {
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html8 Q( x$ D& O4 L6 Z6 t4 ~# n
. Y% X* I9 c; y5 R$ p4 b0 O
注:MAME官网的MAME是命令行程式,没有GUI。
+ Z& p* A) K' w; {& V0 T
. u8 u+ u" Z; D$ Z2 @( m2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;2 L- K* ^% h e3 H* C% U1 S3 N
4 w/ G& J3 C# f# K. l3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) U9 D8 ?% ^8 n* e0 o0 Y, T! g
+ p [: J) C# F& {: y+ {
d:回车
7 }7 X1 l; c% ^0 W" N5 ~7 ]3 B, C I, X
cd mame0148b_debug回车
* j8 N( T5 I* c) i ]% x# F' C" t, U* R
如图1:
7 m& \1 p8 P2 T7 D9 t
+ ]5 r0 j0 N; p; t% B; z: k, \! `, C* a( }" i7 }& y
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:6 c( D9 c& J5 V! Z2 k
; K% ]( P. M2 S( A. ~: q8 g
" g) P1 p) I$ Z8 y f1 f3 r
, J k' j8 E9 R' q5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;. _% q1 h) o$ Y6 ` T% l" F
2 S) v( A, t4 W9 f3 |5 A6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
& x- D* }4 Z6 Y* a/ u8 k
( Q' ?( J6 @" f$ g(2)如何呼出/隐藏调试窗口
. }1 A2 c7 R/ w k- j! C
2 j; P/ h2 v' q) }2 f1 v0 q% d1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:& X2 ?% Y- s- g9 q# p3 I& F* ^1 Y
' _. p7 w% H1 X3 w! Z1 O* W9 ~5 |
: Z* G& m' ^9 W! C- l+ M4 A" j
+ L# j2 \- {5 t7 }4 W; R
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:% t2 B& e" g$ S, m/ W( `
: E- w& Z8 _; [( z
7 E- w4 `3 U U( Y7 c
% j3 Q3 I" E+ L8 F, p* z* Y
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。; p2 b! v/ v4 N% H
; G% L* w) o( ~2 z6 u(3)如何下读/写内存监视点以及程式地址断点
* {1 V* W( K0 ?3 n* d f0 |9 G8 v# b* u9 X1 G7 m/ I. x+ [
先说说如何下读/写内存监视点吧+ C+ s2 [2 a( `6 f' M- _
' N1 n8 v& {' c6 u1 d7 {! K
监视点命令格式:wp <address>,<length>,<type>,<condition> f3 q+ [5 Z: Q2 r! G
9 ]- g: b& W; h% V9 ]) T( z) n3 g<address>是地址/ ~; Q- x+ H& o" Q1 f
. i7 n- D1 J) T$ z8 q<length>是数据长度,长度必须用十六进制表示
# x5 j0 S9 X& c1 o7 ^% ?
, b! ^" L' ^* E4 B<type>是监视点类型,r是读,w是写,rw是读写
; ]3 E, l+ }' d# R% r
2 n7 l3 J' H- F; [$ @例子:' @' r0 K- F+ k. \0 {" P; C
7 P' Q5 q7 Z7 ]6 Z例如对ff8569地址下写监视点,数据长度是1个字节
' X( l8 u' H0 N
% q( ]5 N$ P/ ~. e9 t* xwp ff8569,1,w
$ f+ {' v7 E* d& l: V' T
1 k4 Q4 b2 O: M+ K* U例如对ff2235地址下读监视点,数据长度是2个字节. {) x+ e4 C; B0 P) P7 G* m1 D
- B/ l8 Y1 O D" O7 ~! z& g* p2 Swp ff2235,2,r
2 W. [2 o2 b; |% |8 l6 r
% }( j4 e6 j8 y5 v/ E' n0 R$ Z例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
: [) a3 x6 I8 z8 Q+ p5 s+ s" u1 A$ a; |6 }, s. i8 Y! p r+ v
wp ff7533,1,w,wpdata == 0% P& ]2 ?, {- i2 l
0 ^4 o# {5 h. E9 Y6 W& [
以龙王战士日版为例:
1 A3 V! S" n0 F' E: W
" W+ c" `8 N+ x) f1 f+ h% W1 T1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
8 m0 v5 j' O2 s3 x1 Y, F2 W
2 ^4 s3 C4 v' Z5 V9 S
& n; [1 C* ^* W
- Z6 d( x3 G! I- J( Q6 J3 |+ F
4 r, _7 x0 |0 t7 P4 j2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 l' G2 k( r0 x) p* H! P$ Q) b+ _
2 G& @/ [0 S) u# B' L! q; z1 t4 D6 [; n
! h- G! k3 M; J" B D R* |
接下来说说程式地址断点 ^+ {5 s3 Y7 Z
! Q1 c6 n6 n; n+ P o& ?
命令格式:bp <address>% d# O0 k7 u/ f5 {9 h+ q# L
9 n8 s& H# N& |( C/ P; x/ {
例如对000488汇编指令地址下断点$ i; H% n/ P( t3 X# j m
7 M/ g e% h. |7 ]/ z" j% Abp 000488
2 c9 m7 v+ v0 [& X8 U a1 g1 x* n* p8 A6 _; Z1 N. X( M
当程式执行到000488地址时就自动中断
% z- t1 @8 ~" t5 Z: Y
# [9 I/ I2 A; j* E( Z更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看* D3 f; t/ R3 O3 U8 d3 e
% ^0 }' {! T# R6 D+ Q
有错误请指正。+ ^/ j, W4 ~9 s' L; Y
. T; J4 i) C- c; O* S! a
补充一些命令:; J# B* S7 w& \- j. ~
/ B% z' p0 U% @"wpclear" 清除所有监视点8 l+ o5 e0 p% _; T
"wpenabld 数字" 开启监视点
1 K6 O" ~& d. s. R7 C8 K* P7 S/ L"wpdisabld 数字" 关闭监视点4 { z7 c ?/ A3 F' |' { o
"wplist" 显示所有监视点
9 R9 W6 \ B. \/ e+ u4 ?6 P0 ]9 a
"bpclear" 清除所有断点
; c8 d- t( Q/ v7 y. n"bpenabld 数字" 开启断点9 Y* e3 }2 i( ~' _
"bpdisabld 数字" 关闭断点( k6 x1 T8 }! v
"bplist" 显示所有断点+ F9 L) f; f! y2 d2 @
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|