签到天数: 1947 天 [LV.Master]伴坛终老
|
应人要求,就写写关于MAME DEBUG版用法吧。* A$ S) W3 \- ^
$ \3 z" C! r) L$ |; e9 S" d
(1)如何加载ROM
: g" ] ^. x/ S6 W- P2 p9 T. P# P1 T1 ?3 ]' N
先说说如何加载ROM吧+ }) Q1 i- b: ~5 j* L2 P& J0 J
+ S1 ?2 h. U% A# A% t
以MAME 0.148 DEBUG版为例:' A1 p/ k/ K" q* B' Q4 U+ d
: g$ P/ f6 B. s x# B1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
/ V; l+ E8 d4 I+ Q1 `* n" y1 _/ ~* |1 V8 I' A' }$ n
注:MAME官网的MAME是命令行程式,没有GUI。# F8 a5 \; L+ p' _; e
$ c' [) U1 Y0 \" z7 Y, E" g2 y
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
, o! V' \, n% }1 g4 Z7 ]2 M) P; I5 n) N, K3 y) |* L5 U' l% G
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
1 H, t8 Z& f9 b2 t( J h Y
& W! J/ |9 E8 w# Z5 n+ J2 Od:回车0 J2 L- V6 @* n4 ~, |4 j
5 m- `9 ]5 [( X
cd mame0148b_debug回车
0 l5 r7 A# f. y" b
9 J ?. [7 z! H$ y7 h9 V如图1:) C1 I9 j& s2 b7 L6 @, b
" U$ H; @6 o; T) H, O: d8 s
- @$ C, J2 Q8 O& e7 d& r3 E9 j4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
: V) \2 p1 @# k, f v3 Y% c& i7 Y4 z" P
4 r; Y3 r. O* D6 ?: h2 H
, t$ U# Z/ G0 r J- H" H( `) o; G
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;! Z7 @" I: t: Z0 ]* t8 u9 w
" Q" i0 J) t7 K% \+ e' c2 ^+ D
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。, u5 `5 F/ c( Z& f1 [, G' q
3 h+ }! e9 n+ A(2)如何呼出/隐藏调试窗口
+ z6 e5 r1 P* Y6 v% C* ?) \. v% {8 ]* b& J6 x( Y: k
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:
9 R1 x* ?! y; B: X
0 \# q* ` B7 f- ~
' ~) ~$ F& q) H
- c! D! y' _/ M- A3 u/ J2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
8 k: G; c+ ?; D/ G
5 B% ^ A) P1 _1 S- C& t
7 c; d6 S6 c1 E( y3 E' H" L: }
3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
2 E; S4 u1 Q5 H
$ I! s1 A( w _! V9 `, y" ^6 v9 z(3)如何下读/写内存监视点以及程式地址断点4 A' U2 O# X; }3 U( Z# `
) \- I) n2 E0 T2 r0 a1 ?先说说如何下读/写内存监视点吧) j7 k8 ?1 M) G4 h" \7 w. e/ c3 {% o
6 _; n7 k; p; o+ ?- i监视点命令格式:wp <address>,<length>,<type>,<condition>
4 e7 s5 l& \1 o, y9 G" I1 j! j# p/ u
/ ?% V2 r; Z L' @3 k<address>是地址
% J0 j* O1 z0 k0 B7 s1 v/ u7 w( V( D! V
<length>是数据长度,长度必须用十六进制表示" N* q. @+ ?7 z' ] J+ n* e
* Y3 m9 m# T P9 n; x8 T<type>是监视点类型,r是读,w是写,rw是读写
. ]2 c! T: V& J7 k5 P3 y; X/ ?2 E. q1 @% L% V
例子:$ W) K# J, _4 W, ? Z
" }; C7 h1 z6 S# r例如对ff8569地址下写监视点,数据长度是1个字节3 N% S9 v+ m- ^7 i* f
" p0 ?; ~' S9 N1 l; e& A# ^9 Bwp ff8569,1,w) L0 B( p" W2 d
+ @" O; y. [; f7 ]. P( v
例如对ff2235地址下读监视点,数据长度是2个字节1 k4 V8 z# {/ G: s
9 F4 W' ~: c& F! x
wp ff2235,2,r
2 l) q" L* I: {8 }! @! l! O! U. v
% S# [9 r. F+ l4 m$ ~例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
i S# u4 }& i, m5 ?6 d9 i) u) r) O( I+ L) |% |
wp ff7533,1,w,wpdata == 0
' x. @# m* U' k( z( @. T; U4 o8 r* I' f4 [3 e8 [
以龙王战士日版为例:
) y) m3 H+ \4 }' e$ o1 x. M) w' [
! Z* T6 I- e+ W1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:2 k" q* y* ~9 J. K9 R" z8 f
7 n1 A, R. f& D5 |/ i7 b/ P# j1 O6 I. \1 C. \ {) R7 z( D
) C. Q7 |: U* d7 R5 A5 j! n
9 q: n- i4 V6 L! I4 N1 e3 [+ M2 \0 E2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:% v3 y( X, V, t: w' T
; ]% y- c7 ]+ x5 H; e: D
+ t2 u- j) ~' t+ c
* b8 w$ H; o/ M/ B9 v接下来说说程式地址断点
( L/ [1 l( F! c7 s9 k" Q, G J7 _% x/ X2 S
命令格式:bp <address>
6 [' H+ N3 q& b" G! W2 A8 f, ~9 d, l3 M
例如对000488汇编指令地址下断点
. }- y, f1 p& F; e/ a3 y: F) |5 [. ]9 f0 @: B* L6 x; ~) h& A' s5 j
bp 000488
$ I' X1 `6 A Y! \, t, y9 L2 ?0 l/ o! e4 \5 p6 F+ z4 \* l5 ?
当程式执行到000488地址时就自动中断, E9 v3 J1 b& j- P
2 J4 f: v* r3 i: W8 }
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看5 v, Q2 e5 A6 s. \$ V
' @( }9 r9 ^% Y% U: W+ N有错误请指正。( B0 z; \5 h& A& j: Y2 h
+ v2 M. y- g) n6 O! F |
补充一些命令:
: S) Z: F% ^" o. n4 v. U7 E4 T: S, S2 h |
"wpclear" 清除所有监视点: U( d8 L# R3 j* s9 P& D3 A+ f2 v
"wpenabld 数字" 开启监视点# b9 t0 X0 b6 ] J; x6 k* t$ G
"wpdisabld 数字" 关闭监视点! U5 [0 ~" \1 ^ k: Q* p5 Y
"wplist" 显示所有监视点7 W/ K, }$ Y: }4 W- Q& |
+ D) H2 ]* l! g# m' o9 f' z
"bpclear" 清除所有断点; O3 r+ g) I7 V" f
"bpenabld 数字" 开启断点
* k9 C N3 \/ C7 ~$ B! g% V"bpdisabld 数字" 关闭断点, ^2 M" n) @( F% x6 _# q: W" H# @
"bplist" 显示所有断点
& r/ B* D0 ]/ d4 O5 M' F |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
3
查看全部评分
-
|