| 如何在Linux/FreeBSD下玩模拟器游戏(V 0.1) (转) |
荐 |
| 如何在Linux/FreeBSD下玩模拟器游戏(V 0.1) (转) |
|
| |
|
镜像1: http://www.zhangtao.org/EMUGAME-HOWTO/index.html 镜像2: http://jedi.3322.org/jedi/EMUGAME-HOWTO/index.html
如果你生于70年代,那么你一定还记得《魂斗罗》、《战斧》、《名将》吧。想再听一次令人热血沸腾的《魂斗罗》的主题曲吗?好,现在就让我们重温我们的儿时之旅。
我们的讨论范围包括任天堂红白机模拟器(Fceu),世嘉五代模拟器(DGen/SDL),和街机模拟器(Xmame),有同好愿意帮助补上其他模拟器的资料吗?
Fce Ultra 这是一个跨平台的任天堂红白机模拟器,可以运行在Dos/Windows/BeOS/MacOS/MacOSX/和Unix下(需要SDL库支持)是我用过的Linux/FreeBSD下最好的红白机模拟器,支持绝大部分常见的MAP格式,支持zip格式的压缩rom、全屏模式、网络联机、游戏杆输入,甚至游戏作弊。遗憾的是作者似乎不打算继续发展这个项目,然而你仍然可以在http://fceultra.sourceforge.net/files/ 下找到该模拟器不定期发表的最新版本,目前的最新版本为0.96。
编译安装这个模拟器是一件相当简单的事:下载fceu096src.tar.gz,展开到一个临时目录下,进入该目录,将Makefile.unixsdl拷贝成Makefile,然后运行make,如果一切顺利,将在该目录下生成fceu的执行程序。在指令行输入"$ ./fceu"将得到指令行帮助,试试"$ ./fceu -fs contra.zip",看到你久违的《魂斗罗》画面了吗?"-fs"选项将使fceu在全屏幕方式下运行。
Fce ultra假定axis0为游戏杆的X轴向,axis1为游戏杆的Y轴向,对于大多数Gameport游戏杆,这个假设是成立的,但我的Topway USB Joypad单人手柄向系统报告自己是一个4轴向游戏杆/20按键手柄(实际使用2轴向10 按键),axis2为x轴向,axis3为Y轴向,有效按键0-9。这可能是由于Game-pad制造商为了减少成本,让单人手柄与双人手柄共用芯片的结果,而我的Gamtec Twin USB Game-pad双人手柄同样报告自己是一个4轴向/20按键手柄,其中axis0为Player1的X轴向,axis1为Player1的Y轴向,axis2为Player2的X轴向,axis3为Player2的Y 轴向,手柄1的有效按键为0-9,手柄2的有效按键为10-19。是的,这个结果看起来相当的怪诞,但这不是厂商或是驱动编写者的错,毕竟,支持Joystick重映射应当是应用程序的职责,但这却造成相当一部分USB游戏杆在 Fce Ultra下无法正常使用,有哪位红白机迷愿意为她写个补丁吗?
Linux用户在编译运行之前应当先检查是否已安装了SDL的运行库和开发库(当然还要有gcc)。Redhat/Mandrake的发行版均有这个安装包,你可以运行 "sdl-config --version"来检查你的SDL库的版本号,确保你的SDL库版本在1.1以上,否则在编译时可能会遇到麻烦。
FreeBSD用户需要确保sdl12 (/usr/ports/devel/sdl12),gmake (/usr/ports/devel/gmake)等ports已经安装,sdl12会在/usr/local/bin/下安装sdl11-config这个执行文件,由于FreeBSD的ports包含了许多不同版本的SDL库(甚至包括在linux模拟环境下运行的linux-sdl),因此需要以不同的配置程序名加以区别。记住为sdl11-config创建一个符号连接,像这样:"# cd /usr/local/bin; ln -s sdl11-config sdl-config",fceu编译时需要通过这个标准的SDL环境配置程序以确定所需的SDL库和头文件的路径,另外,你需要执行"gmake"以明确表示你使用gnu-make而不是系统缺省的bsd-make
在写完这个主题后大约一个星期,我兴奋地发现,FreeBSD终于将FCEU正式加入了PORTS,如果你使用cvsup 同步PORTS,那么进入"/usr/ports/emulators/fceu",然后"make && make install"就大功告成了。
DGen/SDL 这是基于windows的世嘉模拟器DGen的SDL环境移植版,支持全屏模式、分屏模式、zip格式的压缩rom、游戏杆输入和游戏作弊,你可以在http://www. pknet.com/~joe/dgen-sdl.html找到该模拟器的最新版本,目前的最新版本是1.23。
与Fce Ultra一样,DGen/SDL同样不支持游戏杆重映射,甚至假定系统报告的第一游戏杆设备为Player1,第二游戏杆设备为Player2,并且限制游戏手柄的最大按键数为16!但SEGA MD上留下了我太多难以割舍的回忆,因此我为她编写了游戏杆重映射的PATCH,由于DGen/SDL 原本的游戏杆支持的代码是由另一位hacker加上的,并且使用了完全不同的事件映射模式,这花了我2个小时去弄清楚代码是如何工作的,这个补丁耗费了我整个周末并让我错过了与PPMM的晚餐:-< 然而应用这个PATCH是非常简单的,你只需在展开的dgen-sdl-1.23目录下执行"patch-p1<../dgen-sdl-1.23-jsmap. patch",记住你需要用你下载的patch文件的路径替换指令里的"../dgen-sdl-1.23-jsmap.patch",但直到目前为止,我仍然没有收到DGen/SDL的作者关于这个PATCH的任何答复,因此,这个PATCH是"非官方的",是否使用她取决于你对我的信任,如果这个PATCH给你带来麻烦或是快乐,或者你有任何意见或是建议,请让我知道。
得益于autoconf脚本的帮助,编译模拟器的源代码是相当简单的,下载dgen-sdl-1.23.tar.gz,展开到一个临时目录,进入该目录,如果你需要游戏杆重映射的Patch,请先按上文的方法应用Patch,之后顺序执行"./configure","make"就可完成编译,FreeBSD的用户则需要首先符号连接sdl-config,安装gnumake,并执行"gmake"而不是"make"。然而该版本的autoconf测试宏中有两处错误地包含了SDL/SDL.h而不是SDL.h,在Redhat Linux下,由于SDL-devel将SDL的头文件放在了/usr/local/SDL/下,而/usr/include/是系统的标准包含路径,因此,Redhat的用户在编译时不会遇到任何麻烦,其他Linux发行版和*BSD的用户恐怕就没这么幸运了,当你运行"./configure"时,配置脚本会抱怨找不到SDL/SDL.h这个头文件从而引起SDL环境测试失败,你可以修改acinclude.m4和aclocal.m4这两个宏定义文件然后重新运行autoconf以生成configure 脚本或是干脆自己直接修改configure脚本。
如何使用PATCH提供的游戏杆重映射功能 你可以按照sample.dgenrc文件中给出的例子修改游戏杆的映射以适应你的要求,这是一个我的游戏杆设置的例子:
# joy_pad1_up = j0a1(-16384) 表示Player1的上方向设为游戏杆设备0的第1轴 # 向的负方向,只有当该方向的轴向位置绝对值超过16384时,才认为该事件发生。 # 这个设置让你可以避免游戏杆传回的噪音信号干扰你对游戏主角的控制,对于 # 飞行摇杆类的游戏杆(如Logitech WingMan 3D)是一个很有用的设置,轴向位置 # 绝对值的取值范围是1~32767 joy_pad1_up = j0a1(-16384) joy_pad1_down = j0a1(+16384) joy_pad1_left = j0a0(-16384) joy_pad1_right = j0a0(+16384) # joy_pad1_a = j0b3表示Player1的A键被定义为游戏杆设备0的第3按钮 joy_pad1_a = j0b3 joy_pad1_b = j0b0 joy_pad1_c = j0b1 joy_pad1_x = j0b2 joy_pad1_y = j0b6 joy_pad1_z = j0b7 joy_pad1_mode = j0b9 joy_pad1_start = j0b8
在Linux下,你可以通过jstest的输出以确定该如何填写配置项,一个类似于GXMAME的图形化前端会使这一工作简单许多,有谁对这个主意感兴趣吗?
这个PATCH可以在Linux下完美地支持各种游戏手柄,然而在FreeBSD上使用UHID手柄时却响应缓慢,这可能是FreeBSD的UHID驱动传回了大量的噪音信号导致的,但XMAME-0.70.1却能在这样的噪声信号下正常处理游戏杆输入,我是FreeBSD的忠实FANS,然而我并不在意FreeBSD的这些不是很"UNIX"的特性,个人认为与其继续修改模拟器以适应FreeBSD下的噪音环境,还不如修改FreeBSD的UHID驱动,毕竟一件这样的工作的有趣程度取决于对社会幸福总量的贡献,如果你是FreeBSD的FANS,那么UHID驱动入口是个不错的开始,你可以在/usr/src/sys/dev/usb/uhid.c找到她。www.usb.org提供了更多深入的细节
XMAME
所有的MAME Fans请起立,注视这个LOGO并高呼3声MAME万岁
无需多说,著名的多街机模拟器MAME的UNIX平台版本,支持各种Unix的变体,甚至是PS2上的Linux! 她能够模拟自1975年起发行的超过4000个大型街机游戏。如果你尚不了解MAME为何物,那么,请先去www.mame.net朝圣。
不要去找RPM,DEB或是PORTS,我们需要的是最新的游戏列表和最好的游戏效果,况且,如果你只需要一个执行文件就能工作,那么有什么理由需要安装包呢?
这里的描述均基于xmame-0.70.1,你可以在x.mame.net找到最新发行版本的源代码包,解开压缩包。删除Makefile(这是一个指向makefile.unix的符号连接),然后将makefile.unix 拷贝成Makefile(在修改出现错误时有一个后备文件总是一件好事),我们剩下所有要做的就是修改Makefile文件以适应我们的系统。总体来说,Makefile选项是一目了然的。但在此之前,还是需要先解释一些背景知识以方便我们做出适当的选择。
XV,OpenGL(xgl),DGA,SVGALIB,SDL,GGI及其他 XV
XV是X视频扩展的缩写,设计用于加速视频播放的X应用程序,她允许应用程序创建不依赖于当前显示模式色深度的视频缓冲区,并直接向视频缓冲区写入RGB或是YUV值,由视频硬件实现色彩空间转换和拉伸,这意味着,即使当前的显示色深度是256色,应用程序也能够以16bits或是32bits色深播放视频。她还可以在不需要root权限的情况下实现全屏播放,因此,这是我们的最佳选择之一。注意XFree86-4.0.2以后的版本才有XVideo支持,你可以通过执行"xvinfo"来了解你的显卡是否支持Xv扩展,你应当看到类似这样的输出:
X-Video Extension version 2.2 screen #0 Adaptor #0: "ATI mach64 Video Overlay" number of ports: 1 port base: 61 operations supported: PutImage supported visuals: depth 16, visualID 0x23 depth 16, visualID 0x24 depth 16, visualID 0x25 depth 16, visualID 0x26 depth 16, visualID 0x27 depth 16, visualID 0x28 depth 16, visualID 0x29 depth 16, visualID 0x2a number of attributes: 17 "XV_DEVICE_ID" (range 0 to -1) client gettable attribute (current value is 89) "XV_LOCATION_ID" (range 0 to -1) client gettable attribute (current value is 90) "XV_INSTANCE_ID" (range 0 to -1) client gettable attribute (current value is 91) "XV_SET_DEFAULTS" (range 0 to 1) client settable attribute "XV_AUTOPAINT_COLORKEY" (range 0 to 1) client settable attribute client gettable attribute (current value is 1) "XV_COLORKEY" (range 0 to -1) client settable attribute client gettable attribute (current value is 6208) "XV_DOUBLE_BUFFER" (range 0 to 1) client settable attribute client gettable attribute (current value is 1) "XV_ENCODING" (range 0 to 12) client settable attribute client gettable attribute (current value is 1) "XV_FREQ" (range 0 to -1) client settable attribute client gettable attribute (current value is 1000) "XV_TUNER_STATUS" (range -1000 to 1000) client gettable attribute (current value is 4) "XV_MUTE" (range 0 to 1) client settable attribute client gettable attribute (current value is 1) "XV_VOLUME" (range -1000 to 1000) client settable attribute client gettable attribute (current value is -1000) "XV_BRIGHTNESS" (range -1000 to 1000) client settable attribute client gettable attribute (current value is 0) "XV_CONTRAST" (range -1000 to 1000) client settable attribute client gettable attribute (current value is 0) "XV_SATURATION" (range -1000 to 1000) client settable attribute client gettable attribute (current value is 16) "XV_COLOR" (range -1000 to 1000) client settable attribute client gettable attribute (current value is 16) "XV_HUE" (range -1000 to 1000) client settable attribute client gettable attribute (current value is 0) maximum XvImage size: 2048 x 2048 Number of image formats: 4 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x59565955 (UYVY) guid: 55595659-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x30323449 (I420) guid: 49343230-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar)
3dfx用户
请确保你的Xfree86版本在4.2.0以上,否则,你可能会在使用XVideo扩展时遇到麻烦(包括XFree86崩溃)。
S3用户
如果你的显卡早于Savage3D(Virge,Trio64,etc),那么拆下来,出门送给第一个你遇见的人。
nVidia用户
请使用XFree86-4.2.0及以后的XFree86发行版本内建的nVidia驱动,或是向nVidia抱怨使用他们的非开源驱动出现的稀奇古怪的问题。
ATI用户
如果xvinfo告诉你没有合适的适配器,或是XMAME抱怨没有合适的视频模式可用的话,不要慌张,GATOS提供了你想要的XVideo驱动,鼠标留下的黑色方块不是太大的问题,切换到文本控制台再切换回来就行。
OpenGL
在任何情况下,如果有XV,就不要用OpenGL,她对二维光栅游戏没有什么帮助,并且与XV相比,她的加速效果相当糟糕。你可以使用glxinfo来确认你的XFree86是否支持glx扩展,在我的Redhat-9(ATI RAGE MOBILITY M1 AGP)上,她的输出是这样的:
name of display: :0.0 Xlib: extension "XFree86-DRI" missing on display ":0.0". display: :0 screen: 0 direct rendering: No server glx vendor string: SGI server glx version string: 1.2 server glx extensions: GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context client glx vendor string: SGI client glx version string: 1.2 client glx extensions: GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context GLX exten[1] [2] [3] 下一页
 |
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。
| 原始作者:佚名 |
录入时间:2007-1-3 3:49:39 |
| 信息来源:不详 |
投稿信箱:itqoo@126.com |
|
|
 |
|
|
|
| 教程录入:itqoo 责任编辑:itqoo |
|
上一个教程: ATi显卡的Linux驱动安装
下一个教程: MPlayer v1.0pre6a 安装手记! |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |