签到天数: 1910 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。- r. k3 g% k; x& s2 P5 _
: T, L4 y( g. Z _(1)如何加载ROM
# z- r G2 \- \0 G$ S) o, N/ e2 l3 c0 T" ~7 Z
, o6 h8 X, X- M: F# Y7 e, C先说说如何加载ROM吧! x- J% _/ ?& U4 X4 y% T
5 Y3 s ~3 Z- W- U: t8 j, w以MAME 0.148 DEBUG版为例:
f4 Y" l4 F$ h" Q# D# ` A/ S, J0 e) D8 D- }& L; f
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
2 T7 v6 V; r* N2 V) `
7 V6 @& Y5 W: Y7 h注:MAME官网的MAME是命令行程式,没有GUI。* b2 L) z |" }) X- u# N
2 `, A7 e: u& T% O8 R5 Z
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
: D6 p( _6 a: I+ O, e4 U& q
+ G. m' S; f2 s `) v3 D" z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:. Q& n4 J6 `5 u* ~& m e) q% N6 N: n( s
9 O: H& F& Q2 ?1 d- V, Gd:回车7 \3 ^6 U$ o2 ~
# Z$ E: w- g! `3 ?. u* e1 fcd mame0148b_debug回车! ]7 p3 y0 | D
$ J$ U* {6 C% j4 ]' a# q& ^. j如图1:/ u# v- @! Y, f& z" i- ~$ ]' i+ N& s
6 m4 G- L: J& K4 |& S6 [+ y: n0 T9 m8 Q- @9 V8 Q
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( ^8 a7 m0 [7 a! h: _4 r, }: c" e
; u. `( ?- `6 i* g D
" Z5 \# ]& n+ A+ U* @% F5 E5 ~5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;/ J" v0 O0 l* a, J; B: J/ t
: E$ ]& {# v1 T
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 ]- m- c$ B! J% g% |
5 j" P( Y# b. _ b1 k' c I/ k6 K(2)如何呼出/隐藏调试窗口
. s: a/ ^8 e7 D
, n6 M, h+ \# D2 L6 U, \1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
5 k- r( a% {# d$ C/ O* l/ m- g" h8 h# ^( T1 |& H( ^; g
% m2 ^1 U& ?4 p& E( ~9 Y
, j4 f1 r" [' R4 k- r% l
2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:; f0 t; W" W% X" J3 W. ?7 V
; d2 g: ~& ~3 ^0 a2 w& N2 L/ |+ `4 o% R' ?/ q. \ N6 {0 I! F7 F
% m: ?! N3 H7 f( C
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。) h* I, I" s Z0 N1 U7 f
; d$ f. c$ m1 B" a0 |
(3)如何下读/写内存监视点以及程式地址断点1 ^# e, d8 Z$ Q; W
1 p" o! m. g6 d7 B先说说如何下读/写内存监视点吧
7 U/ R' c" S! A# y7 J. Z9 `7 w/ _# M1 [. u/ E
监视点命令格式:wp <address>,<length>,<type>,<condition>
7 y6 V" P5 \ `; q
5 o0 G* K0 q! N4 s<address>是地址+ A8 ^$ {/ r. g" z3 w# Z/ O# B+ g4 I
3 D2 h" C0 S3 A4 x7 S! r( a$ z- o- q<length>是数据长度,长度必须用十六进制表示' o. R( g' `4 i& R
9 G, y, b9 k/ X+ Y1 s
<type>是监视点类型,r是读,w是写,rw是读写+ H6 c* y/ v2 ?; u' H- U
& Y+ n/ o2 y( ]- o; _例子:* q* G5 V/ ] f- i7 r9 F: ^ E8 H
/ N$ U2 n8 z( _% `/ t- ^例如对ff8569地址下写监视点,数据长度是1个字节
6 C. |& y' Q( ?. h; k+ S. F0 k" K+ Z+ ?
& Y$ X4 j. u5 @1 Xwp ff8569,1,w
; ?5 |5 A( f/ v$ n8 U' h! O3 K$ Y3 h9 ^7 ?3 V& `
例如对ff2235地址下读监视点,数据长度是2个字节
/ R9 N6 z% ]7 l; B/ a1 p: t" R( ]( D1 b6 G
wp ff2235,2,r
, ^/ ?. S- x' s+ i
; a; J G1 k* r, t' f例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断: b$ Q$ x$ C! d& @5 m3 Q* ~% G
" }4 ^) I! W9 I3 swp ff7533,1,w,wpdata == 0
- G3 |( h% k* J# f$ H
( Z; r) O- x$ m% `! P; c以龙王战士日版为例:
( Z7 k' {2 {( c% |7 e7 K! N) s' }. Z
1 f- p0 ~! S$ N9 v5 S/ ~: q1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:) ]( N% p" s. l" {. F$ ~
9 z+ q4 R, D+ c) q$ b
) C/ F4 x2 m7 K9 l
6 M6 e9 C( X I3 _4 h- k
' y O8 D0 u$ r) v2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:& U' Z0 x, w9 k8 q8 M
$ o' F1 r6 N, d1 h
% O1 `7 J/ N( m i5 t ^
% V6 e6 Q1 [3 Y7 T7 f. l接下来说说程式地址断点2 j+ M! P2 ~" k/ }* E
& a: [% e1 Z1 F" L8 n/ y
命令格式:bp <address>, o: ]1 Q I, g4 o# P
Q. C9 Z& F2 h( y6 w3 j* ~
例如对000488汇编指令地址下断点
' [$ I- m6 O) Z1 i2 Y) `% A6 _2 B8 ?8 i2 r/ Q
bp 000488. N1 y1 ^# h5 L, l: G+ z5 y8 }
9 r4 R1 ~% D7 `' R" h
当程式执行到000488地址时就自动中断9 Z- P, Z' p* P. F% S6 Z
$ G, k' Q) p- e' W$ t% @6 G5 R: B% G
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
; n$ w! v9 [* q2 z7 a S* V- ?# C( p( u/ W" j
有错误请指正。* A/ K8 W) W- `+ T: K5 p+ X
% ^/ ]& c6 Q7 _6 ?8 r9 H
补充一些命令:
( s9 O; _8 C9 v k) G% x' W( L( H2 V: Z3 v, U
"wpclear" 清除所有监视点
- w# r( g( [% t9 @/ w"wpenabld 数字" 开启监视点0 u6 @: o9 V8 t, h; T. I
"wpdisabld 数字" 关闭监视点
# c# Q' V2 V5 a+ y8 |1 s) Z"wplist" 显示所有监视点( b+ F1 Y$ C! C" y7 C
2 E" `" @4 B& N- h& t1 C' p"bpclear" 清除所有断点/ ]$ W9 L: |9 d3 l7 h! D# ]
"bpenabld 数字" 开启断点
4 _7 z' ?/ i2 H2 r"bpdisabld 数字" 关闭断点: r9 p9 |- U" G- p- y( u
"bplist" 显示所有断点0 P8 Y+ r9 Q# Z# I( f/ ?% ?5 U8 S
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|