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 を動作させているので, そちらも参考になるでしょう.
2000/8/12(土),ついに WonderWitch を購入した.
WonderWitch はまだ一般の店頭では販売されていないのだが,
開発元である
Quteのホームページによれば,
通信販売か,もしくは
東京・秋葉原 ぷらっとホーム
(ぷらっとホーム案内)
か
大阪・日本橋 ふぁすと・ばっく
(ふぁすと・ばっく案内)
でなら店頭販売してるということだったので,ぷらっとホームで買ってきた.
その後に寄ったドトールでは,WonderWitch の話をしてる人がけっこういた.
けっこう話題になってるようだ.
# # 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 を使うといいようだ.
まず,doscmd にはバグがあるので, [FreeBSD-users-jp 51029] のパッチを当ててリコンパイルする必要があるようだ. (パッチは上記 Web アドレスからもってこれる)
当方の環境は,FreeBSD-3.4R だが, /usr/src/usr.bin/doscmd/dos.c を確認したところ,このパッチは当たってなかったので,パッチを当てて, make ; make installした.
(注意1)
当然といえば当然の注意ですが,自分がミスったことなので,いちおう書いときます.
sample.obj+0x1291: Invalid object module: Record length <= 0のようなエラーがでてリンクできないことがあるというバグが報告されています. ( WitchTech-ML 00266, WitchTech-ML 00289, WitchTech-ML 00290 の記事参照)
これに関する説明とパッチが, 熱烈歓迎!皇族的熊猫の 「よせあつめ&リンク」→「doscmd 非公式パッチ」のページで公開されて ますので,対応したほうがいいでしょう.
坂井の経験では,コード量が多くなってオブジェクトのサイズが大きくなったときに, この問題が出やすいようです. (坂井はコードを複数ファイルに分割することで対策しています)
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注意として,
で,
> doscmd mkfent16 > doscmd lcc86とかを実行してみたら,ちゃんと実行できた.よかったよかった.
基本的には 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 とかでコンソールに入って),コンソール上で 実行するとうまくいきます.
> cd /home/hiroaki/WWitch > mkdir programs > mkdir programs/helloを実行して,ディレクトリを作成した.
(hello.c)
#include(makefile)void main() { text_screen_init(); text_put_string(0, 0, "Hello, World!"); key_wait(); } /* End of Program */
hello.bin : hello.c doscmd lcc86 -o C:\\programs\\hello\\hello.bin C:\\programs\\hello\\hello.c(doscmd の行の先頭が,TAB コードになるように注意すること!)
-XC:\lsic86ww\bin16 -IC:\include -IC:\lsic86ww\include -LC:\lib -LC:\lsic86ww\lib(-X で指定するディレクトリを,bin ではなく bin16 に変更すること)
で,WWitch/programs/hello で,
> makeしたら,ちゃんとコンパイルできて,hello.bin が作成された.
(hello.cf)
name: hello info: Hello mode: 7 source: programs\hello\hello.bin output: programs\hello\hello.fx
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 したら,ちゃんと hello.fx が生成された.
> doscmd kmmakeのようにしてコンパイルするようにしたほうがいいかもね.
cuaa0384|cua0384:dv=/dev/cuaa0:br#38400:pa=none:のような行を作成して,
> tip cuaa0384で,Meg に接続できた.もしくは,
cu -l /dev/cuaa0 -s 38400 --parity=noneでも接続できた.
(/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:のようなエントリが必要)
WonderSwan 側のシリアルポートの転送速度を 9600bps にするのは,
モニタモードでできる.(WonderWitch のマニュアルのp.30参照)
(ただし速度を9600にしたままだと,別の WonderSwan と通信対戦しようと
したときに,速度が合わなくて通信できないかもね.
確認したわけではない,単なる推測だけど)
で,とりあえず 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 に接続して,
put /rom0と入力することにより, WonderSwan はファイルの受信状態に入る.
~$ lsx -X hello.fxのようにキー入力すれば, lsx を通して XMODEM プロトコルでファイル転送をすることができるらしいのだが, よくわからない.うまくいかない.
> tip cuaa0384のようにして,tip で WonderWitch に接続して,
~C lsx [filename]かもしくは
~C lsx -X [filename]のようにキー入力することにより,XMODEM プロトコルでファイル転送できる らしいのだが,これもよくわからない.
ひょっとしたら,なんども転送のテストをしているうちに,WonderWitch 側に
同じファイル名(ここでは hello)のゴミファイルができてしまい,
転送がキャンセルされているのかもしれない,
と思ったりもしたのだが,よくわからない.(WonderWitch のマニュアルの,p.39
「XMODEM転送はWonderWitchによってキャンセルされました」参照)
マメにゴミファイルの掃除をしたほうがいいかも.
> 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 でパソコン通信する方法 参照.