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驱动,毕竟一件这样的工作的有趣程度取决于对社会幸福总量的贡献:-D,如果你是FreeBSD的FANS,那么UHID驱动入口是个不错的开始,你可以在/usr/src/sys/dev/usb/uhid.c找到她。
XMAME
所有的MAME Fans请起立,注视这个LOGO并高呼3声MAME万岁.无需多说,著名的多街机模拟器MAME的UNIX平台版本,支持各种Unix的变体,甚至是PS2上的Linux! 她能够模拟自1975年起发行的超过4000个大型街机游戏。如果你尚不了解MAME为何物,那么,请先去朝圣。
不要去找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 extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
OpenGL vendor string: Mesa project:
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.3 Mesa 4.0.4
OpenGL extensions:
GL_ARB_imaging, GL_ARB_multitexture, GL_ARB_texture_border_clamp,
GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
GL_ARB_texture_env_combine, GL_ARB_texture_env_dot3,
GL_ARB_transpose_matrix, GL_EXT_abgr, GL_EXT_blend_color,
GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_lod_bias
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess
visual x bf lv rg d st colorbuffer ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a bf th cl r g b a ns b eat
----------------------------------------------------------------------
0x23 16 tc 1 16 0 r y . 5 6 5 0 0 16 0 0 0 0 0 0 0 None
0x24 16 tc 1 16 0 r y . 5 6 5 0 0 16 8 16 16 16 0 0 0 None
0x25 16 tc 1 16 0 r y . 5 6 5 8 0 16 8 16 16 16 16 0 0 None
0x26 16 tc 1 16 0 r . . 5 6 5 8 0 16 8 16 16 16 16 0 0 None
0x27 16 dc 1 16 0 r y . 5 6 5 0 0 16 0 0 0 0 0 0 0 None
0x28 16 dc 1 16 0 r y . 5 6 5 0 0 16 8 16 16 16 0 0 0 None
0x29 16 dc 1 16 0 r y . 5 6 5 8 0 16 8 16 16 16 16 0 0 None
0x2a 16 dc 1 16 0 r . . 5 6 5 8 0 16 8 16 16 16 16 0 0 None
支持glx扩展与堪用是两回事,XMAME在没有硬件加速支持的OpenGL驱动下大约能跑到5fps就不错了,这个速度还不到期望速度的1/10,试试看去Utah-GLX碰碰运气吧,也许会有惊喜。
DGA
DGA是Direct Graphics Access的简称,是一种使程序绕过X-服务器直接修改帧缓冲显存的方法。由于直接操作硬件,只有以root身份运行的应用程序才能使用DGA方式,在我看来,这种视频加速的手段过于野蛮。然而借助于直接显存操作,DGA应用程序获得了野兽一样的速度,有人见过CELELON-733能把Strikers 1945 III跑到60fps 吗?如果你的CPU比较慢,那么这可能是你较好的选择。
警告:决不要给XMAME设置suid权限,别的用户会通过SUID root的XMAME获得root身份!
SVGAlib
这是一个使控制台应用程序能够进行图形模式输出的库,她能够识别许多图形芯片,并通过直接驱动硬件来工作。除非你没有安装XFree86,否则,不要使用这个库驱动XMAME,与DGA模式一样,她需要root权限,并且,使用 SVGAlib的XMAME无法在FreeBSD上正常工作。
SDL
这是一个跨平台的多媒体支持库,包括了音频/视频/游戏杆/3D加速等接口,SDL能够根据当前的运行环境选择适当的驱动手段(XV, DGA, SVGALib, AAlib, etc)这可以在在一定程度上使你免于纠缠各种稀奇古怪的视频加速接口。你可以通过运行"sdl-config --version"检查系统是否安装了SDL支持库以及库的版本号。这几乎总是最好的选择,在FreeBSD下,这也是唯一能够获得可用的游戏杆支持的方法。不过XMAME的SDL驱动版本似乎不支持超过当前显示模式色深度的显示,也就是说,如果你当前的显示模式是1024x768 16bits色深,你把不能够运行诸如 Strikers 1945 II,Strikers 1945 III这样的需要32位显示色深度的游戏,而XMAME的X11版本无论使用XV或是DGA 均不存在这样的问题,这不能不说是一个小小的遗憾。
我喜欢开源软件之间的竞争,然而SDL小组很活跃,并且已做的足够好了,我总可以在XV,DGA,SDL之间找到适合我的选择。因此,我对GGI没有太多的兴趣,也许她对Sorlaris用户会有所帮助。3dfx的用户可能会对Glide感兴趣,但我没有这种显卡,因此也无法提供这方面的更多帮助。如果有谁试过XMAME的xfx,svgafx,openstep或是 photon2选项,请分享一下经验好吗?
以下是一个Makefile文件的范例:
...
# 去掉这行的注释以使用联网游戏功能
# XMAME_NET = 1
...
...
# 去掉这行的注释以使用68000的x86汇编优化引擎(需要安装NASM)
# X86_ASM_68000 = 1
# 去掉这行的注释以使用DRC MIPS3引擎
# X86_MIPS3_DRC = 1
# gcc on x86
# 把这行注释掉
CFLAGS = -O -Wall -Wno-unused
# gcc on x86 with some optimizations
# 去掉以下两行的注释,以打开一些优化开关,如果你不是i686芯片,
去掉"-mcpu=i686"
# CFLAGS = -O2 -Wall -Wno-unused -mcpu=i686 -fomit-frame-pointer \
# -fstrict-aliasing -fstrength-reduce -ffast-math
...
...
# 选择适合你的CPU类型,去掉前面的注释
# Valid x86 options that work with any version of gcc.
# CFLAGS += -march=i386
# CFLAGS += -march=i486
# CFLAGS += -march=i586
# CFLAGS += -march=i686
# CFLAGS += -march=pentium
# CFLAGS += -march=pentiumpro
# Valid x86 options that work only with newer versions of gcc.
# CFLAGS += -march=pentium-mmx
# CFLAGS += -march=pentium3
# CFLAGS += -march=pentium4
# CFLAGS += -march=k6
# CFLAGS += -march=k6-2
# CFLAGS += -march=k6-3
# CFLAGS += -march=athlon
# CFLAGS += -march=athlon-tbird
# CFLAGS += -march=athlon-xp
# CFLAGS += -march=athlon-mp
# CFLAGS += -march=athlon-4
...
...
# Linux
# Linux用户去掉这行的注释
ARCH = linux
# FreeBSD
# FreeBSD用户去掉这行的注释
# ARCH = freebsd
...
...
# On x86-based OSes, if supported, you can use standard joystick driver.
# Linux用户去掉这行的注释
# JOY_I386 = 1
...
...
# NetBSD/FreeBSD USB joystick support.
# FreeBSD用户去掉这行的注释
# JOY_USB = 1
...
...
# GNOME用户去掉这行的注释以支持esound输出
# SOUND_ESOUND = 1
# SOUND_ALSA = 1
# SOUND_ARTS_TEIRA = 1
# SOUND_ARTS_SMOTEK = 1
# 去掉这行的注释以支持SDL音频输出
# SOUND_SDL = 1
# SOUND_WAVEOUT = 1
...
...
########################################################
# Select your display method; choose only one.
########################################################
# 选择一种(只允许一种)显示方式,去掉注释符号
# Note: x11 is the only one supported on almost all platforms. For BeOS,
# use SDL.
# X11
# 编译x11版本(xmame.x11)请去掉下一行的注释。如果你的显卡有XV或DGA支持,
这是最好的选择
DISPLAY_METHOD = x11
# SDL library
# 编译SDL版本(xmame.SDL)请去掉下一行的注释。要使用SDL游戏杆
支持则必须使用这个版本
# DISPLAY_METHOD = SDL
# SVGALib, only supported under Linux
# 编译svgalib版本(xmame.svgalib)请去掉下一行的注释。
# DISPLAY_METHOD = svgalib
# GGI, only tested under Linux
# DISPLAY_METHOD = ggi
# OpenGL under X11
# 编译OpenGL版本(xmame.xgl)请去掉下一行的注释。
# DISPLAY_METHOD = xgl
# Glide under X11
# DISPLAY_METHOD = xfx
# Glide in console mode
# DISPLAY_METHOD = svgafx
# OpenStep bitmaps
# DISPLAY_METHOD = openstep
# Photon 2.x (QNX6), currently buggy, but working...
# DISPLAY_METHOD = photon2
...
...
# MIT-Shared Memory X Extensions
# 使能MIT风格共享内存扩展,不要注释她
X11_MITSHM = 1
# Use Xv extension for hardware scaling.
# 使能Xvideo扩展,不要注释她
X11_XV = 1
# Enable XFree86 DGA. This also causes "make install" to set
the suid bit
# on the executable.
# 使能DGA扩展支持,如果你可能需要使用DGA方式(当XV不可用时)的话
,去掉这行的注释
# X11_DGA = 1
# Work around a bug in the XFree86 tdfx driver that
prevents the original
# mode from being restored when leaving DGA2 mode.
# 我没有3dfx卡,3fdx用户试试吧
# TDFX_DGA_WORKAROUND = 1
# The XIL library (Solaris 2.5.1 and higher)
# Solaris 9 Sparc 宣称这个库被废弃了。
# X11_XIL = 1
...
...
# Uncomment this to use XInput devices, e.g. additional mice as
# trackballs.
# 如果你要玩双打枪战游戏(Space Gun,etc),去掉这行注释,
这使XMAME能够接受X-WINDOW下第二鼠标的输入
# XINPUT_DEVICES = 1
...
...
# The name of your sdl-config executable
# FreeBSD用户可能要把"sdl-config"改成"sdl11-config"
SDL_CONFIG = sdl-config
编译XMAME
如果你想使用x86汇编优化的68000核心,你必须首先安装nasm,Redhat Linux发行版包含了这个包。 FreeBSD用户则可以在/usr/ports/devel/nasm/找到这个ports,如果你还没有安装这个ports,进入这个目录 "make && make install"就行。然后使用GNU-MAKE来MAKE工程,像这样"gmake"(linux用户用"make"也一样) 编译完成后,你可能会得到xmame.x11, xmame.xgl, xmame.SDL或是xmame.svgalib这样的执行文件,具体是哪一个取决于你选择的显示驱动,你可以把她放到任何你喜欢的目录里,我习惯把她放在"/usr/local/bin/" 下。
怎么样在指令行模式下使用XMAME
xmame.SDL
你可以用下面这条指令以全屏模式启动Strikers 1945的游戏,并让xmame使用SDL游戏杆驱动:
$ xmame.SDL -fullscreen -jt 7 ./s1945.zip
xmame.x11
下面这条指令以全屏模式启动Strikers 1945的游戏,并强制xmame使用XVideo加速,并使用新版的Linux 游戏杆驱动:
$ xmame.11 -x11 1 -xv -jt 4 ./s1945.zip
下面这条指令以全屏模式启动Strikers 1945的游戏,并强制xmame不使用XV而使用DGA加速,并使用旧版的Linux游戏杆驱动:
# xmame.11 -x11 1 -noxv -jt 1 ./s1945.zip
xmame默认'5'是Player1投币,'1'是Player1开始,试一试吧,你还有你往日的身手吗?你可以按"TAB"键弹出设置菜单,修改缺省的键盘/游戏杆设置以符合你的口味。"xmame.xxx --help"可以得到xmame的命令行帮助,更详细的帮助可以参考xmame手册(英文) M.A.M.E 32中文說明 是另一个有关mame主题不错的中文文档 。
使用GXMAME图形前端
如果你觉得命令行过于专业而你想让娱乐变得轻松一些的话, GXMAME是个不错的主意。这是一个GNOME环境下的xmame的前端(不要害怕,只要安装了gtk+的库,她在诸如 KDE这样的窗口环境里也一样能运行),与mame32(著名的windows下的mame图形界面)及其相似的外观与操作习惯,相信你会喜欢的。
关于xmame-0.71.1
2003年7月19日,xmame-0.71.1正式发行了,然而事情变得有点复杂:注意配置文件中的这一行,不要取消这行的注释,否则编译把会失败。
# X86_MIPS3_DRC = 1
在Redhat Linux 9 (GCC 3.2.2 20030222)上,她成功地编译并且运行了,然而在FreeBSD-4.8 STABLE上,即使我禁用了X86_MIPS3_DRC引擎,编译却仍然失败了。我知道FreeBSD小组在7月14日把缺省编译器升级到了 gcc-3.3,并且正在解决一部分ports编译出错的问题,于是猜测这可能与编译器有关,7月21日,FreeBSD小组把缺省编译器回滚到了gcc-2.95.4,我重新编译了一次,仍然无法通过(我没有测试过在Linux下的gcc-2.95 的编译情况怎么样),我猜测XMAME需要gcc-3.2,于是,我编译了/usr/ports/lang/gcc32以使FreeBSD使用与 Linux相同的编译器,这个猜想立即得到了验证-- 编译通过了,并且XMAME运行正常。
在你向FreeBSD的mail-list发出你的BUG-REPORT之前,请先检查你的编译器版本,或是使用xmame-0.70.1 (她在2.95/3.2/3.3上编译都没问题),mail-list里的问题已经足够多了,请给FreeBSD小组多一些PATCH、建议或是时间。
使用游戏杆
当然使用游戏杆,我没兴趣用键盘玩游戏,如果你不在乎这个,那么跳过这一节。感谢 Vojtech Pavlik,感谢Suse与Intel,Linux用户拥有Unix环境下最出色的Joystick驱动支持,包括USB 接口,Gameport接口甚至Win2000不支持的并口游戏杆都可以支持。Redhat-7.x以上版本已经自带了这个驱动,并且随内核发布了可装载驱动模块。如果你重编译了核心或是使用了其他的核心发布,请确保你编译了相应的模块。否则以下描述很可能对你不适用。
USB接口HID游戏杆
我们这里所说的USB游戏手柄是指不带力回馈功能的标准UHID设备(M$称为人体工程学输入设备)这是目前市面上最容易买到,也最容易被驱动的游戏手柄,你只需选择一个选择一个usb接口,插上手柄,在/var/log/message里你可以看到发现新的HID设备的的信息,以root身份运行"modprobe joydev",然后执行"jstest /dev/input/js0"(对于Redhat Linux,/dev/js0也同样指向该设备)jstest把报告该游戏手柄的轴向个数和按钮个数,当你按下按钮时jstest报告哪个轴向发生了变化以及哪个按钮被按下。
Gameport游戏杆
这是在史前时代流传下来的游戏杆接口标准,Linux对她们有很好的支持。一个最常见的Gameport接口2轴 6键手柄的驱动方式看起来会像下面这样,你可以使用"jstest /dev/js0"来验证游戏手柄是否已被正确驱动。
# modprobe # modprobe ns558
# modprobe analog js=gamepad
# modprobe joydev
如果你安装了kernel-source你可以在/usr/src/linux-2.4.xx/Documentation/joystick.txt里找到关于 js参数的详细描述。
Type Meaning
none No analog joystick on that port
auto Autodetect joystick
2btn 2-button n-axis joystick
y-joy Two 2-button 2-axis joysticks on an Y-cable
fcs Thrustmaster FCS compatible joystick
chf Joystick with a CH Flightstick compatible hat
fullchf CH Flightstick compatible with two hats and 6 buttons
gamepad 4/6-button n-axis gamepad
gamepad8 8-button 2-axis gamepad
并口游戏杆
对于并口游戏杆,Linux同样有出色的支持,最常见的PSX并口手柄可以用以下指令驱动:
# modprobe gamecon gc=0,7
# modprobe joydev"
gc参数形式是这样的:gc=port,pad1,pad2,pad3,pad4,pad5。这里gc的第一个参数0表示使用并口1作为输入端口,第二个参数7表示pad1是SonyPSX游戏杆(大部分常见的PSX跳舞毯也可以同样的方式驱动),其他参数类型见下表,你可以在/usr/src/linux-2.4.xx/Documentation/joystick-parport.txt找到完整而精彩的描述。
Type Joystick/Pad
0 None
1 SNES pad
2 NES pad
4 Multisystem 1-button joystick
5 Multisystem 2-button joystick
6 N64 pad
7 Sony PSX controller
另一个并口游戏杆驱动db9的参数形式是这样的:db9=port,type。她支持以下类型的并口游戏杆。
Type Joystick/Pad
0 None
1 Multisystem 1-button joystick
2 Multisystem 2-button joystick
3 Genesis pad (3+1 buttons)
5 Genesis pad (5+1 buttons)
6 Genesis pad (6+2 buttons)
7 Saturn pad (8 buttons)
8 Multisystem 1-button joystick (v0.8.0.2 pin-out)
9 Two Multisystem 1-button joysticks (v0.8.0.2 pin-out)
10 Amiga CD32 pad
FreeBSD与NetBSD共享一套uhid设备驱动代码,对于USB游戏手柄有最基本的支持,在我的PC上FreeBSD-5.1current下的SDL库(1.2.5)能够驱动我的Topway 单人手柄,但却坚持认为我的Gametec USB双人手柄有-1个按钮:-< 而使用BSD uhid接口的xmame-0.70.1 则干脆认不出任何游戏手柄设备,但Taik0说UHID游戏手柄设备在*BSD上可以使用,并且成功地在xmame-0.57.1上驱动了他的JOYSTICK,我相信这可能与游戏杆设备有关,你可以按照他给出的CASE试一试,或许这对你适用。但借助SDL的支持,xmame-0.70.1完美地支持了UHID单人手柄,需要注意的是你必须对/dev/uhid0拥有写权限,否则把无法使用手柄。
FreeBSD能够支持ISA声卡上的Gameport接口,但似乎对于PCI声卡上的Gameport接口不感兴趣,无论是4- STABLE还是5-CURRENT,Alex Teslik给出了一个不用修改代码就能让FreeBSD支持Logitech Wingman Attack joystick的方法,然而我在4.8-STABLE(2003-07-18)和5-CURRENT(2003-07-18)上测试均未成功,虽然FreeBSD已经驱动了我的CMEDIA PCI声卡。kldstat -v的输出是这样的:
2 1 0xc1db4000 2000 joy.ko
Contains modules:
Id Name
216 isa/joy
3 1 0xc1d94000 4000 snd_cmi.ko
Contains modules:
Id Name
211 pci/snd_cmi
4 1 0xc1d99000 14000 snd_pcm.ko
Contains modules:
Id Name
210 snd_pcm
而Alex Teslik给出的结果是这样的
4 1 0xc3053000 3000 joy.ko
Contains modules:
Id Name
99 isa/joy
100 pci/joy
5 1 0xc305a000 14000 snd_pcm.ko
Contains modules:
Id Name
101 snd_pcm
我没有兴趣只是为了驱动游戏手柄而回滚内核代码,这么做没有意义,由于手边没有ISA声卡,我无从得知FreeBSD对于ISA-GAMEPORT的支持究竟怎么样,但至少SDL的JOYSTICK驱动中包含了对FreeBSD的GAMEPORT的支持(SDL12/src/joystick/bsd/SDL_sysjoystick.c 2003-06-02),因此,如果你有被列在FreeBSD兼容列表里的ISA的声卡,和GAMEPORT口的游戏手柄,你应当不会失望。