PC9821Xs/C8W 内蔵 CD-ROM ドライブ (CD60D) について


お断り


このページの内容は、以下の古い環境での NEC 260 (PC-CD60D) について の情報です。(最終更新日 05/27 1997)
FreeBSD(98)2.1.0R-RELEASE
FreeBSD(98)2.1.5R-RELEASE
FreeBSD(98)2.2.1R-ALPHA
FreeBSD(98)2.2.1R-RELEASE
新しい情報については こちら をご覧下さい。

目次


  1. はじめに
  2. 他のマシンについて
  3. 差分ファイル
  4. 通常のアクセスについて
  5. 音楽 CD の演奏について
  6. wcd.c の変更箇所
  7. バグレポート、動作報告
  8. 追加情報
  9. 謝辞
FreeBSD のページへ戻る

はじめに


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 へ )

必要なものを持っていって下さい。 (更新日 05/18 1997)
目次へ

通常のアクセスについて

通常のアクセスについては、高山 啓介さんの 私家版 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 の場合はこの数字をさらに 増やしてやるかまたは、

  1. リトライ回数を増やしてやる、すなわち上の 4 行目の
    
              int cnt = ata->intrcmd ? 10000 : ata->slow ? 3000 : 50;
            
    を強制的に大きい値にして
    
              int cnt = 10000
            
    とする (小黒@新潟大学さん)
  2. for 文の中の DELAY(10) を DELAY(100) のように大きくしてやる (片野さん)
なども有効なようです。

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 をインストールするには 次のようにすればできると思います。

目次へ

音楽 CD の演奏について

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 での利用については 追加情報へ )

目次へ

wcd.c の変更箇所

/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) の所動作を確認したのは

だけです。/usr/sbin/cdplay のコマンドライン版と思われる /usr/sbin/cdcontrol はうまく動作しませんでした。原因は調査中です。

目次へ

バグレポート、動作報告

このパッチは無保証ですが、動作しない、不安定である、といった場合は 報告して下されば対処を検討します。動作した、特に Xs 以外で、という 場合の動作報告も歓迎します。報告はメールでお願い致します。

目次へ

追加情報

  1. xcdplayer-2.2 の使用について (02/16 1997)
  2. FreeBSD(98)2.2.1R-ALPHA について (04/28 1997)
  3. FreeBSD(98)2.2.1R-RELEASE 用差分について (05/18 1997)
  4. FreeBSD(98)2.2.1R-RELEASE の cdcontrol について (05/27 1997)

  1. xcdplayer-2.2 の使用について (02/16 1997)

    xcdplayer は cdrom_freebsd.c を修正しなくても実行時にデバイスを 指定してやるだけでいいようです。

    xcdplayer -device /dev/rwcd0c
    として実行できます。なお、指定デバイスは /dev/wcd0c でも動作 しました。(02/16 1997)

  2. FreeBSD(98)2.2.1R-ALPHA について (04/28 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 をインストールして少 しテストしてみた所、次がわかりました。

    1. atapi.c, atapi.h, wcd.c は /sys/i386/isa にある。
    2. CD60D は、通常のアクセスについては正常に使えるよう。 ただし完全にテストした訳ではないので前のように固まることが あるかも知れない。また、UNIX USER 96 11 付属の CD-ROM につ いては今までと同じ症状だった。
    3. boot.flp でも CD60D は認識しているよう。よって FreeBSD 2.2.1R の CD-ROM があれば CD-ROM からのインストールもちゃん とできるかもしれない (今回は ftp 経由)。
    4. /usr/sbin/cdplay はなくなっている。そのかわり /usr/sbin/cdcontrol が使える。
      /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)

  3. FreeBSD(98)2.2.1R-RELEASE 用差分について (05/18 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)

  4. FreeBSD(98)2.2.1R-RELEASE の cdcontrol について (05/27 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 も非常に参考になりました。 この場を借りて、厚くお礼申し上げます。

目次へ
PC-CD60D の新しい情報のページへ
FreeBSD のページへ戻る
作成日: 02/26 2002
竹野茂治@新潟工科大学 (shige@iee.niit.ac.jp)