
         QUASI88 のコンパイル方法 for UNIX / Mac OS X

-------------------------------------------------------------------------------

●ここでは、QUASI88 を UNIX にてコンパイルする方法を説明します。
  Mac OS X の場合も、こちらのドキュメントを参考にしてください。

  ( 但し、 Mac OS X でコンパイルできるかどうかは未検証です。ご了承ください )


1. Makefile をお手持ちの環境にあわせて変更します。

   コメントアウトする場合は、行頭に # を付けます。
   コメントアウトしない(コメントインする)場合は、行頭の # を取ります。

   以下に主な変更点を挙げます。ここに挙げていないものや意味が理解
   できないものは、とりあえず変更しないことをお勧めします。
   ( デバッグ用の機能もいくつか含まれていますので・・・ )


    [1] X11版を作成するか、SDL版を作成するかを選択します

        X11_VERSION = 1
        # SDL_VERSION   = 1
        # GTK_VERSION   = 1

      どれか一つだけ、コメントインしてください。

      SDL版を作成する場合、SDLがインストールされている必要があります。
    2013/01/01現在、SDLのバージョンは 1.2.15 です。詳細は、SDLの
    ウェブサイト http://www.libsdl.org/ を参照ください。

      GTK版を作成する場合、GTK+1.2がインストールされている必要があります。
    GTK版でサウンドを出力する場合は、さらにSDLがインストールされている
    必要があります。
    GTK版は、まだ実験段階です。一部機能に制限があり、動作もやや不安定です。


    [2] ROM用ディレクトリを設定します

        ROMDIR  = ~/quasi88/rom/

      起動時に ROMイメージファイルを読み込むディレクトリです。
    環境変数 QUASI88_ROM_DIR 、あるいは起動時のオプション -romdir 、の
    いずれもが未設定の場合に、このディレクトリから読み込まれます。
    なお、~/ は、QUASI88の起動時に環境変数 $HOME (ホームディレクトリ) に
    展開されます。


    [3] DISK用ディレクトリを設定します

        DISKDIR = ~/quasi88/disk/

      起動時に ディスクイメージファイルを指定した場合に、そのファイルを
    読み込むディレクトリです。環境変数 QUASI88_DISK_DIR 、あるいは
    起動時のオプション -diskdir 、のいずれもが未設定の場合に、この
    ディレクトリから読み込まれます。


    [4] TAPE用ディレクトリを設定します

        TAPEDIR = ~/quasi88/tape/

      環境変数 QUASI88_TAPE_DIR 、あるいは起動時のオプション -tapedir 、の
    いずれもが未設定の場合に、このディレクトリが、テープイメージファイル
    用のディレクトリとなります。


    [5] エンディアンネスの設定 (X11版のみ)

        X11_LSB_FIRST   = 1

      ビッグエンディアンのマシンの場合、この行をコメントアウトして下さい。


    [6] MIT-SHM 機能を使用するかどうかの設定 (X11版のみ)

        X11_MITSHM  = 1

      MIT-SHM が使用できない場合、この行をコメントアウトして下さい。


    [7] long long 型を使用するかどうかの設定 (X11版のみ)

        X11_HAVE_LONG_LONG = 1

      long long 型が使用できない場合、この行をコメントアウトして
    ください。(大抵のコンパイラでは使用できると思います)


    [8] gettimeofday 関数を使用するかどうかの設定 (X11版のみ)

        X11_HAVE_GETTIMEOFDAY = 1

      gettimeofday 関数が使用できない場合、この行をコメントアウトして
    ください。(大抵の UNIX では使用できると思います)


    [9] ジョイスティックを使用するかどうかの設定 (X11版のみ)

        X11_JOYSTICK    = joy_nothing
        # X11_JOYSTICK  = joy_sdl
        # X11_JOYSTICK  = joy_linux_usb
        # X11_JOYSTICK  = joy_bsd_usb

      いずれか一つを選択してください。
    make に失敗する場合は、「X11_JOYSTICK = joy_nothing」 (ジョイスティック
    未対応)を選択してください。


    [10] スクリーンスナップショットのセーブ時に、コマンド実行するかどうかの設定

        USE_SSS_CMD = 1

      スクリーンスナップショットを保存する際、予め指定した任意のコマンドを
    自動的に実行することができます。しかしこの行をコメントアウトした場合、
    この機能が削除されます。( スクリーンスナップショット自体は、使えます )


    [11] サウンド出力の有無の設定

        USE_SOUND   = 1

      コメントアウトすると、MAME/XMAME ベースのサウンド出力が組み込まれ
    ません。(つまり、音が鳴らなくなります)


    [12] OS の指定 (X11版のみ)

        ARCH = freebsd

      OS の種類を一つだけ選択します。OSによっては [11] の設定にかかわらず、
    サウンド出力がサポートされません。
    ( Mac OS X の場合は 「ARCH = macosx」を選択すればいいらしいです )
    ここに無い OS の場合は、「ARCH = generic」 を選択して下さい。


    [13] 追加のサウンドデバイスの指定 (X11版のみ)

        # SOUND_ESOUND = 1
        # SOUND_ALSA = 1
        # SOUND_ARTS_TEIRA = 1
        # SOUND_ARTS_SMOTEK = 1
        # SOUND_SDL= 1
        # SOUND_WAVEOUT = 1

      これらのサウンドデバイスが OS でサポートされているのであれば、
    その行のコメントアウトをはずすことで使用できるかもしれません。
    詳細については、作者はよくわかりません。m<..>m
    興味のある人は XMAME のドキュメントを読んでみましょう。
    なお、[11] でサウンド出力を有効にしておく必要があります。


    [14] fmgen の設定

        USE_FMGEN = 1

      コメントアウトすると、fmgen が組み込まれせん。
    なお、[11] でサウンド出力を有効にしておく必要があります。


    [15] コンパイル関連の設定

        CC  = gcc

      C コンパイラを指定します。

        CFLAGS = -O2

      コンパイルオプションを指定します。
    OS ないし コンパイラによっては、 -fsigned-char などの追加が必要です。

        USEINLINE   = '-DINLINE=static __inline__'

      インライン関数をサポートしていないコンパイラを使用している場合は、
    この行をコメントアウトして、「USEINLINE  = '-DINLINE=static'」の行を
    コメントインしてください。

        X11INC      = -I/usr/local/include
        X11LIB      = -L/usr/local/lib

      X11 関連のインクルードファイルやライブラリのディレクトリを
    指定します。指定が不要なら、コメントアウトしてください。

        CXX  = g++
        CXXFLAGS = $(CFLAGS)
        CXXLIBS  = -lstdc++

      C++ コンパイラの設定です。 この設定が必要なのは、[14] で fmgen を
    組み込むように指定した場合のみです。

        LD  = $(CC) -Wl,-s

      リンカの設定です。[14] で fmgen を組み込むように指定した場合は、
      「LD = $(CXX) -Wl,-s」を選択する必要があるかもしれません。


    [16] インストール先ディレクトリの設定

        BINDIR = /usr/local/bin

      出来上がったバイナリをインストールするディレクトリを指定します。



2. make します。

      make を実行します。make には、必ず GNU make が必要です。

        % make

    make が無事完了すると、 quasi88 、 quasi88.sdl 、あるいは quasi88.gtk
    という実行ファイルができます。

    なお、 gcc と perl がインストールされている環境の場合、
    「make」の前に、「make depend」を実行しておくと幸せになれるかも
    しれません。 ( 不幸な結果になっても知りませんよ ^^; )



3. インストール します。

        # make install

      上記 1. の [16] で指定したディレクトリにインストールされます。
    インストールには root 権限が必要な場合があります。
    なお、ドキュメント・マニュアル類は一切インストールされないので、
    必要ならば各自で好きな場所にコピーしてください。



注意事項)
    ・QUASI88 の改変・再配布などに関しては、もともとの QUASI88 の
    著作権・免責事項に加えて以下を守ってください。

        SDLライブラリを使用する場合、SDLのライセンスに従う必要があります。
        GTKライブラリを使用する場合、GTKのライセンスに従う必要があります。

        サウンド出力を有効にした場合、MAME/XMAMEのライセンスに従う必要が
        あります。

        fmgen を組み込んだ場合、fmgen のライセンスに従う必要があります。



    ・QUASI88では、高速化のために、いくつかの配列をイリーガルな
    ポインタ経由でアクセスしています。
    具体的には、
        unsigned char buf[100][4]; 
    という配列を、
        unsigned int *p = (unsigned int)buf;
    というふうなポインタでアクセスしています。
      つまり (unsigned)char = 8 bit、(unsigned)int = 32bit を前提にしている
    ので、これとは異なる環境下では正常に動作しないと思われます。m<..>m
    他にも、(unsigned)int = 32bit、(unsigned)long >= 32bit にきめうちして
    いる個所があったりしますので、 IPL64 な環境では動作しないはずです。

    ( 具体的な環境はといわれると、詳しくは知らないのですが・・・
      正常にコンパイルできない、動作しないという OS / コンパイラがあれば、
      教えてください。対応できるかどうかはわかりませんが… )
