签到天数: 1950 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
O1 Z* q+ d5 Z/ B
$ C! h! a$ j9 f9 [(1)如何加载ROM
! P$ B2 N; A# x# G( w2 G* a* T7 i' l9 Q: b8 z# I8 a5 w2 [, K& j! O) ^
先说说如何加载ROM吧3 B' d7 n# k2 R+ C5 ~
6 l: q! {6 u% O5 P
以MAME 0.148 DEBUG版为例:
& m- i2 T7 S* D# H7 ?
, \* ?7 z/ V( P) |+ l1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
6 d2 `) G: G: E9 ]: l) r$ T9 m/ A {9 K6 |3 g: l6 W" c
注:MAME官网的MAME是命令行程式,没有GUI。% k0 A( r& T5 t. c4 c: B+ n3 U5 G/ s
3 a& w0 {2 f- {$ C! g1 N3 L
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;. M, a, r2 [" j6 b1 M( c+ T
5 T8 b7 ^( F8 g2 `3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
$ ?( |: i; _: _0 P; w( u
" l8 ~7 }8 Z) }d:回车. c9 D( I( |- J0 e6 U; @# o. L( e9 \
5 E, g5 }$ O" g/ p
cd mame0148b_debug回车- R; T- i# Q! A; P! h3 h& H
7 |: Q9 R/ v. b如图1:. M( |; L! n3 R7 n2 m, \4 i
% ~0 n9 P, D% w, `8 t0 q$ D- Z
* A: Z- Y8 d5 Z% A; K4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
' P! U1 a6 w3 l2 u- a6 z: S% m% f! c4 K: m) y
; X( d; j4 C/ A2 Q$ R
_4 l3 j+ h5 k- {+ ]5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;9 s% Y/ a" [/ ]9 P2 N
2 d) E9 H" V9 g& Q2 H
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, A7 g( S2 ?$ U8 N
% h/ j" d9 `8 e3 k. J/ Y
(2)如何呼出/隐藏调试窗口
! ?5 D9 Q5 h9 |( k% S* c
: W9 m4 @2 b) V2 \' ]; I d1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:/ G4 \ D; \! N3 ]2 h
3 Q, A) m0 B/ {
) A" X1 ~: X6 S7 [6 @
9 Z, F; X8 U$ ^/ }9 g2 ?
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
! r% J# M7 s9 E& A C3 e' L6 Y4 G) O2 V3 [
. R5 [: H! }3 i! T( J$ e k
: ^+ G, p& W5 Y& U6 @3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。; C1 e# H, x# D8 G2 g/ n3 y
; p- \7 [ t Y5 n4 R/ D/ o(3)如何下读/写内存监视点以及程式地址断点
& Q, N) o3 j5 |8 i! Y$ q7 S/ o) ?# [
先说说如何下读/写内存监视点吧
; T3 @" R4 x/ D3 ^
- |+ J- q5 L1 K监视点命令格式:wp <address>,<length>,<type>,<condition>
/ J8 I" ]" }/ }
. u/ a* K- j+ M8 P6 N1 k& V% ^<address>是地址2 ?5 H+ f! [) ^/ N+ e& E, I+ E
4 A0 ]" S1 k; u2 ?8 Y<length>是数据长度,长度必须用十六进制表示
8 k$ w. s) r# Z( i) Z0 e' }
2 L- S9 h0 D' l, X+ c<type>是监视点类型,r是读,w是写,rw是读写0 |4 o! a5 X; P8 A
; H$ p" t4 j! B3 R
例子:4 Y" f- n1 }# L- [. X$ e. O' n
+ K: s2 i H) \& V4 n: @
例如对ff8569地址下写监视点,数据长度是1个字节
( o7 _% N2 y1 x% R- \2 s9 v* c- ^) a `9 e
wp ff8569,1,w
8 D* x5 T3 Z) q
! @3 f) v# k- d6 C5 A7 {) H例如对ff2235地址下读监视点,数据长度是2个字节
- N) L9 J) {! i2 f/ P8 J- C6 C
' v% U: G: o5 Rwp ff2235,2,r, @5 w, \# d4 S0 {
; s+ r0 X4 c2 X- A- }7 j
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断, v% {5 f! T6 h: Q0 ~7 [) o
5 a7 C y) Q# S; z* d O5 C1 ~
wp ff7533,1,w,wpdata == 0
* k) S; y6 ?9 i; G3 K4 Q
t$ V( X, B6 |, a; L8 T以龙王战士日版为例:! X9 r+ s* \7 M% t) @
% a8 x: ^: N0 c F) H% w1 W+ `( Y
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:; ]& Y: N( E; K* e; w
& o: i) ?. A4 p' k* c* M
4 w: _/ N7 v0 j/ O& T+ s1 b" {4 U1 A/ s0 `; l3 m( M$ y
, p: X' q+ j7 \. I; g2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:5 e' c0 h+ w9 Z5 L" `
+ v0 X' n# n; H9 L2 }3 ]
8 p/ @6 O& P9 N! e& ^' G# g3 p2 S% Y7 O2 s
接下来说说程式地址断点: y& [- A: S1 e0 O* ~
1 a. F8 f# u0 ~ a命令格式:bp <address>
) j7 N" A0 C' h% `2 Y7 ]( {5 \
1 a0 q6 Z6 Z" F- A" r9 D" a例如对000488汇编指令地址下断点
6 ?) j4 ?$ t$ _1 H4 G3 S9 d3 i* c) E: v U7 o
bp 000488
, X$ o* N5 ^0 k4 g3 z4 R# w8 N5 v! u& K. l$ g8 N( V
当程式执行到000488地址时就自动中断
; [6 i! N. B+ f/ ~: }2 b) T L+ K! Z; I8 I: N% L2 b" n
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 F* l2 d3 K$ o$ v3 m
5 N5 a% U: a4 u. p/ J有错误请指正。
# _2 Q# [3 M" m6 x' x; f# \
* V- k% `0 y: j% [0 y7 v补充一些命令:+ {9 j, m; }5 @0 U+ j. N
% X' O% W" a1 e. E6 f# r"wpclear" 清除所有监视点
/ Q& P2 Z5 f$ X, X) n" x, ?"wpenabld 数字" 开启监视点
6 l2 T f; a! O( q# ]3 E"wpdisabld 数字" 关闭监视点7 G1 X/ C+ e5 ?% k8 `. T
"wplist" 显示所有监视点0 [0 }% V- `9 @, s, x. I# x/ W
4 s _8 ]: _1 s% D# O d
"bpclear" 清除所有断点9 L% }: Q) Y: t4 {
"bpenabld 数字" 开启断点) [: B' ?* _: ~! p6 o( W! l1 S
"bpdisabld 数字" 关闭断点. J/ s$ O8 r4 r
"bplist" 显示所有断点1 g1 N+ M. V- x: e, ?
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|