各種OSでの午後のこ〜だの作り方 updated 2001/1/6 ◆ 概要 ここではTownsOS, Linux, FreeBSD, Windows-console/DLL, BeOS, OS/2 などの各種OS上での午後のこ〜だの作り方や注意点を説明します。 Solaris for x86でも作れたそうです。cygwinでも出来ます。 マルチスレッド版で動作報告があるのは現在Linux + libc6, WinNT/2000, BeOS, Solarisだけです。FreeBSDは4.0R+Linux emu上でなら動作 するかもしれません。 また、東海林さんによる `怪しい午後の過ごし方' (VC++で午後をbuildする) >http://isw.main.eng.hokudai.ac.jp/~tokai/new/comp/ayagogo.html もとさんによる `gccでgogo.dllを作る方法!' (Mingw32-gccで午後をmakeする) >http://homepage2.nifty.com/moto-h/junk/gogo_gcc.html なども参考にして下さい(お二人にこの場を借りて感謝します)。 ◆ 必要なもの NASM-0.98以降が必要です。各自入手してください。 >http://www.web-sites.co.uk/nasm/ MASM系アセンブラ(386asm, tasm, lasm等)では文法が違うためアセンブル 出来ません。また、UNIX系のgasでもアセンブル出来ません。 ◆ グローバルな定義 (1) ファイル名に日本語SJISを使う方は common.h に JAPANESE_SPC を 定義して下さい(デフォルト)。 pathの中に`\'を含む2byte文字の処理が追加されます。 多言語に対応するために分離させた german.msg をnkf等に通すと コンパイル出来なくなる可能性があります。改行コード以外は変更 しないで下さい。 japan.msg は内部で自動判別するので SJIS, EUCどちらでも大丈夫です。 (2) USE_E3DN=yesとするとAthlon用Enhanced 3D Now!命令を使います。 但し、NASMにパッチを当てる必要があります。(後述) あるいは http://homepage1.nifty.com/herumi/soft/3dnow18.lzh を取ってきて % lha x 3dnow18.lzh % gcc -DONLY_E3DN *.c % ./a.out mdct3dn.nas % mv -f mdct3dn.asm mdct3dn.nas の様にしてEnhanced 3D Now!命令のみを事前にアセンブルして下さい。 前処理が必要なソースは % grep -l pswapd *.nas です。 (3) USE_VBR=yesとするとVBRを使えるようになります。 使わなくてもoffにする必要はありません。 -v 7 -b 80 で -b 112 程度のファイルサイズです。 (4) RAW_INPUTを定義するとwavファイル以外のPCMデータ対応オプションが 使えるようになります。 使わなくてもoffにする必要はありません。 (5) Linux + libc6, BeOS, WindowsNT/2k, (Solarisも?)で USE_MT=yesとすると並列CPU対応になります。 古いFreeBSDやLinux libc5, Win 95/98では使えません。 (6) loop.c, musenc.c の先頭の方にある PEN** オプションは新設されたフィルタ 処理です。未定義にすれば今までのアルゴリズムに戻り処理が若干速くなります。 ◆ 各OSについて (1) Windows-console ソースの漢字コードをEUCからSJISに変更して下さい。変換が必要なファイルは *.{c,h}とjapanese.msgです。 Win2000上でbuildする場合は`地域'を英語にすれば無修正で出来ます。 VC++の場合、添加のgogo.dswをプロジェクトを選んでから [アクティプな構成の設定]で{console,DLL}-Releaseを選択してください。 他のCコンパイラでは *.nasに対して [コマンド] nasm -f win32 -DWIN32 $(InputName).nas [出力] $(InputName).obj に相当する設定をしてください。その後普通にビルドするだけです。 Cで定義されていると仮定するマクロはWIN32, _CONSOLEです。 VC++以外でのDLLの作り方はどなたかお願いします。 Borland C++を使うときは nasm -f obj -DWIN32 -D__BORLANDC__ *.nas として下さい。ASFLAGSを修正するだけで良いはずです。 cygwin-gccには専用のmakefile.cygwinを用意しました。 Watcom-C/C++ 10.5J, djgpp 2.x の場合 ( savaさんに感謝! ) TGT_ENV のうちどれかひとつを有効にして、コマンドライン上から wmake -f makefile.wc を実行。環境変数 WATCOM を正しく設定しておく必要がある。 現状での制限 マルチスレッド版は作成できない。 (Watcom-C/C++ 10.5J のライブラリが、gettimeofday をサポートしていないため。 11.0 については未確認) その他適当にmkfilesを参照して下さい(^^; (2) Linux, FreeBSD 3.x, FreeBSD 2.x, NetBSD コンパイラのバージョンによってCCのオプションを適宜修正して下さい。 USE_MT=yesでマルチプロセッサに対応しますが、OSの制限があります。 Cで定義されていると仮定するマクロは__unix__です。 FreeBSD 2.x系、NetBSD/i386でもmake出来るそうです。 CC に -D__unix__ を追加する(FreeBSDでは不要かも)。 ASFLAGS = -f aoutb -D__unix__ -DAOUT .nas.o: $(AS) $(ASFLAGS) $< -o $@ と変更する(原田さん情報ありがとうございます)。 またgogo.specを使って % rpm -ta --clean gogo235.tgz で RPM ファイルを作成できます。 (3) TownsOSの場合 makefile.tosをmakefileという名前でコピーしてから、 makefileの先頭のpathの設定を各自の環境に合うよう変えて下さい。 makeはLSI-C試食版のを想定しています。 MamiyaさんがPharLap簡易OMF-386objフォーマットに対応したEXP版を 作ってくださっています (http://www.proc.org.tohoku.ac.jp/befis/) そのNASMを使う時は-f objではなく-f pharlapとしてください。 Cで定義されていると仮定するマクロは__HIGHC__です。 一部High-Cを黙らすためにcast演算子を追加する必要があります。 (4) BeOS ソースのBeOSディレクトリの中のMakeGOGO.shをシェル上から実行してください。 実行ファイル`gogo'が出来ますのでシンボリックリンク`drop gogo here'に コピーしてください。 (5) OS/2 make -f makefile.os2 で多分いけると思います。多分SMP非対応です。Samuel Audet, savaさんに感謝。 (6) cygwin Windows上でLinuxライクにgccを使う方は make -f makefile.cygwin ◆ NASMをEnhanced 3D Now!命令に対応させる --- x8 --- x8 --- x8 --- この行は含まない --- x8 --- x8 --- x8 --- x8 --- x8 --- PI2FD mmxreg,mem \301\2\x0F\x0F\110\01\x0D PENT,3DNOW,SM PI2FD mmxreg,mmxreg \2\x0F\x0F\110\01\x0D PENT,3DNOW PFNACC mmxreg,mem \301\2\x0F\x0F\110\01\x8A PENT,3DNOW,SM PFNACC mmxreg,mmxreg \2\x0F\x0F\110\01\x8A PENT,3DNOW PFPNACC mmxreg,mem \301\2\x0F\x0F\110\01\x8E PENT,3DNOW,SM PFPNACC mmxreg,mmxreg \2\x0F\x0F\110\01\x8E PENT,3DNOW PI2FW mmxreg,mem \301\2\x0F\x0F\110\01\x0C PENT,3DNOW,SM PI2FW mmxreg,mmxreg \2\x0F\x0F\110\01\x0C PENT,3DNOW PF2IW mmxreg,mem \301\2\x0F\x0F\110\01\x1C PENT,3DNOW,SM PF2IW mmxreg,mmxreg \2\x0F\x0F\110\01\x1C PENT,3DNOW PSWAPD mmxreg,mem \301\2\x0F\x0F\110\01\xBB PENT,3DNOW,SM PSWAPD mmxreg,mmxreg \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM FFREEP fpureg \1\xDF\10\xC0 PENT,3DNOW,FPU --- x8 --- x8 --- x8 --- この行は含まない --- x8 --- x8 --- x8 --- x8 --- x8 --- をNASMソースのinsns.datに追加してmakeしなおして下さい。 * PSWAPD mmxreg,mmxreg にのみ`SM'がついてるのは不思議だ 但し、その場合perlが必要になります。Windowsユーザは各自インストール して下さい。 ◆その他 ソースに関する質問や改良方法、バグ報告などありましたら、 gogo-support@marinecat.forum.ne.jp までメールを下さい。 ただし、FAQ的な質問などの場合お返事を差し上げないことがあります。