doscmdはもともとBSD/OSで開発されたDOSのエミュレータで、FreeBSDに移植された ものです。 普通、エミュレータは、Diskイメージを仮想ハードディスクに見立てて動作する ものが多いのですが、doscmdはFreeBSDのファイルシステム上で動作するため、 FreeBSDの通常のオペレーションとシームレスに使用できるという特徴があります。 つまり、ソース編集は使い慣れたエディタで行い、コンパイルは doscmdでコンパイラを動かして行えます。
doscmdを動かすためには、カーネルが仮想86モードをサポートしている必要が あります。 コンフィグレーションファイルに次の一行を加えて、カーネルを再構築します (FreeBSD4.0だとGENERICカーネルに入っているので必要無いと思います)。
options "VM86"
また、doscmdにはバグがあるので、このページにある 坂内様のパッチおよび、ここにある 拙作のパッチを当て、コンパイル&インストールします。
面倒な人は、パッチ済みのdos.c(FreeBSD 3.x用)も置いておくので、 これを使用して下さい。これを使ったコンパイル方法は以下の通りです。
# cp dos.c /usr/src/usr.bin/doscmd # cd /usr/src/usr.bin/doscmd # make && make install
WonderWitchを/usr/local/wwitch以下にインストールすることにします。
# mount /cdrom # cd /usr/local # unzip /cdrom/WWitch.zip -x dirtree.txt # mv WWitch wwitch
unzipが無い場合は、CD-ROMから適当にコピーします。
注意: DOS領域やsamba経由でコピーする場合は、ファイル名が大文字に ならないように気をつけます。 コマンド類はおそらく問題ありませんが、 ヘッダやライブラリ、スタートアップ等のファイル名は、 大文字だとコンパイルおよびリンク時にエラーになると思います。
CD-ROMに入っているリンカlld.exe(16bit版)は動きません。 QuteのサポートWebサイトで 修正版が提供されています。ダウンロードのページから持ってきてアップデートします。
# cp lld.exe /usr/local/wwitch/lsic86ww/bin16
ホームディレクトリ上の.doscmdrcを編集して、開発環境にパスを通します。 必要に応じて環境変数を設定します。
PATH=/usr/local/wwitch/bin16;/usr/local/wwitch/lsic86ww/bin16 TZ=JST-9
lsic86ww/bin16/_lcc86wwを次のように編集します。
なお、最適化オプションを付けるとリンクできない問題は解決しました。
# _lcc86ww: configuration file of LSI C-86 for WonderWitch on Windows -DLSI_C_WW -DLSI_C -O #-XC:\WWitch\lsic86ww\bin パスの書き換え、以下同様。binはbin16に変更 -X/usr/local/wwitch/lsic86ww/bin16 -I/usr/local/wwitch/include -I/usr/local/wwitch/lsic86ww/include -L/usr/local/wwitch/lib -L/usr/local/wwitch/lsic86ww/lib #-T$TEMP テンポラリファイルはカレントディレクトリに作る -k "-Fc -T 20000 -TDATA 10000" -acrt0jpn2.obj $LCC86 & -llibww -lruntime
では、実際にコンパイルしてみます。 例として、contrib/games/lunaをコンパイルします。
$ mkdir luna $ cd luna $ cp /usr/local/wwitch/contrib/games/luna/* . $ doscmd lcc86 -o luna.bin luna.c
これで、luna.binというファイルができます。次にmkfent16.exeで、転送形式に 変換します。
$ doscmd mkfent16 luna.cf mkfent: luna.fx 2696 bytes (22 blocks) $
これでluna.fxというファイルができるので、XMODEMの使えるターミナルソフト (たとえばminicomなど)を使って専用カートリッジに転送します。 詳しくは、Meg編を参照して下さい。
今のところありません。
最適化オプションを付けるとリンク時にエラーになる問題は、doscmd側のバグでした。