2006年5月22日星期一

[MAME学习日记3] MAME的架构

周末在网上看了一点文档,今天写一下还记得什么。。。 原文点击这里

从软件工程的角度来看,MAME的代码可以从逻辑上从高到低划分为三层。高层的代码调用底层的代码提供的各种功能。MAME的三层是这样划分的:其中最高层的代码负责模拟具体的游戏,中层的代码提供一些通用的函数和模块,最底层的代码则负责将模拟的结果呈现给用户。

之 所以这样划分,是因为MAME是一个大型的、不依赖于硬件或者软件平台的软件。如果你曾有过开发大型软件的经历,你会很熟悉这样的软件架构。^_^ MAME这样做,我认为也是出于可移植性和可扩展性的考虑。最高层和中层的代码是纯粹的c语言,里面没有任何WIDOWS和DirectX的调用,也就是 是说,这些代码能在任何平台上(Windows, Linux, Unix...)任何C编译器上(VC, GCC...)编译通过。所有和平台相关的代码都在MAME的最底层。在这里,你会找到你熟悉的main()或者WinMain(),对DirectX或 者对Linux内核的代码调用。用MAME的术语来说,这一层就是OSD层(与操作系统相关层Operating System Dependent)。将与操作系统相关的代码限制于这一层,使得MAME的移植变得相当简单。假如,你要把MAME移植到一个新的平台,比如说 PDA,MAME高层和中层的代码可以原封不动的拿来使用,你只需修改OSD层,按照中层代码的接口,写一些和PDA平台相关的调用,你就大功告成了。

下面看一下MAME源代码的组织:

在此之前,你最好去下载一份MAME的源码。P.S. MAME是开源的软件,在其官方主页: www.mame.net 就可以下载到。

Src/ 这个目录下都是跨平台的代码。

Src/cpu/和Src/sound/ 这两个目录下面是对CPU和声音芯片模拟的代码。它们都是跨平台的,而且被多种型号的街机(Machine)共享,例如,很多街机都是用68000的cpu。

Src/drivers, Src/vidhrdw, Src/machine, Src/sndhrdw 这里面放的是各种类型街机(Machine)的模拟,或者说,各种游戏的模拟。一般来说,在MAME中加入对某个游戏的模拟(将该游戏的驱动加入 MAME)并不复杂(相对来说),其过程就是将你写好的对那个游戏模拟的文件放在这些文件夹中。为了增加可读性,一个游戏的驱动要被分成多达四部分放在上 述四个文件夹中,而且,这个四个文件必须同名。放在drivers文件夹下的文件里面包含C代码和该游戏所使用的硬件的信息,比如ROM,内存映 射,CPU,图形显示的布局等);放在vidhrdw(video hardware的缩写)文件夹的文件的代码中封装了要模拟该游戏所使用的视频硬件所需要的函数调用。与此类似的是,sndhrdw(sound hardware)文件夹下的代码封装了模拟该游戏声音设备所需要的函数。machine文件夹下的代码存放了剩下的所有信息,例如对NVRAM或者 real-time时钟的支持。

没有评论: