Daemons and Witches〜導入編〜


DOSのエミュレート環境を構築したあと、WonderWitchのインストール・設定を 行います。

1. 動作環境

2. doscmdが動くようにする

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

3. WonderWitchをインストール

WonderWitchを/usr/local/wwitch以下にインストールすることにします。

# mount /cdrom
# cd /usr/local
# unzip /cdrom/WWitch.zip -x dirtree.txt
# mv WWitch wwitch

unzipが無い場合は、CD-ROMから適当にコピーします。

注意: DOS領域やsamba経由でコピーする場合は、ファイル名が大文字に ならないように気をつけます。 コマンド類はおそらく問題ありませんが、 ヘッダやライブラリ、スタートアップ等のファイル名は、 大文字だとコンパイルおよびリンク時にエラーになると思います。

4.リンカ(lld.exe)のアップデート

CD-ROMに入っているリンカlld.exe(16bit版)は動きません。 QuteのサポートWebサイトで 修正版が提供されています。ダウンロードのページから持ってきてアップデートします。

# cp lld.exe /usr/local/wwitch/lsic86ww/bin16

5. doscmdの環境設定

ホームディレクトリ上の.doscmdrcを編集して、開発環境にパスを通します。 必要に応じて環境変数を設定します。

~/.doscmdrcの例

PATH=/usr/local/wwitch/bin16;/usr/local/wwitch/lsic86ww/bin16
TZ=JST-9

6. LSI C-86 for WonderWitchの環境設定

lsic86ww/bin16/_lcc86wwを次のように編集します。

なお、最適化オプションを付けるとリンクできない問題は解決しました。

/usr/local/wwitch/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

7. 動かしてみよう

では、実際にコンパイルしてみます。 例として、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編を参照して下さい。

8. Tips・その他

Make
LSI Cに含まれるkmmake.exeが動くかどうかは確かめていません。 ただ、FreeBSDのmakeやgmakeからdoscmdを使用すればいいでしょう。
ロングファイル名
ファイル名は8+3文字まで有効のようです。たとえばcontrib/games/snake をコンパイルしようとすると、pathnames.hがオープンできないというエラーに なります。
UNIX版のLSI C
LSI Cのマニュアルには、ときどき「UNIX版では〜」 という記述が見受けられます。 UNIX版のLSI Cは商品として存在するようで、これを使えば、 nativeな開発環境が手に入るんでしょうか? なお、試食版は無いようです。 ちなみに、僕はLSI Cを買えるような身分では無いので、 試す気はありません。
テンポラリファイル
-Tオプションでテンポラリファイルの作成場所を指定できるので、 MFS上のディレクトリを指定すればコンパイルが速くなるかもしれません。 ただし、複数のプロセスが同時に動くケースが考慮されていない可能性があるので (MS-DOS用のソフトなので多分考えていないでしょう)、同時に複数のコンパイルを 行なったとき、問題が起きるかも知れません。

9. Known Problems

今のところありません。

最適化オプションを付けるとリンク時にエラーになる問題は、doscmd側のバグでした。


戻る