Xine メディアプレーヤー

Xine インストールログ

Linuxでも 動画や DVDを見る環境がだいぶ充実しました
Xine(クシーン? ザイン?)を紹介します
これがあれば 動画再生は満ち足りるというほど充実してます
検証環境
CPU AMD Turion-MT37 2GHz
メモリ 1GB
グラフィック nVidia GeForce6600
DVD BenQ DVD DC DW1670
OS Linux 2.6.30.5
ウィンドウシステム Xorg-1.5.1 + fluxbox-1.1.1
OpenGL Mesa-7.5 + NVIDIA-Linux-x86-185.18.14
GCC gcc-4.1.2
Cライブラリ glibc-2.5
Firefox 3.5
Xineの特徴としては

  • DVD VCD AVIファイル Mpegファイル DivX Win32codec など幅広いフォーマットに対応
  • 入出力(ファイルやビデオ)をプラグイン化することで拡張性が高い
  • xine-lib(各種 コーデック プラグイン) と UIが分離している
  • さまざまな UIがある

従って 流れとしては

  1. コーデック 必要なライブラリ を別途入手して インストール
  2. xine-libをインストール
  3. UIをインストール

totemスクリーンショット
いろいろなインターフェースがあります 上の図は Ubuntuに採用されている totemです

コーデックのインストール

実は Xineは Windowsのコーデックを無理矢理 Linuxで使うというようなことをやってます
コーデックのパックが配布されているところがあるので 各種 .dll を拝借します

リンク元が分からないため 私が拾ってきたコーデックパックを ここに載せます
essential-20071007.tar.bz2 (MPlayer のサイトで配布されていたものだと思います)

$ su
# cd /usr/local/lib
# mkdir win32
# cd win32
# tar -xjf ~admin/essential-20071007.tar.bz2 --strip-path=1
# ls
AvidQTAVUICodec.qtx          cook.so.6.0   l3codeca.acm  qtmlClient.dll  vmnc.dll
BeHereiVideo.qtx             ctadp32.acm   l3codecx.ax   rt32dcmp.dll    voxmsdec.ax
CLRVIDDC.DLL                 ddnt.so.6.0   lhacm.acm     scg726.acm      vp31vfw.dll
CtWbJpg.DLL                  divx.dll      lsvxdec.dll   sipr.so.6.0     vp4vfw.dll
DECVW_32.DLL                 divx_c32.ax   m3jp2k32.dll  sp5x_32.dll     vp5vfw.dll
LCMW2.dll                    divxa32.acm   m3jpeg32.dll  tm20dec.ax      vp6vfw.dll
LCODCCMW2E.dll               divxc32.dll   m3jpegdec.ax  tokf.so.6.0     vp7vfw.dll
LCodcCMP.dll                 divxdec.ax    mcdvd_32.dll  tokr.so.6.0     vssh264.dll
QuickTime.qts                dnet.so.6.0   mcmjpg32.dll  tsccvid.dll     vssh264core.dll
QuickTimeEssentials.qtx      drv2.so.6.0   mi-sc4.acm    tsd32.dll       vssh264dec.dll
QuickTimeInternetExtras.qtx  drv3.so.6.0   mpg4c32.dll   tssoft32.acm    vsshdsd.dll
VDODEC32.dll                 drv4.so.6.0   mpg4ds32.ax   tvqdec.dll      vsslight.dll
ViVD2.dll                    drvc.so       msadp32.acm   ubv263d+.ax     vsswlt.dll
acelpdec.ax                  dspr.so.6.0   msg711.acm    ubvmp4d.dll     wma9dmod.dll
alf2cd.acm                   huffyuv.dll   msgsm32.acm   ultimo.dll      wmadmod.dll
aslcodec_dshow.dll           i263_32.drv   msh261.drv    vdowave.drv     wmsdmod.dll
aslcodec_vfw.dll             iac25_32.ax   msms001.vwp   vgpix32d.dll    wmspdmod.dll
asusasv2.dll                 iccvid.dll    msnaudio.acm  vid_3ivX.xa     wmv8ds32.ax
asusasvd.dll                 icmw_32.dll   msrle32.dll   vid_cvid.xa     wmv9dmod.dll
ativcr2.dll                  imaadp32.acm  msscds32.ax   vid_cyuv.xa     wmvadvd.dll
atrac3.acm                   imc32.acm     msvidc32.dll  vid_h261.xa     wmvdmod.dll
atrc.so.6.0                  ir32_32.dll   mvoiced.vwp   vid_h263.xa     wmvds32.ax
avimszh.dll                  ir41_32.dll   nsrt2432.acm  vid_iv32.xa     wnvplay1.dll
avizlib.dll                  ir50_32.dll   pclepim1.dll  vid_iv41.xa     wnvwinx.dll
clrviddd.dll                 ivvideo.dll   qdv.dll       vid_iv50.xa     wvc1dmod.dll
cook.so                      jp2avi.dll    qpeg32.dll    vivog723.acm    xanlib.dll
#

ライブラリのインストール

DVDを見るには libdvdcss が必要です
解凍後
./configure –prefix=/usr/local
make
su
make install
でインストールされます
これは DVDの画像に施されている 暗号化を解除するためのライブラリです

他にも libogg や libvorbis などの必要なライブラリを入れます
(詳細は 忘れてしまいましたが 後述の Xineのビルド時にチェックできます)

xine-libのインストール

いよいよ Xineの核となる xine-lib です
$ tar -xjf xine-lib-1.1.16.2.tar.bz2
$ cd xine-lib-1.1.16.2
$ $ ./configure --enable-directfb --enable-static --with-w32-path=/usr/loc
al/lib/win32 --prefix=/usr/local
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking build system type... i686-pc-linux-gnu
…
…
xine-lib summary:
----------------
 * input plugins:
   - file          - net
   - stdin_fifo    - rtp
   - http          - mms
   - pnm           - rtsp
   - dvb
   - dvd (internal libs)
   - vcd (internal libs)
   - vcdo
   - cdda
   - gnome-vfs
   - v4l

 * demultiplexer plugins:
   - avi           - mpeg
   - mpeg_block    - mpeg_audio
   - mpeg_elem     - mpeg_pes
   - mpeg_ts       - qt/mpeg-4
   - film          - roq
   - fli           - smjpeg
   - idcin         - wav
   - wc3 mve       - voc
   - vqa           - aiff
   - cdda          - snd/au
   - yuv4mpeg2     - real/realaudio
   - ea wve        - raw dv
   - interplay mve - psx str
   - ws aud        - pva
   - vox
   - nsv           - 4xm
   - FLAC          - aac
   - iff           - matroska
   - vmd           - flv
   - nsf
   - ogg
   - ac3 (internal library)

 * video decoder plugins:
   - MPEG 1,2         - Amiga Bitplane
   - Raw RGB          - Raw YUV
   - ffmpeg (internal library):
     - MPEG-4 (ISO, Microsoft, DivX*, XviD)
     - Creative YUV    - Motion JPEG
     - Cinepak         - MS Video-1
     - FLI/FLC         - MS RLE
     - Id RoQ          - Id Cin
     - Apple Graphics  - Apple Video
     - Apple Animation - Interplay Video
     - Westwood VQA    - Origin Xan
     - H.263           - Intel Indeo 3
     - SVQ1            - SVQ3
     - Real Video 1.0  - Real Video 2.0
     - 4X Video        - Sierra Video
     - Asus v1/v2      - HuffYUV
     - On2 VP3         - DV
     - 8BPS            - Duck TrueMotion v1
     - ATI VCR1        - Flash Video
     - ZLIB            - MSZH
   - dxr3_video
   - w32dll
   - gdk-pixbuf

 * audio decoder plugins:
   - GSM 06.10       - linear PCM
   - ffmpeg (internal library):
     - Windows Media Audio v1/v2
     - DV            - logarithmic PCM
     - 14k4          - 28k8
     - MS ADPCM      - IMA ADPCM
     - XA ADPCM      - Game DPCM/ADPCM
     - Mace 3:13     - Mace 6:1
     - FLAC
   - Nosefart (NSF)
   - vorbis
   - w32dll
   - MAD (MPG 1/2/3) (internal library)
   - DTS (internal library)
   - A52/ra-dnet (internal library)
   - MusePack (internal library)

 * subtitle decoder plugins:
   - spu             - spucc
   - spucmml         - sputext
   - spudvb
   - dxr3_spu

 * post effect plugins:
  * planar video effects:
   - invert          - expand
   - eq              - eq2
   - boxblur         - denoise3d
   - unsharp         - tvtime
  * SFX:
   - goom            - oscope
   - fftscope        - mosaico

 * video driver plugins:
   - XShm (X11 shared memory)
   - SyncFB (for Matrox G200/G400 cards)
   - Xv (XVideo *shared*)
   - OpenGL
   - xcb-shm (X shared memory using XCB)
   - xcb-xv (XVideo using XCB)
   - aa (Ascii ART)
   - fb (Linux framebuffer device)
   - sdl (Simple DirectMedia Layer)
   - dxr3 (Hollywood+ and Creative dxr3, mpeg video only)
   - vidix (X11 and framebuffer support)

 * audio driver plugins:
   - oss (Open Sound System)
   - alsa
---
最後にでる xine-lib summary というのが重要です
xine-libの ビルドで使えるようになると思われる プラグインが表示されます
上記のは 実際の今回検証環境のもので DVD avi mpg DivX あらかたのものが再生できます

上記を参考にいただいて 足りない環境があれば 個別にそろえてください

$ make
…
…
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../../../include -I../../../../src/input/vcd/libcdio -I../../../../include -I../../../../lib -I../../../../lib -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -mtune=pentiumpro -O3 -pipe -fomit-frame-pointer -falign-functions=4 -falign-loops=4 -falign-jumps=4 -fexpensive-optimizations -fschedule-insns2 -ffast-math -finline-functions -Wpointer-arith -g -O2 -Wall -Wchar-subscripts -Wnested-externs -Wcast-align -Wmissing-declarations -Wmissing-prototypes -Wmissing-format-attribute -Wno-pointer-sign -Wformat=2 -Wno-format-zero-length -Wstrict-aliasing=2 -DNDEBUG -MT _cdio_linux.lo -MD -MP -MF .deps/_cdio_linux.Tpo -c _cdio_linux.c  -fPIC -DPIC -o .libs/_cdio_linux.o
In file included from _cdio_linux.c:66:
/usr/src/linux/include/scsi/scsi.h:145: error: expected specifier-qualifier-list before 'u8'
/usr/src/linux/include/scsi/scsi.h: In function 'scsi_varlen_cdb_length':
/usr/src/linux/include/scsi/scsi.h:156: error: 'struct scsi_varlen_cdb_hdr' has no member named 'additional_cdb_length'
_cdio_linux.c: In function '_read_mode2_sector_linux':
_cdio_linux.c:724: 警告: dereferencing type-punned pointer might break strict-aliasing rules
make[5]: *** [_cdio_linux.lo] エラー 1
make[5]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio'
make[4]: *** [all-recursive] エラー 1
make[4]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio'
make[3]: *** [all-recursive] エラー 1
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd'
make[2]: *** [all-recursive] エラー 1
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src'
make: *** [all-recursive] エラー 1
$
私の環境では 「u8 が未定義」 だと怒られました
linux-kernel によると typedef unsigned char u8; は asm-generic/int-ll64.h で定義されていますが
gccに -D__KERNEL__ が必要になるため u8自体 そもそもカーネルモジュール用の型と思われます

以下のように src/input/vcd/libcdio/_cdio_linux.c へ定義を追加して 回避しました (64行目に typedef 文追加)

  55 
  56 #include 
  57 #include 
  58 #include 
  59 #include 
  60 #include 
  61 #include 
  62 #include 
  63 
  64 typedef unsigned char u8;
  65 #include 
  66 #include 
  67 #include 
  68 #include 
  69 #include 
  70 
$ make
…
…
Making all in win32
make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32'
Making all in include
make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32/include'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32/include'
make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32'
make[2]: `all-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32'
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32'
make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2'
make[1]: `all-am' に対して行うべき事はありません。
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
$ su
# make install
…
…
find . -name \*.so | \
  xargs strings -a | \
  /bin/grep -E '^([-a-z]+/[-+.a-z0-9]+:[^:]+:[^;]+;[ \t]*)+' | \
  sed -e 's/:[^;]\+;/\n/g' | \
  sort -u | \
  sed -e '1 d' >/usr/local/lib/xine/plugins/1.25/mime.types
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
test -z "/usr/local/share/doc/xine-lib" || /bin/mkdir -p "/usr/local/share/doc/xine-lib"
 /bin/install -c -m 644 'COPYING' '/usr/local/share/doc/xine-lib/COPYING'
 /bin/install -c -m 644 'NEWS' '/usr/local/share/doc/xine-lib/NEWS'
 /bin/install -c -m 644 'README' '/usr/local/share/doc/xine-lib/README'
 /bin/install -c -m 644 'TODO' '/usr/local/share/doc/xine-lib/TODO'
 /bin/install -c -m 644 'CREDITS' '/usr/local/share/doc/xine-lib/CREDITS'
 /bin/install -c -m 644 'ChangeLog' '/usr/local/share/doc/xine-lib/ChangeLog'
make  install-data-hook
make[3]: Entering directory `/home/admin/xine-lib-1.1.16.2'
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
#
足りない環境に必要なライブラリを探して インストールする方にむしろ時間がかかると思います

UIのインストール

次に UIですが いくつか選択肢があります

  • xine-ui は標準で用意されてます これでも十分使えます
  • gxine も xine-uiと同じ場所で配布されています
  • totem も Ubuntuなどに採用されている人気のある UIです

xine-ui 不具合版

上の絵は 私の環境の古い xine-ui-0.99.4 ですが
Xorgを入れ替えたタイミングで コントロールパネルがバグって使いものになりません

xine-ui コントロールパネル

本来ならこんな感じのパネルが使えます
ファイルや DVDを開いたり 画像の拡大 アスペクト比変更 ほとんどできます

gxine では Mozilla(Firefox?)用プラグインがある
という話なので 今回こちらの使用感をレポートします
$ tar -xjf gxine-0.5.903.tar.bz2
$ cd gxine-0.5.903
$ ./configure
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
…
config.status: executing po-directories commands
config.status: creating misc/po/POTFILES
config.status: creating misc/po/Makefile
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands
$ make
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
exec > gxine.desktop; cat gxine.desktop.in; /usr/local/bin/xine-list-1.1; echo
make  all-recursive
make[1]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
Making all in m4
mv -f .deps/console_output.Tpo .deps/console_output.Po
gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps    -std=gnu99 -I/usr/local/include   -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include   -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include    -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable   -DLOCALEDIR=\"/usr/local/share/locale\"  -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c
globals.h:39 から include されたファイル中,
                 desktop_integration.c:27 から:
script_engine.h:34:19: error: jsapi.h: そのようなファイルやディレクトリはありません
In file included from globals.h:39,
                 from desktop_integration.c:27:
script_engine.h:40: 警告: type defaults to 'int' in declaration of 'JSErrorReport'
script_engine.h:40: error: expected ';', ',' or ')' before '*' token
script_engine.h:59: error: expected specifier-qualifier-list before 'JSContext'
script_engine.h:75: error: expected specifier-qualifier-list before 'JSFunction'
script_engine.h:119: error: expected specifier-qualifier-list before 'JSObject'
script_engine.h:146: 警告: type defaults to 'int' in declaration of 'JSErrorReport'
script_engine.h:146: error: expected ';', ',' or ')' before '*' token
script_engine.h:151: error: expected declaration specifiers or '...' before 'se_error_cb_t'
script_engine.h:155: error: expected declaration specifiers or '...' before 'JSInt32'
script_engine.h:156: error: expected declaration specifiers or '...' before 'JSFloat64'
script_engine.h:157: error: expected declaration specifiers or '...' before 'JSBool'
script_engine.h:158: error: expected declaration specifiers or '...' before 'JSInt32'
script_engine.h:159: error: expected declaration specifiers or '...' before 'JSFloat64'
script_engine.h:179: error: expected specifier-qualifier-list before 'JSNative'
script_engine.h:186: error: expected declaration specifiers or '...' before 'JSNative'
script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN'
script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN'
script_engine.h:242: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'se_warn_initialisation'
make[2]: *** [desktop_integration.o] エラー 1
make[2]: Leaving directory `/home/admin/gxine-0.5.903/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
make: *** [all] エラー 2
$
という エラーに遭遇しました jsapi.h が見つからないというものです
これは Firefox(というより XULRunner)の問題のようです
jsapi.hは 実際は /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h にあるのに
XULRunnerのビルドでインストールされた /usr/local/lib/pkgconfig/mozilla-js.pc を見ると
prefix=/usr/local
sdkdir=/usr/local/lib/xulrunner-devel-1.9.1.3
includedir=/usr/local/include/xulrunner-1.9.1.3

Name: JavaScript
Description: The Mozilla JavaScript Library
Version: 1.9.1.3
Requires: mozilla-nspr >= 4.8.0
Libs: -L${sdkdir}/lib -lmozjs
Cflags: -I${includedir}/stable -DXP_UNIX -DJS_THREADSAFE
/usr/local/include/xulrunner-1.9.1.3/stable にしか インクルードパスが張られていません
ここでは gxineソースディレクトリ側を修正して
Makefile
src/Makefile
の JS_LIBS の設定にインクルードパスを直接追加しました
JS_CFLAGS = -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable -I /usr/local/include/xulrunner-1.9.1.3/unstable
-I /usr/local/include/xulrunner-1.9.1.3/unstable が追加部分です
(unstable というディレクトリ名が引っかかるところです)
$ make
…
…
make[3]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include'
make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include'
Making all in src
make[2]: Entering directory `/home/deer/admin/Xine/gxine-0.5.903/src'
gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps    -std=gnu99 -I/usr/local/include   -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include   -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include    -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable  -I/usr/local/include/xulrunner-1.9.1.3/unstable -DLOCALEDIR=\"/usr/local/share/locale\"  -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c
In file included from script_engine.h:34,
                 from globals.h:39,
                 from desktop_integration.c:27:
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected identifier or '(' before ')' token
make[2]: *** [desktop_integration.o] エラー 1
make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903'
make: *** [all] エラー 2
$
なんと jsapi.h 自体がエラーとなりました (さすが unstable ディレクトリ…)
/usr/local/include/xulrunner-1.9.1.3/unstable/jstypes.h で定義されている
JS_ALWAYS_INLINE のエラーのようです
168 #ifndef JS_INLINE
169 # if defined __cplusplus
170 #  define JS_INLINE          inline
171 # elif defined _MSC_VER
172 #  define JS_INLINE          __inline
173 # elif defined __GNUC__
174 #  define JS_INLINE          __inline__ 
175 # else
176 #  define JS_INLINE          inline
177 # endif
178 #endif
179 
180 #ifndef JS_ALWAYS_INLINE
181 # if defined DEBUG
182 #  define JS_ALWAYS_INLINE   JS_INLINE
183 # elif defined _MSC_VER
184 #  define JS_ALWAYS_INLINE   __forceinline
185 # elif defined __GNUC__
186 #  define JS_ALWAYS_INLINE   __attribute__((always_inline)) JS_INLINE
187 # else
188 #  define JS_ALWAYS_INLINE   JS_INLINE
189 # endif
190 #endif
私の gcc 環境では __attribute__((always_inline)) がうまく使えません
(これは Cの関数定義をインライン化するためのコンパイラ指示のようですが)
inline なら認識されますので 以下のように jstypes.h を修正しました
168 #ifndef JS_INLINE
169 # if defined __cplusplus
170 #  define JS_INLINE          inline
171 # elif defined _MSC_VER
172 #  define JS_INLINE          __inline
173 # elif defined __GNUC__
174 //#  define JS_INLINE          __inline__ 
175 #  define JS_INLINE          inline
176 # else
177 #  define JS_INLINE          inline
178 # endif
179 #endif
180 
181 #ifndef JS_ALWAYS_INLINE
182 # if defined DEBUG
183 #  define JS_ALWAYS_INLINE   JS_INLINE
184 # elif defined _MSC_VER
185 #  define JS_ALWAYS_INLINE   __forceinline
186 # elif defined __GNUC__
187 //#  define JS_ALWAYS_INLINE   __attribute__((always_inline)) JS_INLINE
188 #  define JS_ALWAYS_INLINE   JS_INLINE
189 # else
190 #  define JS_ALWAYS_INLINE   JS_INLINE
191 # endif
192 #endif
強引ですがビルドを継続します
$ make
…
…
Making all in po
make[2]: Entering directory `/home/admin/gxine-0.5.903/po'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gxine-0.5.903/po'
make[2]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
make[2]: `all-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gxine-0.5.903'
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
$ su
# make install
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
make  install-recursive
make[1]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
Making install in m4
…
…
test -z "/usr/local/share/applications" || /bin/mkdir -p "/usr/local/share/applications"
 /bin/install -c -m 644 'gxine.desktop' '/usr/local/share/applications/gxine.desktop'
make[3]: Leaving directory `/home/admin/gxine-0.5.903'
make[2]: Leaving directory `/home/admin/gxine-0.5.903'
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
#
多少の工夫が必要でしたが インストールは可能です

使い勝手の検証

gxine を使ってみて xine-ui と使い勝手を比較してみました

gxine初期画面

初回起動すると ~/.config/gxine/ が作成されコンフィグを初期設定してくれます
検証の環境では CD/DVD を /dev/cdroms/cdrom0 となるように udevをカスタマイズしているため
gxineが見つけてくれず CD と DVD デバイスが認識されませんでした

通常のディストリビューションを使って入れば問題ないでしょう

gxine起動時

gxine起動時の画面です
画像のズームや ウィンドウサイズの変更など 基本的な設定はメニュー化されています

ただし 検証の環境では 再生ウィンドウをドラッグして任意倍ズームするのが
思ったとおりのサイズにズームされず使い勝手がよろしくなかったです (fluxboxのせい?)

gxine aviファイル再生

あらかたの動画形式は視聴できます

インターネット配信(.asx)も
.asxファイルを一旦ローカルディスクにダウンロードして gxineから開く ことで再生できました

ただし Mozillaプラグイン導入の指定をしたのにも関わらず
Firefoxでクリックして再生ウィンドウが開く とう期待通りの設定はされませんでした
また ファイル名 動画タイトル などが文字化けしています
これは 検証のシステムが EUC-JP系だからかもしれません (UTF-8なら問題なし?)

gxine DVD再生

CD DVD デバイスを認識させるために ~/.config/gxine/config を編集して
以下の各行を適切に設定すれば CD DVD の視聴が可能です

media.audio_cd.device:/dev/cdroms/cdrom0
media.dvd.device:/dev/cdroms/cdrom0
media.vcd.device:/dev/cdroms/cdrom0

↑で再生されている 某メイドアニメDVD を見て分かるとおり
DVDのメニューについてもマウスで操作可能で 完璧な仕上りぶり

と思われましたが
コントロールパネルに チャプタージャンプ や タイトルジャンプ などのジャンプメニューありません
(xine-ui にはあります)

gxine xine-ui 比較結果

gxineの優位な点 メニューが日本語 (ただし EUC-JP環境では苦しい表示も)
ファイル選択画面が使い易い (EUC-JPも問題なし)
CD DVD 環境の自動設定 (初回起動時)
早送り機能がある (ただし 動画形式によっては不具合も)
Mozillaプラグイン (ただし 検証の環境では確認できず)
xine-uiの優位な点 再生ウィンドウをマウスドラッグで任意倍拡大ができる (gxineは 使い心地が悪い)
ファイル選択画面は一応日本語可能 (gxineに比べると使い勝手は悪い)
DVD のジャンプメニューがある (ただしチャプター番号指定してジャンプする部分が反応しないことあり)
早送り 巻戻し 機能がある (ただし 動画形式によっては不具合も)


結局 xine-ui使うことにしました
(期待していた Mozillaプラグインが空振りしたのと DVDでタイトル画面が呼べないのが痛い)

xine-ui DVD再生

xine-ui の DVD観賞はこんな感じです
「メニュー切り替え」とか「ルート」を選択すると 一発でタイトルに飛びます
マウスによる メニュー選択もばっちりOK

ただし 番号を押してそのチャプターに飛ぼうとしたとき
うまく 飛んでくれる場合と反応がない場合があり いまいち使い勝手が悪い

あと
xine-uiをビルドするときに注意点があります
ソースコードをそのままビルドすると 日本語が文字化けしてしまいます

xine-uiは フォントのXLFD名をソースコード内にハードコードしているので
-*-*-*-*-*-*-14-*-*-*-*-*-jisx0208.1983-* のように日本語フォントに全置換してあげます
xine-ui-0.99.5用のパッチ を作ってみました参考にしてださい

$ tar -xzf xine-ui-0.99.5.tar.gz
$ cd xine-ui-0.99.5
$ zcat ../xine-ui-0.99.5-japanese.patch.gz | patch -p1
patching file src/xitk/event_sender.c
patching file src/xitk/file_browser.c
patching file src/xitk/help.c
patching file src/xitk/kbindings.c
patching file src/xitk/mediamark.c
patching file src/xitk/post.c
patching file src/xitk/setup.c
patching file src/xitk/skins/xinetic/skinconfig
patching file src/xitk/skins.c
patching file src/xitk/stream_infos.c
patching file src/xitk/tvset.c
patching file src/xitk/viewlog.c
patching file src/xitk/xine-toolkit/font.h
patching file src/xitk/xine-toolkit/test.c
$ ./configure --prefix=/usr/local --disable-xft
…
…
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: creating src/xitk/xine-toolkit/po/POTFILES
config.status: creating src/xitk/xine-toolkit/po/Makefile
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands
$ make
…
…
make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src/fb'
make[3]: Entering directory `/home/admin/xine-ui-0.99.5/src'
make[3]: `all-am' に対して行うべき事はありません。
make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src'
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5/src'
make[2]: Entering directory `/home/admin/xine-ui-0.99.5'
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5'
make[1]: Leaving directory `/home/admin/xine-ui-0.99.5'
$ su
# make install
…
…
make[2]: `install-exec-am' に対して行うべき事はありません。
make[2]: `install-data-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5'
make[1]: Leaving directory `/home/admin//xine-ui-0.99.5'
#
検証の環境では –disable-xft もしないと日本語が表示されませんでした

MegaDrive Mega-CD エミュレータ Gens

だめもとで試してみた Gens Linux port が動作した

というわけで ビルドしてインストールするまでの様子をレポートします
以下の評価環境で実験しました NASMアセンブラがビルドに必要のようです
評価環境

OS Linux kernel-2.6.24
CPU Turion64 MT-37 (2GHz)
グラフィック GeForce6600GT NVIDIA-Linux-x86-96.43.05
OpenGL Mesa-6.5.2
サウンド ALSA SoundBlaster Live Gamer
ゲームパッド USB ELECOM JC-PS201U (プレステコントローラアダプタ)
Gens Gens/GS Milestone 6 (Source Code)
コンパイラ gcc バージョン 4.1.2
アセンブラ NASM version 0.98.39

Gensのソースは SONIC RETRO GENS/GS から取得します
以下のように ソースファイルを一時ディレクトリに展開してビルドを開始します
$ tar -xzf Gens-2.15.5-gs-m6.tar.gz
$ cd gens-2.15.5-gs-m6
$ ./configure --prefix=/usr/local
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /bin/install -c
〜
config.status: creating src/libpng/Makefile
config.status: creating src/mp3_dec/Makefile
config.status: creating src/starscream/Makefile
config.status: creating src/starscream/main68k/Makefile
config.status: creating src/starscream/sub68k/Makefile
config.status: creating config.h
config.status: executing depfiles commands
$ make
検証の環境においては 実際は以降に述べるようなコンパイルエラーが出ました
〜
if g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I. -I./../ -I./ui/   -I./ui/gtk/    -DGENS_DATADIR=\"/home/admin/share/gens\" -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include   -DGTK_DISABLE_DEPRECATED -O2 -Wall -Wextra -g  -g -O2 -O2 -Wall -Wextra -g  -g -O2 -MT ui/gtk/gens/gens-gens_window_callbacks.o -MD -MP -MF "ui/gtk/gens/.deps/gens-gens_window_callbacks.Tpo" -c -o ui/gtk/gens/gens-gens_window_callbacks.o `test -f 'ui/gtk/gens/gens_window_callbacks.cpp' || echo './'`ui/gtk/gens/gens_window_callbacks.cpp; \
then mv -f "ui/gtk/gens/.deps/gens-gens_window_callbacks.Tpo" "ui/gtk/gens/.deps/gens-gens_window_callbacks.Po"; else rm -f "ui/gtk/gens/.deps/gens-gens_window_callbacks.Tpo"; exit 1; fi
ui/gtk/gens/gens_window_callbacks.cpp: In function 'void gens_window_drag_data_received(GtkWidget*, GdkDragContext*, gint, gint, GtkSelectionData*, guint, guint, void*)':
ui/gtk/gens/gens_window_callbacks.cpp:127: error: 'g_uri_unescape_string' was not declared in this scope
ui/gtk/gens/gens_window_callbacks.cpp: At global scope:
ui/gtk/gens/gens_window_callbacks.cpp:93: 警告: unused parameter 'widget'
ui/gtk/gens/gens_window_callbacks.cpp:93: 警告: unused parameter 'x'
ui/gtk/gens/gens_window_callbacks.cpp:93: 警告: unused parameter 'y'
ui/gtk/gens/gens_window_callbacks.cpp:93: 警告: unused parameter 'target_type'
ui/gtk/gens/gens_window_callbacks.cpp:93: 警告: unused parameter 'data'
ui/gtk/gens/gens_window_callbacks.cpp:149: 警告: unused parameter 'x'
ui/gtk/gens/gens_window_callbacks.cpp:149: 警告: unused parameter 'y'
ui/gtk/gens/gens_window_callbacks.cpp:149: 警告: unused parameter 'user_data'
ui/gtk/gens/gens_window_callbacks.cpp:171: 警告: unused parameter 'widget'
ui/gtk/gens/gens_window_callbacks.cpp:171: 警告: unused parameter 'event'
ui/gtk/gens/gens_window_callbacks.cpp:171: 警告: unused parameter 'user_data'
ui/gtk/gens/gens_window_callbacks.cpp:185: 警告: unused parameter 'widget'
ui/gtk/gens/gens_window_callbacks.cpp:185: 警告: unused parameter 'event'
ui/gtk/gens/gens_window_callbacks.cpp:185: 警告: unused parameter 'user_data'
make[3]: *** [ui/gtk/gens/gens-gens_window_callbacks.o] エラー 1
make[3]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src/gens'
make[2]: *** [all-recursive] エラー 1
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make: *** [all] エラー 2
$
‘g_uri_unescape_string’ was not declared in this scope と怒られました
g_uri_unescape_string() 関数とは Glib で提供されていた関数で
文字列中のエスケープ文字を処理する機能を提供するようです
最近の Glib のバージョンのためか 現在はこの機能が削除されたのでしょう

src/gens/ui/gtk/gens/gens_window_callbacks.cpp で発生したエラーなので
このソースコードの 空いている箇所に 以下のコードを追加します
 static int
 unescape_character (const char *scanner)
 {
   int first_digit;
   int second_digit;

   first_digit = g_ascii_xdigit_value (*scanner++);
   if (first_digit < 0)
     return -1;

   second_digit = g_ascii_xdigit_value (*scanner++);
   if (second_digit < 0)
     return -1;

   return (first_digit << 4) | second_digit;
 }

 static char *
 g_uri_unescape_segment (const char *escaped_string,
                         const char *escaped_string_end,
                         const char *illegal_characters)
 {
   const char *in;
   char *out, *result;
   gint character;

   if (escaped_string == NULL)
     return NULL;

   if (escaped_string_end == NULL)
     escaped_string_end = escaped_string + strlen (escaped_string);

   result = (char*) g_malloc (escaped_string_end - escaped_string + 1);

   out = result;
   for (in = escaped_string; in < escaped_string_end; in++)
     {
       character = *in;

       if (*in == '%')
         {
           in++;

           if (escaped_string_end - in < 2)
             {
               /* Invalid escaped char (to short) */
               g_free (result);
               return NULL;
             }

           character = unescape_character (in);

           /* Check for an illegal character. We consider '\0' illegal here. */
           if (character <= 0 ||
               (illegal_characters != NULL &&
                strchr (illegal_characters, (char)character) != NULL))
             {
               g_free (result);
               return NULL;
             }

           in++; /* The other char will be eaten in the loop header */
         }
       *out++ = (char)character;
     }
 
   *out = '\0';

   return result;
 }

 char *
 g_uri_unescape_string (const char *escaped_string,
                        const char *illegal_characters)
 {
   return g_uri_unescape_segment (escaped_string, NULL, illegal_characters);
 } 
これら 3つの関数を直接記述することで GLibの g_uri_unescape_string() を代用します

ふたたび make したところ 今度は
mkdir -p gens_core/gfx/ gens_core/io/ gens_core/mem/ gens_core/misc/ ;
mkdir -p gens_core/sound/ gens_core/cpu/sh2/ gens_core/vdp/ gens_core/cpu/z80/ ;
/usr/local/bin/nasm -O3 -f elf -D __GCC2 -D __OBJ_ELF -g -F dwarf -w-orphan-labels -I./gens_core/ -I./gens_core/io/ -I./gens_core/misc/ -I./gens_core/vdp/ -I./gens_core/sound/ -I./gens_core/gfx/ -I./gens_core/cpu/sh2/ -I./gens_core/cpu/z80/ -I./gens_core/mem/ gens_core/gfx/fastblur_16_x86.asm -o gens_core/gfx/fastblur_16_x86.o
nasm: fatal: unrecognized debug format `dwarf' for output format `elf'
type `nasm -h' for help
make[3]: *** [gens_core/gfx/fastblur_16_x86.o] エラー 1
make[3]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src/gens'
make[2]: *** [all-recursive] エラー 1
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make: *** [all] エラー 2
elfフォーマットでは dwarfデバッグフォーマットは使えない と言われました
確かに ELFは Linuxなどでよく使われる実行ファイルのフォーマットで
DWARFはデバッグ情報のフォーマットです

仕方がないので DWARF機能を無効化してみます
うまくビルドできたとしても デバッガ上での動作で不具合を起こす可能性が高くなります

src/gens/Makefile 中に 以下のように NASMのオプションんを設定している箇所があるので
 NASM = /usr/local/bin/nasm -O3 -f elf -D __GCC2 -D __OBJ_ELF -g -F dwarf -w-orphan-labels $(NASM_INCLUDES)
次のように書き換えます
 NASM = /usr/local/bin/nasm -O3 -f elf -D __GCC2 -D __OBJ_ELF -g -w-orphan-labels $(NASM_INCLUDES)
-F dwarf のオプションを削除して 回避します
で make コマンドでビルド続行

またまたエラーが出ました
mkdir -p gens_core/gfx/ gens_core/io/ gens_core/mem/ gens_core/misc/ ;
mkdir -p gens_core/sound/ gens_core/cpu/sh2/ gens_core/vdp/ gens_core/cpu/z80/ ;
/usr/local/bin/nasm -O3 -f elf -D __GCC2 -D __OBJ_ELF -g -w-orphan-labels -I./gens_core/ -I./gens_core/io/ -I./gens_core/misc/ -I./gens_core/vdp/ -I./gens_core/sound/ -I./gens_core/gfx/ -I./gens_core/cpu/sh2/ -I./gens_core/cpu/z80/ -I./gens_core/mem/ plugins/render/hq2x/mdp_render_hq2x_16_x86.asm -o plugins/render/hq2x/mdp_render_hq2x_16_x86.o
plugins/render/hq2x/mdp_render_hq2x_16_x86.asm:2066: error: phase error detected at end of assembly.
make[3]: *** [plugins/render/hq2x/mdp_render_hq2x_16_x86.o] エラー 1
make[3]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src/gens'
make[2]: *** [all-recursive] エラー 1
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make: *** [all] エラー 2
「phase error」!… あまり見かけない類のエラーです… しかも NASMでのエラー
インターネットで検索すると エラーの理由と対処方法が書かれてました

「NASMのバグにより -O2 -O3 などのオプティマイズに失敗し jmp系のジャンプ命令の距離計算を間違える」
-O1 や -O999 にすると改善される

-O999 というのも意味不明なので -O1 に書き換えてみます
src/gens/Makefile のやはり先程と同じ NASMの定義行を 今度は次のように書き換えます
  NASM = /usr/local/bin/nasm -O1 -f elf -D __GCC2 -D __OBJ_ELF -g -w-orphan-labels $(NASM_INCLUDES)
-O3 だったところを -O1 に書き換えて再度 make します
〜
Making all in pixmaps
make[2]: Entering directory `/home/admin/gens-2.15.5-gs-m6/pixmaps'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/pixmaps'
Making all in xdg
make[2]: Entering directory `/home/admin/gens-2.15.5-gs-m6/xdg'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6/xdg'
make[2]: Entering directory `/home/admin/gens-2.15.5-gs-m6'
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make[1]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
$ su
# make install
/bin/sh ./git_version.sh -k -s . -o git_version.h
git_version.sh: Not a git repo, keeping existing git_version.h
make  install-recursive
make[1]: Entering directory `/home/gens-2.15.5-gs-m6'
Making install in src
〜
make[2]: Entering directory `/home/admin/gens-2.15.5-gs-m6'
make[3]: Entering directory `/home/admin/gens-2.15.5-gs-m6'
make[3]: `install-exec-am' に対して行うべき事はありません。
make[3]: `install-data-am' に対して行うべき事はありません。
make[3]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make[2]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
make[1]: Leaving directory `/home/admin/gens-2.15.5-gs-m6'
うまくコンパイルが通りました
インストールされるファイルは /usr/local/bin/gens 本体と
/usr/local/share/applications/gens.desktop
/usr/local/share/gens/ 配下にアイコンファイルがいくつかです

Gens を使ってみる

使用感をレポートします

Gens画面 ROM

GUIはこんな感じです Windows版に準拠しています
画面は ハードドライビン です
メガドライブ版はポリゴン黎明期ゲームに過ぎませんが
アーケード版は 4段変速ギア クラッチ エンジンキー まで搭載した筐体で
まさしく ドライブシミュレータのようなリアルさが心を打ちます

Gens画面 ファイルメニュー

BootCD の項目があるとおり MEGA-CDが使えるようです
またステートセーブもできそうです
画面は カダッシュです アーケード版ではパスワードシステムが斬新でした

Gens画面 グラフィック

Linux版ということで OpenGLの項目があります
検証環境は十分高速な環境なので OpenGLを使う体感速度の差異は感じられません (むしろ遅くなった?)
画面は アドバンスド大戦略です 名作です
昔プレイしたときは シナリオが進むにつれ資金難となっていき ついには頓挫しました コツがあるのかな

Gens画面 CPU

CPU選択も Windows版に準拠しています
メニュー下にある SegaCD Perfect Sync をチェックしないと MEGA-CDがうまく動きませんでした
画面は スーパーハイドライドです
パソコンのハイドライド3をベースにして グラフィック や サウンド をパワーアップしています
アイテムに重さの概念があるため 敵を倒して小金を稼いでいるとそのうち動きが鈍くなります

Gens画面 サウンド

個別のチャンネル毎に ON/OFF できるようです
検証環境では MEGA-CDの CD演奏が鳴りませんでした
画面は クラック版?ソニック ! 誰かが作ったのでしょうか よくできてます

Gens画面 ジョイスティック

オプション項目です ジョイスティックも使えました キー配置も定義できます
画面は ダイナマイトヘッディー メガドライブ後期のアクションゲームです 名作です
伸びる首を使って 敵を倒したり 移動したりします

Gens画面 ディレクトリ

オプション項目です スクリーンショットや セーブデータの保存先を指定できます
デフォルトは ホームディレクトリにできる .gens ディレクトリが指定されます
画面は ワイアラエの奇蹟 当時 T&Eがリアルな 3Dゴルフシミュレーションを製作していました
ワイアラエの奇蹟 は 遥かなるオーガスタ ぺブルビーチの波涛 に続く 3作目です

Gens画面 BIOS

オプション項目です Windows版もそうですが MEGA-CD と 32X をプレイするには
BIOSのファイルが別途必要です
画面は 32X版 メタルヘッド 32Xらしくポリゴンが強化された 3Dロボットシューティングです
検証環境では 32Xのソフトは速度の関係からか サウンドがプツプツ切れます

Gens画面 MEGA-CD

MEGA-CDの動作検証もしました
前述したとおり SegaCD Perfect Sync を指定しないと ゲームが起動しませんでした
また CD音源が音が聞こえませんでした
画面は ソル・フィース 当時の グラディウスIII を対抗して作ったらしいシューティングゲームです
プログラム技術の高さと 自機の上下に付く可変アームが特徴的です

firefoxインストール

Build Documentation にて提供されている
  1. Windowsバイナリ
  2. UNIXバイナリ
  3. ソースコード
ですが ソースコードのコンパイルにチャレンジしてみます
手元の現時点(Firefox3)での環境
OS Linux 2.6.24 i686-linux-gnu
アセンブラ binutils-2.17
Cライブラリ glibc-2.5
コンパイラ gcc-4.1.2
GTK gtk-1.2.10 + gtk-2.10.0
GDK gdk-1.2.10 + gdk-2.10.8
Cairo cairo-1.4.2 描画ライブラリ –enable-glitz
Pango 1.6.0 描画ライブラリ
ウィンドウシステム xorg-server-X11R7.1-1.1.0
フォント fontconfig-2.4.2 libXft-X11R7.0-2.1.8.2 freetype-2.2.1
日本語入力 Uim-1.5.1 + Anthy-8300
前回(Firefox2)の環境
OS Linux 2.6.19.1 i686-linux-gnu
アセンブラ binutils-2.17
Cライブラリ glibc-2.5
コンパイラ gcc-4.1.1
GTK gtk-1.2.10 + gtk-2.10.0
GDK gdk-1.2.10 + gdk-2.10.8
Cairo cairo-1.2.6 描画ライブラリ –enable-glitz
Pango 1.15.4 描画ライブラリ
ウィンドウシステム xorg-server-X11R7.1-1.1.0
フォント fontconfig-2.4.2 libXft-X11R7.0-2.1.8.2 freetype-2.2.1
日本語入力 Uim-1.4.0 + Anthy-8300
FTPサイトでは 以下のようにサブプロジェクト毎に配置されてます

ftp://ftp.mozilla.org FTPサイト内容

firefox や thunderbird も含めてサブプロジェクトとしてツリーに含まれてます メールやWebブラウザも含めて mozillaプロジェクトとまとまっている感じです
サブプロジェクトの概要(知りうる限り)
firefox Webブラウザ
thunderbird メーラー
calender スケジューラ Sunbird と Lightning の 2種類があるようだ
seamonkey firefoxの機能拡張 コンテンツプレビューや IRCクライアントツール セキュリティ向上ツール Composer(HTMLエディッタ)
xulrunner Geckoエンジンのランタイムライブラリ libXUL これを使えば Gecko利用の独自ブラウザ/メーラーが作れそう

基本的な流れ

  1. サブプロジェクト/release/source/ソースコード.tar.bz2 をダウンロード
  2. ソースコードを展開 mozilla/ 配下に展開される
  3. .mozconfig をサブプロジェクトビルド用に設定
  4. ビルド開始 make -f client.mk build により .mozconfigが読み込まれ目的のサブプロジェクトがビルドされます
  5. インストール su ; make -f client.mk install

  • ソースコード入手の別手段としてCVSでダウンロードもできるようです
  • .mozconfig は先頭の .(ピリオド) を忘れないようにします
  • インストール時に DESTDIRでルートディレクトリを指定できます 例 DESTDIR=/opt make -f client.mk install とすれば /opt/usr/local/ 配下にインストールされます

という流れで firefox thunderbird などこれでいけます
.mozconfigはビルドしたいサブプロジェクトごとに(ビルドディレクトリを変えながら)書き換える必要があるのが面倒です

firefox

・firefox-3.0-source.tar.bz2 をダウンロードして展開します mozilla/ 以下にファイルが展開されます

$ cd
$ tar -xjf ~/firefox-3.0-source.tar.bz2
$ cd mozilla
$ vi .mozconfig
 

・ビルドには スタティックビルド(–disable-shared, –enable-static) を指定 (ただし 3.0では –enable-staticが弾かれた)
・描画バックエンドに cairoを利用するため ad_add_options –enable-default-toolkit=cairo-xlib を追加

. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=/home/admin/mozilla_firefox
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-shared
#ac_add_options --enable-static
ac_add_options --disable-tests
ad_add_options --enable-default-toolkit=cairo-xlib
mk_add_options MOZ_CO_PROJECT=browser
 

・ビルド&インストール

$ make -f client.mk build
$ su
# make -f client.mk install
 

・日本語環境をインストールします
・ロケール設定拡張を firefoxに適用する必要があります
switch-locales-*.xpi をダウンロードしてブラウザから開きます

・日本語パックを firefoxに適用する必要があります
firefox-*.ja.langpack-*.xpi をダウンロードしてブラウザから開きます

firefox

3.0を起動したとき 見慣れないエラーが

$ firefox
Error: in (function call): procedure or syntax required but got: Error: fatal: looped fatal error
 

これは UIMのバージョンが古いと発生するらしい
SCIMの利用か UIM-1.4.2以上 で解決します

xulrunner

・xulrunner-1.8.0.4-source.tar.bz2 をダウンロードして展開します mozilla/ 以下にファイルが展開されます

$ cd
$ tar -xjf ~/xulrunner-1.8.0.4-source.tar.bz2
$ cd mozilla
$ vi .mozconfig
 

・ビルドには ダイナミックリンク(–enable-shared, –disable-static) を指定
・Java環境も必要なので あらかじめインストールしておきます

. $topsrcdir/xulrunner/config/mozconfig
mk_add_options MOZ_OBJDIR=/home/自分のアカウント/mozilla_xulrunner
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-static
ac_add_options --enable-shared
mk_add_options MOZ_CO_PROJECT=xulrunner
 

・ビルド&インストール

$ make -f client.mk build
$ su
# make -f client.mk install
 

・これどーやって使うのだろうか… 不要ならインストールしなくてもよさそう

seamonkey

・Java環境も必要なので あらかじめインストールしておきましょう
・seamonkey-1.1b.source.tar.bz2 をダウンロードして展開します mozilla/ 以下にファイルが展開されます

$ cd
$ tar -xjf ~/seamonkey-1.1b.source.tar.bz2
$ cd mozilla
$ vi .mozconfig
 

・ビルドには ダイナミックリンク(–enable-shared, –disable-static) を指定

mk_add_options MOZ_OBJDIR=/home/自分のアカウント/mozilla_seamonkey
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --enable-application=suite
mk_add_options MOZ_CO_PROJECT=suite
 

・ビルド&インストール

$ make -f client.mk build
$ su
# make -f client.mk install
 

・日本語化もできるようです 手元の環境では実施してませんが
・使い勝手は 付加機能(debugメニュー)の付いた firefox みたいな感じです

thunderbird

・thunderbird-2.0b2-source.tar.bz2 をダウンロードして展開します mozilla/ 以下にファイルが展開されます

$ cd
$ tar -xjf ~/thunderbird-2.0b2-source.tar.bz2
$ cd mozilla
$ vi .mozconfig
 

・ビルドは firefoxと同じく スタティックリンク方式にしました

. /home/deer/admin/mozilla/mail/config/mozconfig
mk_add_options MOZ_OBJDIR=/home/deer/admin/mozilla_thunderbird
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-shared
ac_add_options --enable-static
mk_add_options MOZ_CO_PROJECT=mail
 

・ビルド&インストール

$ make -f client.mk build
$ su
# make -f client.mk install
 

・日本語環境をインストールします
・日本語パックを thunderbirdに適用する必要があります
thunderbird-*.ja.langpack-*.xpi をダウンロードしてブラウザから開きます

thunderbird拡張設定
・firefoxと異なり 言語設定拡張を入れなくても thunderbirdのメニュー設定から手動で設定できます
thunderbirdロケール設定

xforwardの使いかた

xforwardの使いかたを紹介します

xforwardは 単純に Xのプロトコルをリモートホストへ転送します

host1(アプリケーション) host2(xforward) host3(Xサーバ)

host1上で実行中のアプリケーションを host3へX転送したい場合
host1と host3が直接ネットワークで接続されていなければ
host2のようなゲートウェイ端末に転送してもらう必要があるかもしれません
  • host3 で Xサーバ(Xorgや Xmingなど)が起動されていること
  • host2 で xforwardが実行中であること
  • host1 にて host2にGUI転送する指定でアプリケーションを起動
もちろん host3は host2からの X転送を許可している必要ありますし
host2は host1からの X転送を許可している必要があります

 host1$ xfontsel -display host2:0

 host2$ xforward -display host3:0

転送されたアプリケーション

転送された xfontsel

ネットワーク的に遠距離のホストに対しても Xを飛ばすことができます
xforward自体は Xのおまけツールとして配布されています
RING の archives/X/opengroup/contrib/applications/ 配下から取得できます

Wine導入メモ

Wineとは

Wineとは WINdows Emulator もしくは Wine Is Not an Emulator の略です
UNIX環境にて Windowsのプログラムを動作させるためのライブラリと実行環境です
下記の図は Wineの動作環境 と通常のUNIXの動作環境の概念を表しています

UNIX実行環境構成vsWine実行環境構成

ピンク色のエリアが 通常の UNIXバイナリの実行環境です
通常は UNIX用のライブラリ(〜.so)がリンクされて実行されます
対して Wineを導入した場合 図の橙のエリアがインストールされることになります
Windowsバイナリ(〜.exe)に対しては Windowsライブラリ(〜.dll)の呼び出しを
Wineが介入して エミュレーションライブラリを呼び出し UNIXの環境でエミュレーションします

Wineの利点

Wineは VMware や VirtualPC のように全ハードウェアをエミュレートする方式とことなり
Windowsライブラリの呼び出し部分のみをフックし UNIX動作に解釈します
そのため基本的に Windowsバイナリは Windowsと同じ速度で動作します
ただし GUIのグラフィックの部分は Xの環境のものに書き換えられるので
若干レイアウト部分が変わってしまします
Windows9x系が特にサポート終了となった今 (1)Windows Vistaに移行する (2)Wineのような互換環境に移行する (3)あきらめて新しいソフトに飛びつく の選択肢がありますが
特に (3)を選択できない状況では Wineのようなプロジェクトがありがたく感じられます

Wineインストール

検証環境
CPU メモリ Turion64 MT-37 1GB
OS Linux kernel 2.6.19
X Xorg 7.1-1.1.0
glibc 2.5
GCC 4.1.2
Wine 0.9.51
Windowsの環境 Windows98SE /dev/discs/disc0/part1
Wineのインストールのために FontForgeのインストールが必要でした ここでは FontForgeがインストール済として話を進めます
Wineのページから最新のソース wine-〜.tar.bz2 を取得してビルドします
$ tar -xjf wine-0.9.51.tar.bz2
$ wine-0.9.51
$ configure --prefix=/opt
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
〜
config.status: executing dlls/kernel32/nls commands
config.status: executing dlls/user32/resources commands
config.status: executing dlls/wineps.drv/data commands
config.status: executing include/wine commands

Configure finished.  Do 'make depend && make' to compile Wine.

$ make depend
make[1]: Entering directory `/home/admin/wine-0.9.51/tools'
gcc -c -I. -I. -I../include -I../include -I/usr/local/include/freetype2 -I/usr/local/include   -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith  -g -O2  -o makedep.o makedep.c
gcc -g -O2 -o makedep makedep.o 
〜
make[2]: Leaving directory `/home/admin/wine-0.9.51/tools/wrc'
../tools/makedep -C. -S.. -T.. -I/usr/local/include/freetype2 -I/usr/local/include fnt2bdf.c fnt2fon.c make_ctests.c makedep.c relpath.c sfnt2fnt.c                 
make[1]: Leaving directory `/home/admin/wine-0.9.51/tools'
./tools/makedep -C. -S. -T.                  

$ make
make[1]: Entering directory `/home/admin/wine-0.9.51/tools'
make[1]: `makedep' は更新済みです
〜
make[1]: Leaving directory `/home/admin/wine-0.9.51/server'
Wine build complete.
$ su
# make install
make[1]: Entering directory `/home/admin/wine-0.9.51/tools'
make[1]: `makedep' は更新済みです
〜
/bin/install -c  -m 644  winemaker.man /opt/share/man/man1/winemaker.1
make[1]: Leaving directory `/home/admin/wine-0.9.51/tools'
# exit
$

インストール時のトラブル

実際には 検証の環境では 下記のエラーが出てしまったのでソースコードに若干の修正を行いました
gcc -c -I. -I. -I../../include -I../../include  -D__WINESRC__  -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith  -g -O2  -o ipstats.o ipstats.c
ipstats.c: In function 'getRouteTable':
ipstats.c:942: error: 'RTF_UP' undeclared (first use in this function)
ipstats.c:942: error: (Each undeclared identifier is reported only once
ipstats.c:942: error: for each function it appears in.)
ipstats.c:945: error: 'RTF_GATEWAY' undeclared (first use in this function)
make[2]: *** [ipstats.o] エラー 1
make[2]: Leaving directory `/home/admin/wine-0.9.51/dlls/iphlpapi'
make[1]: *** [iphlpapi] エラー 2
make[1]: Leaving directory `/home/admin/wine-0.9.51/dlls'
make: *** [dlls] エラー 2
原因は kernel2.6 の linux/rotue.h で定義されているマクロ #define RTF_〜 がうまく取り込めてないようです
修正したのは dlls/iphlpapi/ipstats.c です linux/route.h の #include行の下あたりに linux/route.h の #define RTF_〜 の定義をコピーします (下記の 87〜97行目が追加分)
     81 #include "windef.h"
     82 #include "winbase.h"
     83 #include "iprtrmib.h"
     84 #include "ifenum.h"
     85 #include "ipstats.h"
     86 
     87 #define RTF_UP          0x0001          /* route usable                 */
     88 #define RTF_GATEWAY     0x0002          /* destination is a gateway     */
     89 #define RTF_HOST        0x0004          /* host entry (net otherwise)   */
     90 #define RTF_REINSTATE   0x0008          /* reinstate route after tmout  */
     91 #define RTF_DYNAMIC     0x0010          /* created dyn. (by redirect)   */
     92 #define RTF_MODIFIED    0x0020          /* modified dyn. (by redirect)  */
     93 #define RTF_MTU         0x0040          /* specific MTU for this route  */
     94 #define RTF_MSS         RTF_MTU         /* Compatibility :-(            */
     95 #define RTF_WINDOW      0x0080          /* per route window clamping    */
     96 #define RTF_IRTT        0x0100          /* Initial round trip time      */
     97 #define RTF_REJECT      0x0200          /* Reject route                 */
     98 
     99 #ifndef HAVE_NETINET_TCP_FSM_H
    100 #define TCPS_ESTABLISHED  1

設定

Wine自身の設定は 最近のバージョンのものでは GUIで設定できます
$ winecfg

Wine設定画面1

Wine-0.9では Vistaの動作サポートもされつつあるようですが Windows95 を選択しました

Wine設定画面2

CD-ROMを読み込ませられるように D: ドライブを /mnt/cdrom に割り当てました ただしデバイスファイル /dev/〜 が指定できないため CDオーディオが鳴らないかもしれません

ROXデスクトップ環境 をインストールしている場合は デスクトップパスが (ROXインストールパス)/share/desktop-directories/ に向けられてしまうようです 一般ユーザ権限で wineを実行する場合は XDG_DATA_HOME の設定に気を付ける必要あります

インストール確認

インストールが成功したら 実際にWindowsの環境からバイナリを実行してみます Windowsのパーティションを以下のようにマウントして
$ su
# mount -t vfat -o ro,dmask=0222,iocharset=euc-jp /dev/discs/disc0/part1 /mnt
# exit
Wineを実行します
$ wine /mnt/windows/notepad.exe

notepad実行

まず メモ帳 から実行
Windowsのタイトルバー「無題 – メモ帳」はそのまま Xのタイトルバーに反映されています
あとメニューについても ばっちり日本語表示されています
ただし 日本語入力がうまくいかなかったので フォント周りなどの設定の確認が必要そうです

$ wine /mnt/windows/sndrec32.exe

サウンドレコーダ実行1
サウンドレコーダ実行2

次に サウンドレコーダ を実行
起動時に 警告ダイアログが出ましたが設定の問題なのでとりあえず無視します
メインのウィンドウは フォントサイズの問題か メニューが2段に折れているのでレイアウトが崩れてます
驚くことに .wav のサウンドが再生されました
また 保存の画面で変換可能なフォーマットに MP3 を含めいくつかの選択肢があるようです
(Wine提供のライブラリなのか サウンドレコーダにもともと備わっているのか不明)
ただし 「保存」を実施しても「変換を完了できません」とエラーが出ました

$ wine /mnt/windows/explorer.exe
〜
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
 EIP:b7f89410 ESP:0034e81c EBP:0034e838 EFLAGS:00000206(   - 00      - -IP1)
 EAX:00000000 EBX:0000668d ECX:0000668d EDX:00000006
 ESI:0000668d EDI:b7e39ff4
Stack dump:
0x0034e81c:  0034e838 00000006 0000668d b7d3980b
0x0034e82c:  b7e39ff4 0034e8d8 b7d0c6c0 0034e964
0x0034e83c:  b7d3b1d8 00000006 0034e8d8 00000000
0x0034e84c:  0034e87c b7d78877 b7e3b120 7c0256a0
0x0034e85c:  00000053 7c025698 00000068 7c0256a0
0x0034e86c:  7ec6a33a b7e39ff4 00000052 00000053
Backtrace:
=>1 0xb7f89410 (0x0034e838)
fixme:dbghelp_dwarf:compute_location Unhandled attr op: e0
37: dwarf.c:1314: dwarf2_parse_variable: Assertion `subpgm->func' が失敗しました.
wine: Assertion failed at address 0xb7f03410 (thread 0154), starting debugger...
エクスプローラの実行は 見事に失敗しました

$ wine /mnt/windows/progman.exe

プログラムマネージャ実行

16bit版 Windowsでは定番だった プログラムマネージャは起動しました
パスの違いのためアイコンは参照できませんが ランチャーにプログラム登録はいけそうです

$ wine /mnt/windows/regedit.exe

レジストリエディッタ実行

レジストリエディッタ は動作するようです
リストを見て分かる通り レジストリデータベースは Wine独自のものを使ってます

$ wine /mnt/windows/telnet.exe

telnet実行

telnetツールを確認しました
素晴らしいことにリモートホストへちゃんとログインできます
Windowsのソケットライブラリである winsock.dll もちゃんとエミュレートされてます

他にもいろいろ実験

Susie実行

Windowsで画像ビューワとして有名な Susie も動作しました
Susieはローカルの dllをプラグインとして読み込むのでその動作の確認と
あとスライドショウは フルスクリーンモードになるのでその確認ができました

TeraPad実行

フリーのテキストエディッタとして有名な TeraPadです
プラグインはフルパスで設定されているので Wineが認識できるパス
つまり ~/.wine/drive_c/ 以下に置く必要があります
図の場合では ~/.wine/drive_c/prog/tool/terapad/ 配下にプラグインだけでもコピーする必要があります

Firefox実行

HTMLブラウザの Firefoxです
まずフォントが独自のものを使うため文字化けしています
また設定ファイルも C:ドライブのプロファイル位置に配置されるため設定が初期化されて見えます
通信部分については Mozillaのトップページが見えているので問題ありません

WinRAR実行

WinRAR(評価版) です
こちらも WinRAR.exe と同じディレクトリに 必要なDLLがあるため普通に動作しました
ちなみに Wineでは Z:ドライブが / へのシンボリックリンクとなっているためこの表示です

レミングスレボリューション実行

CD-ROMゲーム(CD-DAなし)の検証です
wine ‘d:\setup’ により見事に起動してインストールできました
DirectX(3Dアクセラレーション付) のゲームも動作することと
フルスクリーンモードの切り替えが確認できました
実Windows環境 ではなぜか起動すらしなかったため 実Windowsよりも稼働率が高い? です
ゲーム自体も 実Windows環境と同等の軽快さで動作するのですが
キャラクタの一部が見えなかったり マウスの右方向ドラッグが効かなかったり
あともう一歩というところです

aviutl実行

aviutlで動画エンコードの実験です ffdshowによる 動画コーデック 音声コーデック を適用した画面です
いちおう DivXの .aviは開けるようです
レジストリの登録に失敗するので ~/.wine/user.reg を手動で修正して
[Software\\VFPlugin] のセクションにキーを追加します

[Software\\VFPlugin] 1200179121
"AviUtl"="C:\\Program Files\\aviutl\\aviutl.vfp"
"DVD2AVI"="C:\\Program Files\\dvd2avi\\DVD2AVI.vfp"

ただしこれでも aviutl上で DVD2AVIで作ったプロジェクトが開けませんでした

X1Millenium実行

以降は Windows用のエミュレータを動かしてみる実験です
特に Linuxでは対応していない機種のエミュレータが Wine上で動けばメリットは大きいです
写真は X1 Millenium + T-tune + ikaTuneという X1/turbo/Z エミュレータです
Wineの恩恵を受けて見事起動〜動作しました ゲームは 電波新聞社のソフィアの画面です

XM7実行

次は XM7 という FM7/77/AV エミュレータです
ゲームは イース2 FM音源もばっちり鳴ります
ただし システムメニューの GUIが異常に重いです

Handy実行

Handy という Atari Lynx エミュレータです
ゲームボーイに対抗して作られた携帯ゲーム機です ゲームは アルゴスの戦士 です
こちらも問題なく動作しました ちなみに Handy 公式ページはなくなってます どこに行ったんでしょう?

WinSMC実行

WinSMC という Sony SMC-777 エミュレータです
ゲームは イース2 FM音源もばっちり鳴ります ただし システムメニューの GUIが異常に重いです

mz700win実行

mz700win という SHARP MZ-700 エミュレータです
アプリケーションは起動しましたが ロムファイルが読み込めず ゲームの動作まで確認できませんでした
手元の検証環境で mz700winの設定を何か間違えているのだと思います

mz700win実行

PC6001V for Win32 という NEC PC-6x01 エミュレータです
これもばっちり動作しました ゲーム画面は 名作パズルゲーム フラッピー です

M88実行

M88 という NEC PC-8x01 エミュレータです
よくできたエミュレータです 写真は BASICプログラムの VARK という BASIC MAGAZINE投稿作品
(を打ち込んだもの)です 動作自体は問題ないですが なぜかキーボードが英語配列になっています

Anex86実行
Anex86設定

Anex86 という Epson互換機 (NEC PC-9801互換) エミュレータです
Wine上での動作はキーボードをうまく認識させるのに設定をいろいろいじる必要がありました
ゲームは 三国志2 です 画面をみて分かるとおり少しフォントが崩れています

T98-Next実行

T98-Next という NEC PC98x1 エミュレータです
こちらはフォントもきれいに再現されています ゲームは同じく 三国志2 です
エミュレータとしても Windows上と同等の動作が行われています

EX68実行

EX68 という SHARP X68000 エミュレータです
さすがにこのクラスとなると 純正Windows程の速度は出ません処理おちしてしまいます
ゲームは同人界では有名な T-ドラゴンクエスト(同人版ドラゴンクエスト) です

うんづ実行

うんづ という 富士通 FM-Towns エミュレータです
エミュレータ自体は動きそうなんですが ASPIの部分でうまく動いてないようです
つまり CD-ROMのデバイスがうまくキャプチャできないようです

ダンジョンマスター実行

Windowsゲームとして配布されていた ダンジョンマスターの画面です
特に問題なく動作しました

その他ゲームについて
DirectX のゲームも結構動作するようですが スクリーンショットがとれませんでした
(動作したゲーム)

  • エターナルファイターZERO
  • スーパー魔女っ娘大戦W
  • テネレッツアベンチマーク
  • ダンジョンクルセーダー評価版
  • ルナティックドーン 開かれた前途 (メニューを選択するとたまに異常終了する)
  • EVE burst Error (ムービーも動作しました たまに音声が曇ってしまいます)
  • エンジェリックコンサート (アドベンチャーモードは動作 演奏モードに不具合あって進まない)
  • Quake3 Arena (CDの quake3.exe から実行する必要がある)
  • マジカルアンティーク (ただしゲーム途中で 内部エラー が発生して終了)
  • Piaキャロットへようこそ3 (ただし ゲームの冒頭で「hitret待ち」のダイアログが多発して進めない)

(動作しないゲーム)

  • A列車で行こう THE 21ST CENTURY 豪華限定版 (ゲーム開始時に異常終了)
  • 新世紀エヴァンゲリオン 鋼鉄のガールフレンド (インストール後 起動するときにファイルがないとエラー)
  • Might & Magic Millenium (インストーラが起動するが インストールがうまく動作しない)
  • エーベルージュ (256色モードでないと起動しないとダイアログが出る)
  • ダンジョンキーパー (メーカーロゴが表示されたあと先に進まない)
  • Kings Quest Mask of Eternity (インストールできたが ゲーム開始時異常終了する)
  • GEO-theSwordMillennia- 偽りの神話編 (例外エラーが出て開始しない)
  • SERIOUS SUM 2 (インストーラ iKernel.exe がエラーで立ち上がらない)
  • アークス・ファタリス (インストーラ iKernel.exe がエラーで立ち上がらない)
  • ハイドライド (インストーラは起動するが インストール場所の選択画面が表示されず進まない)
  • ハイドライド3 GOLD (インストーラが起動しない)
  • 三国志8 (インストーラが起動しない)
  • 三国志11 (インストール途中 GAMEディスクの入れ替えの時にディスクを認識しない)
  • トゥームレイダー2 GOLDEN MASK (インストーラが立ち上がらない)
  • トゥームレイダー4 ラストレベレーション (インストールできたが ゲーム開始時異常終了する)
  • トゥームレイダー5 クロニクル (インストールできたが ゲーム開始時異常終了する)
  • 夢幻戦士ヴァリス COMPLETE (インストーラが起動しない)
  • コーハン 不滅の王国 (インストーラは起動するがインストールが始まらない)
  • 先攻遊撃桜花隊 YURI (タイトルムービーまで再生されるが タイトル画面にすすまず終了)
  • 不確定世界の探偵紳士 HARDCORE (インストール完了しタイトルムービーまで出るが 動詞カーソルの初期化に失敗と出て終了)
  • 3x3EYES〜転輪王幻夢〜 (インストーラが起動しない)
  • ファイナルファンタジー8 (インストール後起動時 eax.dll がないとエラーが出た)
  • MELTY BLOOD ActCadenza Version B (インストール後 起動しようとしたときに DVD-ROMのチェックが入り終了)
  • Zwei! (インストールは完了するが 起動時に「スクリプトが読み込めない」と言われる)
  • ガールドールトイ (インストールは完了するが 起動時に未実装APIが呼び出され終了)
  • 零式 (CD-ROMの日本語ディレクトリがLinuxで認識できずインストール失敗)
  • ビキニカラテ (インストール時に インストールエンジン起動に失敗した と表示される)
  • イース1&2 (インストールできたが ゲーム開始時のCDチェックが通らない)
  • イース6 ナピュシステムの匣 (インストール時に異常終了した)
  • 17歳〜マイディアエンジェル〜 (ゲームは起動したがフォントが化ける上に途中で異常終了
  • )

  • ずっといっしょ (オープニングムービーまでOK ゲーム開始時に真っ暗になる)
  • 超時空要塞マクロスVOXP (インストーラが起動しない)

ちょくちょく確認してみます