签到天数: 1930 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
B4 c& q" D6 B2 N1 j. T }
1 h' j' w8 S+ Z+ q(1)如何加载ROM
/ z9 O6 {2 G3 Y+ u* W
' d+ U! s: `8 `. U; n' }先说说如何加载ROM吧
) N* d9 D2 ?: R$ p: j; y8 B, D; _$ z! R1 c7 }# W' E1 ]( i' ]
以MAME 0.148 DEBUG版为例:
1 m& J5 Y# h4 |7 p! Z: t) G5 F3 N Q) T* V$ h! {
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html5 ]3 d. S/ I1 y/ G q; k' U
. l* n5 X4 J: X6 z5 W9 c# x注:MAME官网的MAME是命令行程式,没有GUI。
6 @5 W6 r% _. ]% ~" G' [. \
9 q7 X2 h+ Z- Z; b% m+ O5 c2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;+ V0 B, L, k t& C, q
8 s) L* v3 M+ q. d) B: v/ k3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:1 [* a4 C K3 T, r& e
; D m# q: R) vd:回车
9 |. h6 m8 R) k& C
3 Q- ~5 m3 n$ m- o9 icd mame0148b_debug回车7 S i3 m L# L/ I- ~
$ @( Q& Y. ~6 s$ o9 p, x. E9 w如图1:
1 X9 L, p- H+ {# h( [& L1 L2 |# r
: {# S. |% \ I, H) V4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:) h. W1 ?+ V2 K7 f
# Q1 P, E7 J( C; T a! w+ ?) j4 n
1 a& Y& \. {2 w" L4 P
6 X0 d) j; e8 g0 a. ] _7 M3 w) u6 k" u
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;8 n( s2 J0 w$ b q7 ]' I/ K) w
- ^" L# ~7 o* @
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。5 l& o6 x: Q/ r1 `
5 {6 ^1 b$ ~$ e5 d+ [8 X V" {& f% z2 U
(2)如何呼出/隐藏调试窗口( C4 @/ {! O" K: L
7 j3 P' d& K) F* F, l- {
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:5 _* I) r& q# u4 M9 f. V$ R8 f
. ]: r d" L9 l: v/ q. B/ f; ]; U9 J
! B/ O& ?" b5 R/ V6 M
" g" ?3 g+ r- k% f2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:7 ~% p' y- g1 W4 o3 j# H4 ^
+ g/ p3 R4 v6 m2 k3 o+ y
$ _& K! Y0 p- v. o$ s9 T
3 {0 A% _" X; f& k# U3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
1 ~+ h1 I: \8 y G- ^+ F" u& E9 B8 e9 Q$ l- i# m
(3)如何下读/写内存监视点以及程式地址断点: I# t5 v- D: h# d7 t
% a" q# s" U1 E% ~" s
先说说如何下读/写内存监视点吧
1 K$ H! S4 ~7 ~( {
4 r! a' n- X# q监视点命令格式:wp <address>,<length>,<type>,<condition>
+ R: Q9 ~% e3 K0 e* a& M
8 e$ C- q2 P! m. Y<address>是地址, F5 M* D6 j' h2 ?$ |
# j& H8 [ y; i3 s7 j+ t& K- v: a" ^<length>是数据长度,长度必须用十六进制表示- ~8 n. ^; q2 D& r$ t* D3 E5 [- R+ o
K* s1 _5 V! O9 c2 p" }<type>是监视点类型,r是读,w是写,rw是读写- y( A5 n0 h. D* D
' Y, N3 `1 y k2 q ~7 a
例子:
]$ Y" ?8 B& K4 p5 C" Y8 q) P
$ [9 i% _( U/ b. m例如对ff8569地址下写监视点,数据长度是1个字节
7 r7 h# z9 O! T2 ^/ j. @) S& w# ]1 v/ E0 R& T
wp ff8569,1,w8 X8 z1 _# u( o1 t4 D6 u
0 ^. t9 M' y+ M/ k+ i
例如对ff2235地址下读监视点,数据长度是2个字节& g2 h7 j! |3 c, y- x
/ W/ M2 A$ I7 Y; a! c7 k- _wp ff2235,2,r
, [" _- M" y; ]' g/ n. D* n
. s/ d- F$ Z* t+ H+ F8 a+ r例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
0 L6 ?2 a, Z0 q8 H' _3 H/ f5 Z& s+ [% g' v5 a ~1 `
wp ff7533,1,w,wpdata == 0) B/ X) H; N0 D6 W
2 d2 \/ F1 y; G4 b# w
以龙王战士日版为例:/ b! a7 p; R9 ]1 w! p( i
2 c3 U# M+ M p/ ^- ?
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:9 {: S# ]3 [: {1 X" }
. E m. n R9 i
, K& g/ I' t C2 n
, y! t# c- i$ \5 y1 P. A
1 f! ?, f0 A A9 v h3 ~, h$ E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:# ]$ x1 b# Q A8 b5 [( O8 ?! R; @% G3 R
# U! q3 c0 U8 @7 {+ f2 p8 j
5 A' I. D E' p# k+ c* ?( I- l" ~# S I. o4 |' ~0 P4 G& c$ w
接下来说说程式地址断点
/ e3 [& K: |& F% q8 T) |: W. E& r$ E) n C/ L& D- X
命令格式:bp <address>) ^) }4 u ^; l& A9 {; L" m: n( ~
: r% ]# s) P5 B例如对000488汇编指令地址下断点
8 c1 o6 C- M$ Y6 I# U, J/ H" H: y2 f9 D' G
bp 000488
6 [& O, h* ~: A D1 z
0 h) ]4 Y6 }' w: Q当程式执行到000488地址时就自动中断: E2 U2 M/ `2 N+ d" v4 E
0 x1 N F4 z# s
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 l! g$ ]+ w( k% j
( O7 L X# D. @; F. y
有错误请指正。
- m% _4 G& O4 r6 y5 _) ?. h" ~# m/ p7 h5 `1 S' p
补充一些命令:' K7 k; y5 i! t+ k9 e# W
( T7 r4 ^1 l- }8 ~% h
"wpclear" 清除所有监视点/ G3 l1 V: Z: M9 ~
"wpenabld 数字" 开启监视点2 v j3 e. \( Y' \, y* k7 f0 l
"wpdisabld 数字" 关闭监视点3 t% h5 W, E+ t5 n; \' K' M- @
"wplist" 显示所有监视点
2 S. l3 G. c0 Q/ d' M: h6 R* Q
* Q# ]4 ]8 S7 f! m"bpclear" 清除所有断点
4 j' F- g: K' _+ _"bpenabld 数字" 开启断点
7 H0 y4 z- m) j4 H"bpdisabld 数字" 关闭断点1 w. O/ A; A7 p
"bplist" 显示所有断点: R8 U/ h) n/ V+ ?4 i; `4 j& ]0 W" u
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|