PC-9821 V16/M7 USB 2.0 化計画

 NEC PC-9821 V16/M7 (98MATE VALUESTAR、以下 V16) には PCI スロットが2つしかなく、 4つの C バススロットにも使い道がありません。 しかも、すでに2つの PCI スロットは UltraSCSI と Ethernet の各カードに割り振られ空きがありません。 仮に空いていたとしても、IRQ 食いなこの PC では割り込みチャンネルの空き不足を免れることはできません。 第一線を退いたとはいえ、 スペックはこの部屋で2番目 (当時) を誇るこいつをこのまま錆びさせるのはもったいない。 そこで登場するのが、 玄人志向の USB2.0V2-PCI という USB 2.0 インターフェースボードです。

 たまたまパソコンショップで見つけて、1,780 円という安さにつられて買ってみたのですが、 玄人志向は PC-9800 シリーズ対応品も作ってくれる、98 ユーザにとっては突如現れた救いの神的存在。 ひょっとしたら PC-9800 シリーズで動くかもしれないと思ったわけです。 なお、USB コントローラチップは VIA 製。 VIA チップセットに統合されているコントローラと同等で有ることが予想され、 万が一すんなり動かなくても Web 上でなんらかの情報が収集できることが期待されます。

 USB2.0V2-PCI を利用するためには、 まず SCSI か Ethernet のどちらかの PCI カードを抜かなければなりません。 SCSI カードにはブート元の HDD がつながっているため抜くわけにはいかず、 自動的に Ethernet カードが抜かれることになりました。 もっとも、USB の利用に成功すれば USB ポートに挿す Ethernet デバイスが利用できるはずなので問題はありません。入れ替わりに、USB2.0V2-PCI を挿し、 電源を入れてみます。

 V16 にこのカードを挿す前に、IBM Aptiva 560 にも挿してみたのですが、 このときは BIOS による PCI チェックでエラーを出し OS の起動までたどり着くことはありませんでした。 V16 ではそのようなこともなく、無事に Windows 98 が起動され、 例の「新しいデバイスの検出」ダイアログがでました。

 ここまできて、PC-9800 シリーズ用デバイスドライバなど無いことに気づきます。 ただ、VIA 製 USB コントローラのドライバなら Windows 98 のインストールディスクに有るだろうと考え、 そこからの自動検出を試みると、USB 1.1 の機能を満たすまでのドライバ群はすんなり入っていきました。 USB 2.0 の機能を発揮するためのデバイスだけが「?」マークで残っている状態です。

 こればかりは USB 2.0 の登場より前の OS のインストールディスクに入っているはずもなく、 USB2.0V2-PCI に付属の CD-ROM からドライバを入れてみることにします。 もし、USB 2.0 が USB 1.1 の基盤の上で動いているものなら、 USB 1.1 のドライバが入った時点で PC/AT と PC-9800 という機種のスキマは埋められているのではないかという期待もあります。

 なんとこれもすんなり成功。再起動の後、 デバイス マネージャを見ると見事にすべて認識されています。 今までの人柱経験のなかで、こんなにすんなりといってしまったことがあったろうか。 いや、ない。涙が止まらない。

 感動してばかりもいられないので、気を取り直して動作確認をすることにしましょう。 USB を使えるようになった場合、 Ethernet を USB 経由にしなければならないことは購入前から分かっていたので、 同時に Melco LUA-KTX も購入していました。これが使えるかどうか試してみることにしましょう。

 LUA-KTX を挿すと、問題なく「新しいデバイスの検出」ダイアログが現れ、ドライバを要求してきました。 文字にするとさも当たり前の様ですが、実際には毎度ドキドキの作業です(笑)。 これも USB2.0V2-PCI と同様 PC-9800 用ドライバなど無いのですが、 添付のフロッピーからインストールするとこれまたすんなり動作。もう完璧すぎます。

 これで、V16 で多種多様な USB デバイスが利用できる様になりました。しかも 2.0 対応です。 実際には本体のスペックに足を引っ張られて 480Mbps も出ないでしょうが、ともかく、 これまで拡張貧乏だった V16 に、いろんなデバイスつなぎ放題です。 PS/2 ポートがないため諦めていたオプティカルマウスや Happy Hacking Keyboard だって繋がります(動くかどうかはドライバ次第)。 intuos USB だって繋がります(動くかどうかはドライバ次第)。 プリンタやスキャナ、ポータブル HDD や外付け CD-R Drive、さらには MURAMASA MM1 のクレードルまで、 USB デバイスだったら何だって繋がります(動くかどうかはドライバ次第)。USB 万歳!

※番外編

「FreeBSD(98) ではどうなる?」

 今回実験に用いた V16 には FreeBSD(98) 4.5R-Rev01 も入ってます。 だったらそっちでも動いたら尚良いよね、てなわけで FreeBSD(98) 起動。

 この段階では、以前カスタムしたカーネルのため、USB 関連のドライバがすべてコメントアウトされています。 当然 USB コントローラなんぞ認識しません。とりあえず、USB 関連のドライバを有効にする様、 カーネルを再構築します。

 make depend; make; make install、そして shutdown -r now。 以下の様に認識されました。

  ...
  uhci0: <VIA 83C572 USB controller> port 0x6100-0x611f irq 6 at device 14.0 on pci0
  usb0: <VIA 83C572 USB controller> on uhci0
  usb0: USB revision 1.0
  uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub0: 2 ports with 2 removable, self powered
  ugen0: MELCO BUFFALO LUA-KTX, rev 1.10/1.00, addr 2
  uhci1: <VIA 83C572 USB controller> port 0x6120-0x613f irq 9 at device 14.1 on pci0
  usb1: <VIA 83C572 USB controller> on uhci1
  usb1: USB revision 1.0
  uhub1: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub1: 2 ports with 2 removable, self powered
  ...

 とりあえず USB 1.0 として動いています。2.0 への対応は今後に期待するとして、 LUA-KTX が使えないのは痛いのでドライバを捜してみると、作ってくださった方がみえました。

 まず、秋山俊輔氏作の LUA-KTX ドライバ を取ってきて適当なところへ展開します。 展開したディレクトリで make とすると使い方が表示されるので、make copy を実行します。 make patch は今回利用した 4.5R ではうまくいかないので、 patches/sys.diffs-20011025 の内容を1つ1つ手動で patch 当てします。

 実はこれだけではうまくいきません。/usr/src/sys/dev/usb/usbdevs.h

  /* Melco, Inc products */
  #define USB_PRODUCT_MELCO_LUATX1        0x0001          /* LUA-TX Ethernet */
  #define USB_PRODUCT_MELCO_LUATX5        0x0005          /* LUA-TX Ethernet */
  #define USB_PRODUCT_MELCO_LUA2TX5       0x0009          /* LUA2-TX Ethernet */

というところの最後に

  #define USB_PRODUCT_MELCO_LUAKTX        0x0012          /* LUA-KTX Ethernet */

という行を追加し、さらに /usr/src/sys/dev/usb/usbdevs_data.h

  {
USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5, 0, "Melco, Inc.", "LUA-TX Ethernet", },

の下に、これを真似して、

  {
      USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX,
      0,
      "Melco, Inc.",
      "LUA-KTX Ethernet",
  },

を追加します。

 これで準備完了。カーネルコンフィグファイルに LUA-KTX ドライバを組み込む設定を書きます。 ここでは /usr/src/sys/pc98/conf/GENERIC ファイルをそのまま使います。 すでに他の名前でリコンフィグしている方は適宜読み替えてください。 /usr/src/sys/pc98/conf/GENERIC を開いて、最低限

  device         uhci
  device         ohci
  device         miibus
  device         usb
  device         rue

を有効にします。

  # cd /usr/src/sys/pc98/conf
  # config GENERIC
  # cd ../../compile/GENERIC
  # make depend; make

とやって、後はひたすら成功するのを祈りましょう。何もエラーが出なかったら、

  # make install

で作業は終了です。再起動して目を皿の様にしてブートメッセージを監視しましょう。

 うまくいっていれば、

  ...
  rue0: MELCO BUFFALO LUA-KTX, rev 1.10/1.00, addr 2
  rue0: Ethernet address: xx:xx:xx:xx:xx:xx (← MAC アドレス)
  miibus0:  on rue0
  ruephy0:  on miibus0
  ruephy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
  ...

というように認識されます。これを確認したら、/etc/rc.conf

  ifconfig_rue0="DHCP"

などと(上の例は DHCP で IP アドレスを取得する場合。 そのほかの場合は man rc.conf を参照してください)設定して、 もう一度再起動した後に ifconfig とやると、

  % ifconfig
  rue0: flags=8843 mtu 1500
  inet6 fe80::207:40ff:fe11:eef%rue0 prefixlen 64 scopeid 0x1
  inet 192.168.1.103 netmask 0xffffff00 broadcast 192.168.1.255
  ether 00:07:40:11:0e:ef
  media: Ethernet autoselect (100baseTX )
  status: active
  ( 値は環境によって異なります )

といった具合に動作しているのが確認できると思います。

 つまり、なんと FreeBSD(98) でも LUA-KTX は利用できるのでした!

[ 2003/01/21 追記 ]

 ここまでやっておきながら、再インストールの度に手動パッチを当てるのが面倒くさくて、 FreeBSD 側が標準でドライバを持っている LUA2-TX を買ってしまいました・・・。

 Wing Jack 弱いし・・・(-。-) ボソッ

[ 2003/08/26 追記 ]

 FreeBSD 5.1-RELEASE では、rue ドライバが取り込まれて標準で LUA-KTX が利用可能の様です(未確認)。