FreeBSD(98)2.1.0R-RELEASE新しい情報については こちら をご覧下さい。
FreeBSD(98)2.1.5R-RELEASE
FreeBSD(98)2.2.1R-ALPHA
FreeBSD(98)2.2.1R-RELEASE
PC9821Xs/C8W 内蔵の CD-ROM ドライブは、通常の FreeBSD(98) のカーネ ルでは認識しないか、認識してもアクセスすると固まってしまい、OS や package のインストールや、音楽 CD の演奏には使えませんでした。
それが、通常のアクセスについては、高山 啓介さんの 私家版 FreeBSD Hardware FAQ にある、/sys/pc98/pc98/atapi.c に DELAY() を噛ませる方法でほぼうま くいき、また音楽 CD については /sys/pc98/pc98/wcd.c にパッチを当て ることでなんとかうまくいくようになりましたので報告します。
目次へマニュアルによると
PC9821Xn/C9W, PC9821Xp/C8W, PC9821Xs/C8Wはいずれも同じ CD-ROM ドライブ (PC-CD60D) を積んでいるようなので、 それらのマシンでもうまくいく可能性があります。
ただし、現在 (01/24 1997) はまだ Xs/C8W でしかテストしていません。
Xs 以外の上記のマシンでテストして下さった方がいらっしゃいましたら、 是非お知らせ下さい。
目次へ音楽 CD 用の wcd.c への差分は 2.1.0R 用のものと 2.1.5R 用のものの 2 つを用意しました。
(05/18 1997)新たに FreeBSD(98)2.2.1R-RELEASE 用の差分を用意しました。wcd.c は 2.2.1R では /sys/i386/isa にあります。もちろん、98 用のカーネルソ ースのパッチを当てた後でお使い下さい。 ( 追加情報 3 へ )
必要なものを持っていって下さい。通常のアクセスについては、高山 啓介さんの 私家版 FreeBSD Hardware FAQ にあるように、/sys/pc98/pc98/atapi.c の atapi_wait_cmd() に DELAY() を噛ませてカーネルをコンパイルし直すことでほぼ使えるようになるよう です。具体的には
int atapi_wait_cmd (struct atapi *ata, struct atapicmd *ac)
{
/* Wait for DRQ from 50 usec to 3 msec for slow devices */
int cnt = ata->intrcmd ? 10000 : ata->slow ? 3000 : 50;
for (; cnt>0; cnt-=10) {
ac->result.status = inb (ata->port + AR_STATUS);
if (ac->result.status & ARS_DRQ)
break;
DELAY (10);
}
の for 文の前に DELAY() を入れます。ただ、そこには DELAY(1500) を、
と書かれているのですが、Xs の場合 DELAY(5000) 位の数字にしないと
いけないようです。
ODP を載せている場合、あるいは Xn, Xp の場合はこの数字をさらに 増やしてやるかまたは、
int cnt = ata->intrcmd ? 10000 : ata->slow ? 3000 : 50;
を強制的に大きい値にして
int cnt = 10000
とする (小黒@新潟大学さん)
UNIX USER 96 11 付属の CD-ROM に ls -lR をかけると、途中から
No such file or directoryのメッセージが出て終了する、ということが起こっていましたが、これは fileutiles-3.13 の ls で試した所問題はありませんでした。標準の ls か、この CD-ROM かいずれかの問題と思われます。
Boot 時に CD-ROM を入れたままにしておくと IDE の認識の周辺で 「no cmd drq」と出ることがあります。また、unit 3 の認識で表示がおかしく なりますが、問題はないようです。
通常のアクセスについては動作は比較的安定していますので、 例えば UNIX USER 96 11 付属の CD-ROM の FreeBSD 2.1.5R と 98 用の file を使って FreeBSD(98)2.1.5R-RELEASE をインストールするには 次のようにすればできると思います。
オプションエディタを立ち上げて RELEASE NAME を 2.1.5-RELEASE から FreeBSD/2.1.5-RELEASE に書き換える (fj.os.bsd.freebsd の "T.M" さんの記事。 Message-ID: <01bbd197$db9284a0$c422d0ca@takacomp>)
/cdrom に CD-ROM がマウントされていない可能性がある。 その場合、Graph + F2 で別なコンソールを開き、そこで root になって# /sbin/mount -t cd9660 /dev/wcd0c /cdromとマウントしてやる。もちろん、/dev/wcd0c, /cdrom/ が あることを確認すること。
wcd.c へのパッチをあてカーネルをコンパイルし直すことで /usr/sbin/cdplay で演奏できます。ただ、/usr/sbin/cdplay は root で 実行するか、または
# chmod 4555 /usr/sbin/cdplayと set UID しておかないとうまく実行できないようです。
xcdplayer-2.2 も、ports に含まれる cdrom_freebsd.c に wcd のエントリ を付け加えることでなんとか使えるようです (追加情報 1 へ)。
/usr/sbin/cdplay を実行した後で CD を入れる、あるいは CD を入れ換え た場合一番最初の play で error が出ることがあります。これはもう一度 play を実行するとうまくいくと思います。これは cdplay の仕様です。
(FreeBSD(98)2.2.1R-RELEASE での利用については 追加情報へ )
目次へ/usr/sbin/cdplay のコマンドの中で play は効かないが、msfplay は 不完全ながら効く、ということがわかっていました。その不完全さを 調べてみると、例えば最初から 18 分後位まで演奏の指定をしたのに 12 分後位の所で止まってしまうという現象のようでした。
こういったことからわかったのですが、どうやら msf のデータを 16 進のデータでなく BCD のデータとして渡すとうまくいくようです。
play は lba というフォーマットで実行しているのですが、それも強制的 に msf に変換して BCD のデータにして渡しています。lba の方ではどう もうまく実行できませんでした。こちらも 2 byte 単位で BCD にすればい いのかとも思ったのですが、うまくいかないようです。
これらは wcd.c の中で行われていますので、通常の CD の player なら多 分使えると思います。現在 (01/24 1997) の所動作を確認したのは
このパッチは無保証ですが、動作しない、不安定である、といった場合は 報告して下されば対処を検討します。動作した、特に Xs 以外で、という 場合の動作報告も歓迎します。報告はメールでお願い致します。
目次へ
xcdplayer は cdrom_freebsd.c を修正しなくても実行時にデバイスを 指定してやるだけでいいようです。
xcdplayer -device /dev/rwcd0cとして実行できます。なお、指定デバイスは /dev/wcd0c でも動作 しました。(02/16 1997)
98 用に現在出ている FreeBSD(98)2.2.1R-ALPHA では、ATAPI に関す るソースコードは 2.1.x から色々変更されたようです。 fj.os.bsd.freebsd に流れた、FreeBSD(98)2.2.1R-ALPHA 公開のアナ ウンスにも ATAPI CD-ROM の不具合が良くなったように記述されてい ます。
そこで HD の空きに FreeBSD(98)2.2.1R-ALPHA をインストールして少 しテストしてみた所、次がわかりました。
/usr/sbin/cdcontrol -f /dev/wcd0c play 0:2.0 16:0.0しかし、やはり CD60D に固有の問題、msf のデータを BCD format で渡さなければいけない、という部分は残っている。
ということで、FreeBSD(98)2.2.1R-ALPHA はだいぶいいようですが 音楽 CD を聞くにはやはり wcd.c にパッチが必要になります。 時間に余裕ができたらさっそく作成いたしますのでもう少しお待ち下 さい。変更点は今までと同じでいけると思いますので、前のパッチを 参考に書く、という手もあります。(04/28 1997)
FreeBSD(98)2.2.1R-RELEASE 用の wcd.c の差分ファイル (音楽 CD 用) を用意しました。今の所ソースをよくは調べていませんのでまだ 変更箇所がでるかもしれませんが、とりあえず /usr/sbin/cdcontrol は使えるようです。
wcd.c は 2.1.X とは違い、/sys/i386/isa にありますのでそこで差分 を当ててカーネルを再構築して下さい。
FreeBSD(98)2.2.1R-RELEASE の wcd.c への差分
/usr/sbin/cdcontrol -f /dev/wcd0c play 9:0.0 16:0.0とやって 7 分間ほど演奏されれば O.K. です。cdcontrol の詳しい使 い方については man cdcontrol を見て下さい。
もし動作しない、不安定である、ということがありましたら報告して下 さい。よろしくお願い致します。動いた、という報告も歓迎致します。 (05/18 1997)
FreeBSD(98)2.2.1R-RELEASE では /usr/sbin/cdplay はなくなり /usr/sbin/cdcontrol のみになりましたが、これが十分使えます。 cdplay のように対話的にも使えますし、さらに今までの物に比べて 機能が拡張されていて close 命令 (eject の逆) が使えます。
また、デバイスの指定についてですが /dev/wcd0c を指定していて eject 等が効かないことがたまにありましたが、その際は /dev/rwcd0c を指定したら eject 等がちゃんと使えました。 詳しいことがわかり次第また報告しますが、デバイスの指定は /dev/rwcd0c の方がいいのかも知れません。 (05/27 1997)
CD60D、およびこのパッチの動作については 小黒隆@新潟大学さん、 片野尚史さん に たくさんの報告、協力、助言をいただきました。 また、高山 啓介さんの 私家版 FreeBSD Hardware FAQ も非常に参考になりました。 この場を借りて、厚くお礼申し上げます。
目次へ