签到天数: 2091 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
% H* D: _3 |" e* U
, R0 t% j1 x% i& ?9 M; M$ ?(1)如何加载ROM8 g9 o5 s# `' O* B
3 h" L0 E4 F2 u. F; W- P
先说说如何加载ROM吧
4 r) e2 r; S2 e: J6 h# U* I! P; |" S& G' o
以MAME 0.148 DEBUG版为例:
8 Q( |- s- V, p( X9 y6 i
1 b6 F! v7 } L# b1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html3 h/ g) b- N5 e5 a
2 S& K& Q4 v7 \, I2 p
注:MAME官网的MAME是命令行程式,没有GUI。
4 ~/ O' Z- C' b Q$ @3 N% l7 n# @
4 t9 `( t; H' k+ t8 z- R2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;' k4 g3 l3 V6 L# p7 ^: [
0 q3 V7 O( G3 }) x% ?& ]
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
8 u& H% V, |9 |. }$ g: O; ^7 o3 @+ S2 r. h
d:回车
: l1 m. a3 U; W* @7 q0 S$ y5 I. ~
7 v, T4 B" f0 z& Qcd mame0148b_debug回车
# `% M, U$ m( b; u) \+ i9 s
( X( z4 H1 o7 Q# e1 X+ d. z如图1:
4 c- r" A/ u$ x
; e. n% d8 N* r# x; o7 o, V" L1 M! Q- r w2 I9 I" h4 ?
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
4 e e! o( j: \1 @1 Q
* R+ D' \7 b8 C, }0 s4 {. G1 ?" h2 }1 i2 e: u1 o) I
* h) o/ R* \3 D! x3 ]1 E2 O5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;: m* f8 v8 m/ @- ~: U
' z( d: M9 v" D1 H
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
( N; m' V* U0 C& a- u
4 I9 s) ?% ^: y y( V& z" c( b- ](2)如何呼出/隐藏调试窗口
1 I. {# \7 n; ~, v
' w( v- G; }3 I! m" e, ?1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
) i1 v; [# p2 r3 N2 H' M& ?7 P$ l$ Y! v
9 X! v5 T; g; x8 z% d0 D" } i/ }- h( ~8 X* i5 Y* r
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:) w2 v& y1 E3 X5 d$ Q
0 F( z q p1 X% W2 e0 @
4 Y; {9 D9 j# h4 l ^, T$ Y' g8 m2 r2 ~) K* H7 f) S k% G6 ~
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
. S1 u' ^, L; j( ~$ z3 {+ A! _+ m: E" D, Q/ l4 f1 }! j
(3)如何下读/写内存监视点以及程式地址断点- |' E+ \: _0 n# J
, k+ g7 I. O' K# Y: z8 l. _
先说说如何下读/写内存监视点吧
* V* _6 u/ a7 d1 w! c' H) Y
' d+ t3 A$ Z' y监视点命令格式:wp <address>,<length>,<type>,<condition>
, p& z! g! G- ]* i; X+ }. q, h! A ?3 ~ X- c
<address>是地址
1 P. `9 L" y2 S8 j; ?
: S1 p8 |) R* \& t<length>是数据长度,长度必须用十六进制表示& o' M% j2 C4 n5 F. g. @
4 n) F5 D g7 ~8 b4 c
<type>是监视点类型,r是读,w是写,rw是读写/ |, Q5 `! [7 _0 e) t
/ [& c. ~. A' M例子:1 m0 w) @+ x. _" o3 |* n3 t
b8 B2 p. s- ~6 M" T/ O/ m. O% }例如对ff8569地址下写监视点,数据长度是1个字节% P9 ^7 s% c4 d# k6 Y
" G L4 }& W/ H ?3 y( Y; R0 R- C& Vwp ff8569,1,w
% s1 F+ O+ r" a" u* k1 ` v9 f- i! I( z4 P
例如对ff2235地址下读监视点,数据长度是2个字节
. k. Z6 j( F7 S& z T }& a* i7 U) I4 y0 k) }$ E1 O$ u' [- i& `
wp ff2235,2,r! L0 S; `) U q4 B% d
" [' I* T4 q4 y0 \例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
- F0 @( D' X2 l) R) R8 r+ \
8 [, K7 O- d* g' ~% q% G# L- Cwp ff7533,1,w,wpdata == 0
# B; l1 v/ _, j( w+ @3 Y6 G, s4 N+ U# U8 v3 e
以龙王战士日版为例:
: e2 [6 }) H+ }% `! s: B ^1 Q
9 b. [4 ^6 F/ W+ G" G1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
( F' T0 K) s z0 I
! ?. ~3 s8 K- P6 \( z8 R& D
0 Z9 [, a* p2 d* o& ~- S& {5 ~
/ u! E) O0 j Q0 E1 ?2 C) s. g1 z4 \8 g9 l4 r& p: n
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
! e/ J Z( j6 Q' Y m. ]* ?$ s
' [: |; k, D- u+ h4 k! X4 H, R* ~! r+ ^7 y; m# `; |9 F- h9 y
& {$ G2 x& Y0 T( O5 Y* q1 ?% k接下来说说程式地址断点/ w7 _' e- x) y, R7 f$ U
8 L5 Z+ I9 H8 v" L
命令格式:bp <address>
- l4 u/ q5 S, }& R$ ?% _) q" r+ U3 {
例如对000488汇编指令地址下断点: j$ N" a: V! L8 x3 }& p- P) M
8 K! f- t7 c$ k0 F# N6 ubp 000488" {- Q& @% H; a+ c
, l1 C2 z6 E$ p2 H
当程式执行到000488地址时就自动中断
[5 a; e0 w( [6 l, g- d* J( W- J# N: M/ p4 Z3 e
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
* N" L% A% O: c, p- }1 `
3 d9 W. o5 I2 h8 s, o- o4 `有错误请指正。# K! W$ {2 a+ d0 Q5 |0 F
$ v# g; J/ v/ |5 Z9 \% V. g) Q+ x补充一些命令:
1 U# b# H4 f7 q
9 X! e+ z4 n4 t: m"wpclear" 清除所有监视点& Y, A/ [3 _: {" Z- D0 M0 k' G% O/ v; ~
"wpenabld 数字" 开启监视点5 g, s9 r5 n" C: X3 _
"wpdisabld 数字" 关闭监视点
% ~& x; g0 z# J, |. X"wplist" 显示所有监视点) o; Z/ j: u# a$ K6 e- z0 Y. j
8 c) q# X6 k* _1 k" z4 h
"bpclear" 清除所有断点0 _. S6 g2 C( G- [; @
"bpenabld 数字" 开启断点7 B' R) _0 w* M: Z2 `+ @& v+ y8 |
"bpdisabld 数字" 关闭断点
8 J# R; C% m2 r4 V"bplist" 显示所有断点# ~4 G! b# d9 l+ G% l8 K$ d. E
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|