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时钟的支持。

2006年5月20日星期六

[MAME学习日记2]VCMAME

用google搜索时候意外发现了个有趣的东西,不过我电脑上没有装VC.NET 2003,呵呵。等以后装了,一定下载回来看看,毕竟vc的编辑器好用太多了。

homepage: http://www.vcmame.net/

Code Project page: http://www.codeproject.com/cpp/vcmame.asp

About VCMAME


VCMAME is a set of project files and information that allow the official MAME source code to be compiled with Microsoft Visual C++. The intent of VCMAME is to allow those that prefer Visual C++ and it's associated tools to contribute to the MAME project.

VCMAME is presented as-is for non-commercial use only. Any binary distributions constructed with VCMAME must adhere to the MAME Usage and Distribution License, as well as any other relevant copyright or license agreements presented by the source code authors. VCMAME is generally unsupported, and no guarantees are made as to the timeliness, quality or accuracy of information posted to this site. Proceed at your own risk.

[MAME学习日记1]成功编译

上午从mamedev.org下载了MAME的devtools和0.106的源代码,刚开始没找到如何编译,后来在mame.net找到个网页看 了后,开始尝试编译。试了几次都无法成功,输出access denied。。。后来才发现设置环境变量时候多了个空格。 -_-

重启电脑并写了个.bat文件设置环境变量,终于开始正常编译。 ^_^ 编译得真慢,呵呵。不过好久没有看过.c做扩展名的源程序了,上班的时候都是在用c++堆代码,现在看到.c文件特别亲切,想起了上学的时候。

一二十分钟过后,自己编译的MAME终于诞生了。 ^_^