WonderWitch on FreeBSD


Libretto SS1000 Powered by FreeBSD で開発中!

あなたは人目のお客様です.

WonderWitch を購入しました.ぼくの手元には Windows 環境が無いので, もともと FreeBSD 上で開発していくつもりでした. ここでは,Windows を一切使用せずに,FreeBSD 上で WonderWitch で開発していく 方法(ていうか,環境づくりの過程で,坂井がいろいろ試したこと) についてまとめました.

初心者が,WonderWitch 購入から FreeBSD での環境構築まで,ひととおり できるようになるくらいを目安にしてまとめてあります. (ここでいう「初心者」というのは, 「WonderWitch や XMODEM の初心者」という意味です. プログラミングやFreeBSDの初心者という意味ではありません. プログラミングやFreeBSDに関しては,それ相応の知識が必要です)

つまり,プログラミングやUNIXに関する知識はそれなりに持っている人が, ちょっと WonderWitch で遊んでみようか,というレベルが対象です.

(自分用のメモの意味合いが強いので,乱文&まとまりがないけど許してね)
(当然ですが,内容については,無保証です.試すときは自己責任でお願いします)
Linux で同じようなことをしたいときにも参考になるでしょう.
なお,当方の環境は,FreeBSD-3.4R です.

また, 熱烈歓迎!皇族的熊猫 Daemons and Witches〜FreeBSDでWonderWitch〜 でも,FreeBSD 上で WonderWitch を動作させているので, そちらも参考になるでしょう.

目次

1 購入

2000/8/12(土),ついに WonderWitch を購入した.

WonderWitch はまだ一般の店頭では販売されていないのだが,
開発元である Quteのホームページによれば, 通信販売か,もしくは 東京・秋葉原 ぷらっとホーム (ぷらっとホーム案内) か 大阪・日本橋 ふぁすと・ばっく (ふぁすと・ばっく案内) でなら店頭販売してるということだったので,ぷらっとホームで買ってきた.

その後に寄ったドトールでは,WonderWitch の話をしてる人がけっこういた.
けっこう話題になってるようだ.

2 環境構築

WonderWitch の FAQの, 「Q. FreeBSD で使用できますか?」を参考にして,以下の作業を行った.

2.1 vm86 mode の追加

vm86 mode を使用できるように,カーネルオプションに
#
# Allow processes to switch to vm86 mode, as well as enabling direct
# user-mode access to the I/O port space.  This option is necessary for 
# the doscmd emulator to run and the VESA modes in syscons to be available.
#
options         "VM86"
を追加して,カーネルを再構築した.(LINT 参照) (FAQ によれば, FreeBSD-4.0R 以降では必要無いらしい)
ちなみに,カーネルのコンフィグの,
# Power management support
device          apm0    at isa?         # Advanced Power Management
のところに,
#  If `options VM86' is set, V86 mode is used in APM initialization
#  instead of real mode.  VM86 is recommended if you want to use APM.
と書いてあるので,apm を利用する場合には,option VM86 を使うといいようだ.

2.2 doscmd のリコンパイル

2.2.1 doscmd って?

さらに, FreeBSD-users-ML の,doscmd に関する一連のスレッド を参考にして,doscmd を使えるようにしなければならないらしい.
doscmd というのは,ぼくは知らなかったのだが,以下のことができるらしい. 今回は,コマンド単位で実行できれば十分なので,後者の 「DOS用のコマンドを単体で実行する」ということができれば十分であるから, そういう路線で進める.

2.2.2 パッチ当てとリコンパイル

まず,doscmd にはバグがあるので, [FreeBSD-users-jp 51029] のパッチを当ててリコンパイルする必要があるようだ. (パッチは上記 Web アドレスからもってこれる)

当方の環境は,FreeBSD-3.4R だが, /usr/src/usr.bin/doscmd/dos.c を確認したところ,このパッチは当たってなかったので,パッチを当てて, make ; make installした.

(注意1)
当然といえば当然の注意ですが,自分がミスったことなので,いちおう書いときます.

(注意2)
これもいちおう書いときます. これはひょっとしたら単にシェルのせいかもしれない.よくおぼえていない.

2.2.3 doscmdのその他のバグ

doscmd から LSI-C を使用してコンパイルした際に,リンク時に,
sample.obj+0x1291: Invalid object module: Record length <= 0
のようなエラーがでてリンクできないことがあるというバグが報告されています. ( WitchTech-ML 00266, WitchTech-ML 00289, WitchTech-ML 00290 の記事参照)

これに関する説明とパッチが, 熱烈歓迎!皇族的熊猫 「よせあつめ&リンク」→「doscmd 非公式パッチ」のページで公開されて ますので,対応したほうがいいでしょう.

坂井の経験では,コード量が多くなってオブジェクトのサイズが大きくなったときに, この問題が出やすいようです. (坂井はコードを複数ファイルに分割することで対策しています)

2.3 WonderWitch ディレクトリ作成

つぎに,WonderWitch のシステムディレクトリを, ユーザーディレクトリの下に構築した.
WonderWitch の CD-ROM の,WWitch 以下のディレクトリを, /home/hiroaki の下にコピーした.のだが,ファイルの属性が r-xr-xr-x に なってたりしたのでこれは削除して, CD-ROM に入っていた WonderWitch の ZIP ファイルを解凍した. さらに,Qute のホームページ (だったとおもう,たしか)で配布しているアップデートパッチ (WWUpdate20000801.zip)を展開して, で,生成された WWitch ディレクトリを /home/hiroaki の下にコピーした.

2.4 ~/.doscmdrc 作成

つぎに,~/.doscmdrc を作成する必要がある. FreeBSD-users-ML の,doscmd に関する一連のスレッド や,WWitch/bin16/setup.bat を参考にして,以下のような ~/.doscmdrc を作成した.
assign A: /dev/rfd0.1440 1440
assign C: /home/hiroaki/WWitch
assign T: /tmp
FILES=20
PATH=C:\bin16;C:lsic86ww\bin16
TMP=T:
TZ=JST-9
注意として, らしい.また,環境変数 INCLUDE や LIB は,LSIC では意味が無いようだったので, 必要無し.

2.5 テスト

いったんリブートした.(カーネルを構築しなおしたのと,あと doscmd を make install したときに,ライブラリがインストールされたような気がしたので)

で,

> doscmd mkfent16
> doscmd lcc86
とかを実行してみたら,ちゃんと実行できた.よかったよかった.

2.6 FreeBSD4以降の場合

ここまでは FreeBSD-3.4 での話ですが,当方の環境は最近 FreeBSD-4.2 に なったので,FreeBSD4以降での環境構築について書きます.

基本的には FreeBSD-3.4 と同様ですが,FreeBSD-4.0 以降では, カーネルに VM86 オプションは必要無いようです.

また,FreeBSD-4.0 以降では,doscmd のソースは一部修正されているようです. 上記パッチをそのまま当てることはできないので,上記パッチをよく見て, 自分で /usr/src/usr.bin/doscmd/dos.c を修正する必要があります. (当方の環境では,dos.c の修正無しではうまくいきませんでした)

また,doscmd 実行時に,vga font がなんちゃらというエラーメッセージが出て 実行できない場合があります.このようなときは,X を落として (もしくは Ctrl-Alt-F2 とかでコンソールに入って),コンソール上で 実行するとうまくいきます.

3 開発

いよいよ実際に開発してみよう.

3.1 開発用ディレクトリ作成

> cd /home/hiroaki/WWitch
> mkdir programs
> mkdir programs/hello
を実行して,ディレクトリを作成した.

3.2 ファイル作成

3.2.1 hello.c と makefile 作成

ディレクトリ WWitch/programs/hello に,hello.c と makefile を書いてみた.
(ファイル名は8文字+拡張子3文字になるように注意!)
(ファイル名は小文字のみなので,makefile を Makefile にしないように注意!)

(hello.c)

#include 

void main()
{
  text_screen_init();
  text_put_string(0, 0, "Hello, World!");
  key_wait();
}

/* End of Program  */
(makefile)
hello.bin :		hello.c
	doscmd lcc86 -o C:\\programs\\hello\\hello.bin C:\\programs\\hello\\hello.c
(doscmd の行の先頭が,TAB コードになるように注意すること!)

3.2.2 _lcc86ww 作成

LSIC は,_lcc86ww というファイルを参照するということなので, WWitch/lsic86ww/bin16/_lcc86ww の,-X,-I,-L の行を,以下のように修正した.
-XC:\lsic86ww\bin16
-IC:\include
-IC:\lsic86ww\include
-LC:\lib
-LC:\lsic86ww\lib
(-X で指定するディレクトリを,bin ではなく bin16 に変更すること)
(-X や -I や -L で指定するディレクトリを,適切なものに修正すること)

で,WWitch/programs/hello で,

> make
したら,ちゃんとコンパイルできて,hello.bin が作成された.

3.3 WonderWitch 転送形式への変換

hello.bin を,カートリッジに転送できるフォーマットに変換しなければならない.

3.3.1 hello.cf 作成

まず,WWitch/programs/hello/hello.cf を作成した.

(hello.cf)

name: hello
info: Hello
mode: 7
source: programs\hello\hello.bin
output: programs\hello\hello.fx

3.3.2 makefile 修正

また,makefile を以下のように修正した.
hello.fx :	hello.bin
	doscmd mkfent16 C:\\programs\\hello\\hello.cf

hello.bin :	hello.c
	doscmd lcc86 -o C:\\programs\\hello\\hello.bin C:\\programs\\hello\\hello.c

clean :
	rm -f hello.fx hello.bin
(doscmd の行の先頭が,TAB コードになるように注意すること!)
(make を実行して doscmd を起動すると,WWitch/programs/hello でなく, WWitch をカレントディレクトリとしてコマンド mkfent が実行されるので注意)

で,make したら,ちゃんと hello.fx が生成された.

3.3.3 余談

いま思ったんだけど,doscmd を起動すると,WWitch/programs/hello でなく, WWitch をカレントディレクトリとしてコマンドが実行されてしまうことと, プログラムのソースを一般に公開・配布することを考えると, BSD の make を使うのでなく, makefile は LSIC の kmmake.exe に合わせて書いて, コンパイル時には
> doscmd kmmake
のようにしてコンパイルするようにしたほうがいいかもね.

4 WonderSwan への転送

4.1 シリアル接続

/etc/remote に,
cuaa0384|cua0384:dv=/dev/cuaa0:br#38400:pa=none:
のような行を作成して,
> tip cuaa0384
で,Meg に接続できた.もしくは,
cu -l /dev/cuaa0 -s 38400 --parity=none
でも接続できた.
(注意: WonderWitch を通信画面にしないと接続できないので注意)

(/dev/cuaa? の属性を,適切なものにしておく必要がある)
(tip はスーパーユーザで行う必要があった)

また,WonderSwan のシリアルの速度を 9600bps にすれば,

> cu -l /dev/cuaa0 -s 9600 --parity=none
> tip cuaa0c
(ただし,/etc/remote に,
cuaa0c|cua0c:dv=/dev/cuaa0:br#9600:pa=none:
のようなエントリが必要)
のようにして,9600bps で通信することもできた.

WonderSwan 側のシリアルポートの転送速度を 9600bps にするのは, モニタモードでできる.(WonderWitch のマニュアルのp.30参照)
(ただし速度を9600にしたままだと,別の WonderSwan と通信対戦しようと したときに,速度が合わなくて通信できないかもね. 確認したわけではない,単なる推測だけど)

4.2 カートリッジへの転送

4.2.1 試行錯誤の過程

WonderWitch の FAQによれば, ファイルのカートリッジへの転送には,cu や rzsz や lrzsz を使用するらしい.

で,とりあえず man cu したのだがよくわからんので,lrzsz というパッケージを インストールした.で,/var/db/pkg/lrzsz-0.12.20 の下を見てみたら, lrz と lsz というマニュアルがインストールされているので, man lsz してみた.(たぶん lrz が受信用で,lsz が送信用なのだろう)

man lsz によれば,sx というコマンドを使えば,XMODEM プロトコルで ファイルをやりとりできるということだ. /var/db/pkg/lrzsz-0.12.20/+CONTENTS によれば, sx ではなく,lsx というコマンドがインストールされているようである. (勝手な推測だが,おそらく sx とか rx というのは rzsz のコマンドで, lrzsz は rzsz の強化版かなにかで,rzsz の rx や sx というコマンドは, lrzsz のほうでは,lrx や lsx に置き換わっているのだろうと思う)

で,man cu や man lsz を読んだり, TransMagic で実際に転送したときのログを見たりして, いろいろやっているうちに,以下のことがわかってきた.

> cu -l /dev/cuaa0 -s 38400 --parity=none
のようにして,cu で WanderSwan に接続して,
> tip cuaa0384
のようにして,tip で WonderWitch に接続して,

ひょっとしたら,なんども転送のテストをしているうちに,WonderWitch 側に 同じファイル名(ここでは hello)のゴミファイルができてしまい, 転送がキャンセルされているのかもしれない, と思ったりもしたのだが,よくわからない.(WonderWitch のマニュアルの,p.39 「XMODEM転送はWonderWitchによってキャンセルされました」参照)
マメにゴミファイルの掃除をしたほうがいいかも.

4.2.2 メーリングリストでの情報収集

WonderWitch Fan メーリングリストでの情報 ([WitchFan 00289][WitchFan 00292][WitchFan 00293][WitchFan 00303]参照) によれば,転送には,cu や tip 上から,rzsz や lrzsz を使用する方法の他にも, 以下のアプリケーションが使用できるらしい. FreeBSD packages の comms カテゴリを参照すること.

4.2.3 けっきょくこうやったらうまくいった

で,いろいろやってたら,ようやく転送できた.cuで,
> cu -l /dev/cuaa0 -s 38400 --parity=none
のようにして接続して,で,WonderWitch の通信メニューの「XM受信」で, WonderSwan を受信状態にして, cu 側で,
~+ lsx hello.fx
とキー入力することにより,ファイルを転送することができた. (tip の場合には,
~C lsx hello.fx
で,ファイル転送できた)
put /rom0
~+ lsx hello.fx
でも転送できた.これだと WonderSwan 側の操作をせずに, FreeBSD 側の操作のみでファイルを転送することができる.

XMODEM での通信に関しては, DOS でパソコン通信していた人に捧げる Linux でパソコン通信する方法 参照.

4.3 もしもうまくいかなかったら

今後転送がうまくいかないことがあったら,以下のことを確認するといいかも.
メールは kozos(アットマーク)kozos.jp まで