歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

如何在Linux/FreeBSD下玩模擬器游戲

  如果你生於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驅動,畢竟一件這樣的工作的有趣程度取決於對社會幸福總量的貢獻:-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為何物,那麼,請先去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 extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context
OpenGL vendor string: Mesa project: www.mesa3d.org
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 <your sound-card moudle>


# 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


Copyright © Linux教程網 All Rights Reserved