签到天数: 1590 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
, O4 d5 M+ r3 @! Z* n& ^" P+ x' g0 K! a% J1 b# u) H! h# _9 S
(1)如何加载ROM u' i5 O; ]8 Y3 t' K& C: j( w
]7 x: I: q3 T先说说如何加载ROM吧0 P5 D2 b. H0 P
' ^* K5 M: h5 O* i
以MAME 0.148 DEBUG版为例:
0 l: C% U: T1 b* \3 Q' T
6 D; f7 a% t$ a) z1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html# [3 `, [$ s. A) n; ^$ S
, V: t1 I2 {9 D- g. I. i8 v1 S注:MAME官网的MAME是命令行程式,没有GUI。+ R. ]3 R5 Q& i8 y# H, i& f, S
. S7 w6 V# x# u! _* H0 r# d+ w. X2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
3 q0 x( K5 e4 r% J6 @/ ^- l4 c
* n' h+ F v7 I* r# c0 W3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) E: a' F" H3 K5 @
s4 m9 z. `5 C$ p% V$ }d:回车
5 p- |% u! x; L* u& {. I
; i9 W$ s% u( c$ C2 acd mame0148b_debug回车
; ^% [; h, ?9 D; x6 N
( _) f- n+ d+ p+ K: X1 U如图1:) H7 H4 @/ _6 w
+ M9 z! G. o2 b8 A$ R9 {" P' Z+ y
6 |) d7 ~; X! k( W4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
2 ~: W$ ~: }% P5 E( k5 K2 x/ J6 [& ^ x7 [8 @
" d7 d; o9 Z! v$ q. t9 x- q: j0 x( Q- S! x, v
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;8 y' U; g5 g" L' y0 g. }6 e+ L
5 z @' w# G, g* ~' s& H8 _6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。
( r# \; ^( P, F2 v. p" d9 H7 a6 O+ U' `: Z! J
(2)如何呼出/隐藏调试窗口
/ a% ?6 g5 z0 H/ {6 Z* V* @/ ] a i5 S+ W
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
( f1 ?8 v! }1 `1 G F8 k! B+ x) l' {0 v* |0 m. n
) T; k H" X+ x/ A& V: \ w2 ^0 e: B) s7 a/ k( Q0 d6 G6 c3 f
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:9 L: O- i( E+ e: _ T" {( r9 N2 C
/ z3 M* d( m" T0 E. L) H
% T+ j1 M' ~3 M2 ~4 R9 R+ L2 N: k9 M8 a3 e# H* b
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
7 b1 ]* |: `) F P' W7 y
) r7 [; A5 A% Z) [( i0 f' S4 j(3)如何下读/写内存监视点以及程式地址断点) j$ h L/ {; a9 }( C( |
) I& C f9 J" t7 C" ]2 E* _先说说如何下读/写内存监视点吧# ?, W- K- M$ S8 C- [7 d
9 ~8 g p6 E0 J# e) x N监视点命令格式:wp <address>,<length>,<type>,<condition>8 t8 e, x/ _% b' K
4 [5 \% R$ Q R# _
<address>是地址 s( d ?, S: _
) @" e3 R7 T) I! J9 t
<length>是数据长度,长度必须用十六进制表示' ~5 `" I# b6 K8 ^3 V1 Z
- }4 j; g' ]/ ^& a9 R: n<type>是监视点类型,r是读,w是写,rw是读写 @6 L! n6 K- T; l) `: G( i' U: w' P
' X1 Y$ @( V6 y* B9 {3 J
例子:
3 S* b* i) e9 v0 n$ L& b$ v
/ u6 m# y+ Y ?: L" x% a例如对ff8569地址下写监视点,数据长度是1个字节 f- c6 V6 C& N7 x1 C
/ I7 t8 D% z9 Dwp ff8569,1,w) y6 C2 b" D8 O# o* a+ W
5 @* ]8 k. C5 r9 C% U5 \1 D
例如对ff2235地址下读监视点,数据长度是2个字节% j- L" S" j) S- W, O1 Z$ J: @
5 u l0 N. ~3 p8 Y
wp ff2235,2,r& _8 o/ \6 Q9 a9 d
- A( N0 s' V! f
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
8 g! \/ Q5 }& Z# w6 v; T9 U/ V4 {# G: H ~6 I2 v3 u7 L
wp ff7533,1,w,wpdata == 07 _0 r- _+ |$ s7 l) I/ H! L
4 N, @4 Z, t- _1 K# J! d6 @; T& I以龙王战士日版为例:1 m$ }( W2 T" _9 u4 D6 o
4 @4 F5 Q* E: d+ R1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
, z3 i+ D3 Y6 C2 {4 o" C8 `$ n; h P7 T6 A! |
. b$ P8 _% e8 T* C
, h4 s7 v) V. P9 G2 f) q' r: A# D1 J+ ]; T; N# q
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
3 X, C' ?! `# |5 v9 P# o& @5 E( j! G' \4 n. W+ m# u4 {
! _, |- L: B0 P, n4 y
2 @$ v" Q3 g+ X0 P* C
接下来说说程式地址断点: E2 m% |' f( P( N H) y
' p) T( Y, N/ L0 k$ ]
命令格式:bp <address>/ D @6 E0 W( P k
( J1 z/ ~% ~2 Y, h8 ~0 p+ d0 o例如对000488汇编指令地址下断点
- |* S: R/ r: P: B4 K* D0 L# u
7 h1 ]9 ]. Q( c4 m" P, jbp 000488
. M/ Z1 h+ c/ V- Z
. d* D: ~& a1 T! S1 N当程式执行到000488地址时就自动中断0 A3 y! X# `& U8 _7 I F, Y/ C
6 `9 `2 k+ |8 U4 _, c# i" k更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
9 K9 v. [' d; a* u
7 C! l# b$ I8 h% J8 P$ A, ^( h有错误请指正。
5 D/ d% ^- o0 }( u9 H! u( q4 J% X8 |/ v/ ^! S7 u
补充一些命令:9 X. g0 M+ @# E+ A
' J( G1 q" u2 L4 Z
"wpclear" 清除所有监视点: l% n! @& ?. S9 {6 W, j6 A
"wpenabld 数字" 开启监视点
, x! X- o7 J7 E% H% D"wpdisabld 数字" 关闭监视点
* d! S( D" K" p4 [/ Q"wplist" 显示所有监视点
2 q& T* \, \) ~- E; [5 j& J3 q( ` i/ A2 O7 |0 p1 A
"bpclear" 清除所有断点- r% s2 S0 I. J
"bpenabld 数字" 开启断点
6 {* d8 B! f# K3 X7 d6 `$ ]8 [8 @"bpdisabld 数字" 关闭断点
, i5 H$ a1 z# o9 y"bplist" 显示所有断点
2 C3 W. l0 e: U6 z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|