签到天数: 1999 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。
& ~$ Q' y6 G3 b# U, [9 z" n
7 H1 V e/ [- r7 O(1)如何加载ROM
! R! D8 R, @: _* t# K3 e
) Q8 r, b* H1 U8 T* b) E1 ]' Z先说说如何加载ROM吧4 A- |6 T) q4 [* V
( q( }1 I" F3 \5 L/ x
以MAME 0.148 DEBUG版为例:
: G. L: O* O& O B7 b& \1 A
8 c' I! l! g3 S V! B1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
: D0 b) c' J( Z. P9 p& a2 k! Y h& g; F8 f' t! g$ M: c- L5 S! t
注:MAME官网的MAME是命令行程式,没有GUI。. f; z$ G7 w- n6 R- W
2 T, ]2 u3 F9 r, e0 t& W* |2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
% }. J8 o! {0 U
! b5 d3 l' n) ?" z3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:* m/ p+ w) }4 m
2 p' `) ^, S$ Fd:回车4 ?; I# k. Y8 j- H% n
3 B- p' `+ s: g: m6 y- y. |$ w/ _+ w
cd mame0148b_debug回车6 r" I6 A+ `" {
% y! p6 Z! ?. k# i' E1 _6 s% i' `* i
如图1:: Q( r x; n- j& O
& s, w7 k$ O: ` o1 ?/ m+ [, b
9 I7 x) w3 H2 \! s' D5 v+ N4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:& ^, l1 B! C x& \, `( f" B8 h2 }2 B/ Q9 ^
4 W! ^2 K, A( R, s; c/ \& H2 ?8 W1 H- r& R% P1 I1 B
( F o/ d3 v, s: o/ \9 U5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
6 u# |& T- U% g6 ~8 s3 K$ S# [8 G$ a# {7 V4 Y
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。) y1 O* \% U2 ~ g3 Q) W8 O$ m
3 W& Q# _+ _& _; [(2)如何呼出/隐藏调试窗口' T1 v2 j# i$ \) [6 r
- z4 W! M' x+ d$ B3 @4 E; P6 x
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
3 ?6 t( @# S$ b9 M; I1 R5 p& ]- [/ i2 u- Y
( \( A" i6 l5 G4 x0 Z& E
0 l: E; v# x u" y2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
- S2 S1 ~6 G1 Z' a. |. U/ b
- R {. w7 Y! _ f3 c2 z8 I
% ~; L8 ^) @5 U! }2 G: t8 M1 n! \
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。# s& r; C- s) W$ [
0 I/ t# E. W/ _9 D7 s2 Q(3)如何下读/写内存监视点以及程式地址断点
+ j, B q7 K' |0 ?6 Q4 j: b+ G) c. }. x1 I: \) C2 @5 Z/ Y
先说说如何下读/写内存监视点吧
" o7 G' x M% U3 @9 P5 E: L/ n% T* y+ B" V& _2 a2 w3 M7 R' Y
监视点命令格式:wp <address>,<length>,<type>,<condition>
" D( `5 l& U) U$ |# }
; R9 z. J- `+ I<address>是地址& `9 \7 U& {8 u) ]+ V
; ^5 w6 y: V2 S% @<length>是数据长度,长度必须用十六进制表示
: k& m, k& {/ ]( Q& ?" `. j& |2 B" W. W2 J2 g0 B" A4 v/ T% |
<type>是监视点类型,r是读,w是写,rw是读写
8 v2 G; P& l( d' X4 K
2 n8 F" q, d; M8 q例子:( I6 r* W2 U+ Z8 g
6 N7 d% D; S- I* ^ x( p& r例如对ff8569地址下写监视点,数据长度是1个字节; P' t) e) c; o8 u! ?8 R
8 y6 Y. X9 E; |+ r$ T3 Jwp ff8569,1,w
0 Q# R7 j6 `9 g9 m. M
) s9 t& y8 g5 G% [. v$ ]例如对ff2235地址下读监视点,数据长度是2个字节7 [2 G' B7 R% j* a" q
$ J6 p3 M1 n- I; F' T7 L5 n- Z
wp ff2235,2,r
3 M. ]0 k: ?: m6 B. `. e; v) F& V) A2 y0 i; K2 |; K6 J) r$ I
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
& T: R5 I, A0 J" f! d
0 g1 L2 b7 U% W a6 U) [9 Q6 g: H6 p. Awp ff7533,1,w,wpdata == 0$ j$ D- F2 m/ W! h7 b' h% l
( ?3 h0 s& ]' h. k9 p( D
以龙王战士日版为例:9 r* {9 ?- r1 [* W0 A
* G( a- i" d( E% D8 ]
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
( F) `8 `* j7 X, R( L7 d) k) m3 H
" D% o& \$ r1 L, {8 \9 `7 R$ c9 g7 W* K& P# V# X# f% C- @9 U E
4 A: R4 G( W6 e9 Q4 \! }
# [7 X0 y0 n; Y/ L) ^7 o9 O4 c7 J2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7: l& |* i+ d( {/ g
7 V3 J. _! M5 {+ @$ n5 x6 u6 l
- m! M, r9 S# l d7 b% q4 l) { K: @% S; t
接下来说说程式地址断点; F, ^6 Z% i j
; ]+ m; n% S1 H9 w命令格式:bp <address>
1 e0 g( W+ \9 c0 C6 P3 `- m& J' `% F; \3 e
例如对000488汇编指令地址下断点
# J( r c# ^2 F& M1 n0 m6 C9 h: }8 k/ |* ?: p
bp 0004884 a0 e1 @) f% Y( _% F
% ]- o6 R/ ^# W; j, D' h
当程式执行到000488地址时就自动中断) B# V$ [7 U1 B( r; d0 Y4 l
: t, y. u& L @/ j更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看2 [; o6 w- E; [' C( ^
4 E5 e9 V, r/ S8 }1 s* F' h
有错误请指正。
9 a1 d" q) |* _
0 Z% E4 `7 _0 a8 B& K0 b D, t补充一些命令:
" [) b# l$ \# }2 C. E9 R
! ?3 I4 U$ Y- Q! A* P7 O% ~"wpclear" 清除所有监视点6 ~/ ?7 B; }( R8 D
"wpenabld 数字" 开启监视点& @; r% W9 p1 c8 F& }% l! ?0 \. z4 }6 v
"wpdisabld 数字" 关闭监视点# n% Y- _: N, ?6 v" R
"wplist" 显示所有监视点% H* t8 ?9 x% Q0 w) P& X- k
. C$ z) D* [3 }( f0 s: ~- r
"bpclear" 清除所有断点: P# P" A2 t- ^9 N# u
"bpenabld 数字" 开启断点. F3 ]9 t2 N: n: a T9 }& q
"bpdisabld 数字" 关闭断点5 Y h* |4 f/ N* V
"bplist" 显示所有断点
( }! ^0 C) a$ ^% P/ ?$ @" F$ H6 _ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
3
查看全部评分
-
|