MZもLANにつなぎたい
つながるものならつなぎたいと思うのが人情でしょう
98年1月、きっかけはほとんど気まぐれですが、我がNibbles lab.のLAN設備を大増強しました。モデムにつなぐタイプのルータや、プリントサーバ、赤外線LANアダプタにHubの買い足しでカスケード接続と、仕事に使うわけでもないのに半端ではないシステムになってしまったのです。おかげで5台あるPC/AT互換機とBrainpad
TiPOについてはめでたくLANで結ばれることができました。
ではその他のマシン、MZやX1なんかはどうだといえば、相変わらずスタンドアロンです。まぁ8ビットマシンはI/Fに対する処理能力の問題もあって見送るとしても、MZ-2800/6500なら可能性がないわけでもないでしょう。だってあのHP200LXだってLANにつなげられるんですよ、それよりCPU能力の高いMZにできないわけはないでしょう。
その前に、昔考えてたこと
冒頭でいきなり切り捨ててる8ビットマシン達ですが、昔はさらに別な構想もありました。大学4年の頃からGP-IBに興味を持ちまして、というのもMZ用のGP-IB
I/FであるMZ-8BIO4を非常に安価で入手できたことがきっかけなのですが、その直後GP-IB接続のプロッタをバイトでプログラムを組む都合上預かりまして、簡単なコマンドですが図形を描かせるのに使ったりしてますます面白くなりました。ただ、GP-IBでつながる機器というのはどれも高価ですし、プリンタ以外は個人的な利用価値があまり高そうでなかったこともあり、「パソコンにGP-IBがつながるとして、どうやって遊ぼう?」とか考えてしまいました。もしHP9000の周辺機器がジャンクで手に入るならそれをなんとかコントロールするという遊びかたもあったんでしょうけどね、それはかないません。
大学の卒研の技術員の人なんですが、そんな話を振ってみたところ、「じゃあパソコン同士つないでみたら?」という答えが返ってきました。そうか、ついパソコン対周辺機器とかいう固定概念に囚われてたので思い付かなかったけど、そういう考え方もありますわな。
基本的にGP-IBは一台のコントローラと複数の接続機器という構成をとります。コントローラは、ある接続機器からの要求に従って送信する機器(トーカ)と受信する機器(リスナ)を割り付け、それらがハンドシェイクで通信するように交通整理する役割を担っています。もしコントローラの知らないうちに送受信されていたら空いてるはずのバスが占有されることになるので、コントローラはバスにひとつだけと決められています。
さて、GP-IBの制御信号にはIFC(インタフェースクリア)というものがあって、これは事実上バスのリセットなんですが、これをドライブできるのはコントローラだけということになっています。ところが、コントローラでない誰かかIFCをアクティブにすると、その状態は異常であるということでコントローラはその役目を降りてしまいます。代わりに、IFCをドライブしたやつがコントローラになることができます。こういうバスをマルチコントローラというのですが、パソコン同士をつなごうという時、特にピアツーピアを構成しようと思うならどれもがコントローラになれる必要が出てきます。私の「GP-IBネットワーク」はこういう構想を持っていたのです。
しばらくして日本橋でTIのGP-IBコントローラであるTMS9914Aが乗っかったジャンク基板が500円で売られたので5枚程買い込み、ソフマップでノーブランドのGP-IBケーブルが700円だったかで売られたのでこれも5本ほど買い込みましたがそのままになっています。ちなみに、有名なコントローラとしてNECのμPD7210とさっきのTIのとがありますが、IFC信号がレジスタで見えるという点で私はTIのものを使おうと思っていました。なお、現在はNECは製造を中止し、TIもCMOS品しか作っていないそうです。それぞれのコンパチ品をナショナルインスツルメンツが製造しています。
MZのそれぞれの関門
MZ-2800はDOS3.1を標準装備しています。これはつまりMS-NETWORKS対応ということを指します。昔CD-ROMをつないだこともあります(あれはISO9660フォーマットをネットワークドライブとして割り付けるという考え方なんだけれども)。そういう意味では後述のMZ-6500より恵まれていると言えます。ですが、当然ながらNICはありません。
MZ-6500はDOS2.11とCP/M86しか動きません。階層化ディレクトリがあるだけましという感じです。そして、当然ながらNICはありません。SCSIさえおぼつかないというのに、贅沢な望みというものでしょう。
ではどうやってこれらをネットワークにつなぐのか?以下にこれまで検討したことを述べてみましょう。
NICを作る
ないのなら、その根本であるNICを作ってしまえばいいんじゃないか、という考え方ですね。とあるところからイーサネット用LSIと周辺の部品を含めたものを2つくらいなら調達できるので、ハードの心配はあまりありません。個人で取得できないだろうMACアドレスは、恐らくグローバルにはつながらないNICが私の周囲にありますので、それを拝借すればなんとかなります。どうせ自分のマシンもグローバルにはつながらないんですしね。
ソフトについては、作るのが比較的楽と思われるパケットドライバを選択するのがいいと思っています。MZ-6500についてはOSの都合でネットワークドライブというものが使えませんし、ftpが使えればメディアの心配なくファイル転送とかできます。この割り切りについてはこの後の案についても同じです。
これについての問題は、LSI等の回路ができあがっていて、しかも68系バスになっていること。LSIにDMAが内蔵されているので、そのためのメモリを用意しないといけないこと。まぁ、68301ボードみたいなのが売ってたりしますので、それと結合した上でユニバーサルボードに乗っけるのがいいんでしょうね。DOSのパケットドライバはその68301と通信するということになるでしょう。さらなる問題は、CQ出版関連の本だとパケットドライバの仕様がいまいちわからないことです。なんかいい本ないですかねぇ。
NICを流用する
X680x0用NICとして有名な、Neptune-Xの手法ですね。同じISAのNICを使うにしても、こちらは同じ86系バスですから接続もドライバについても楽できそうです。肝はI/Oアドレスと割り込みを合わせることですけど、さすがに流用は無理みたいなのでボード上で違うIRQ等に接続した上でドライバにパッチをあてることになりそうです。
NICを改造する
MZ-2800は、部分的には98互換機を目指して設計されています。内部アーキテクチャはまるっきりと言えるほど違うのですが、それをごまかすエミュレーションソフトとか、Cバスそっくりの拡張スロットとかが装備されています。そう、物理的には98用のI/Fボードが入るのですよ。割り込みとか、DMA関連の信号とか、ないわけではないんですけど一部欠けてるものがあったり、実は同じなんだが逆の名称になってたりという「差」があることはあるのですけど、場所が違うとかいうことは絶対ありません。
ということで、先日NewsGroupにてPC-9867というNICをGetしてきました。これは商品名を「B4680インタフェースボードEC」というのですが、仕様そのものは10BASE-5のNICでして、これにPS98-1511-51「TCP/IPサポートソフトウェア」を適用するとInetBIOS仕様のドライバが使用できるというわけなんです。InetBIOS仕様というのはなかなかに化石な仕様ですが、実際にドライバを見てみると比較的小さなCOMファイル3つで構成されてまして、解析などはけっこうしんどくないかも、と期待させてくれます。
ところがこのボード、実は選んではいけない「メモリマップ型」のNICなんです。なんで選んではいけないかというと、MZ-2800はコンベンショナルを含む1MB中に空きエリアが全然ないんです。I/O型ならその心配はいりませんが、メモリ型は致命的です。そこで今考えているのは、ハイメモリ領域にそのエリアをもっていこう、ということなのです。MZ-2800ではこの領域はリザーブとなっていますが、CPUは80286ですし使用できないわけではないはずです。セグメントとオフセットの設定次第でドライバもリアルモードのまま使用できます。幸いなことに、ボードも各バスの信号を一旦ドライバICで受けているみたいなので改造も比較的やりやすいかとも思います。
が、これはMZ-2800にしか使えない方法なんですよねぇ。
PC/ATのハードを一部搭載する
いわゆるPC/AT機のパラレルポートというのは汎用性が高く、SCSI、サウンド、A/Dコンバータ、ジョイスティック、CD-ROM、テープドライブ、TA、スキャナ等思い付くだけでもこれだけのプリンタ以外のデバイスを接続するためのアダプタが市販されています。NICもそのうちの一つで、最近でこそ100BASE-TXが増えてきたせいで速度的に対応できないパラレルNICは数を減らしてきていますが、まだ市販はなくなっていません。ISAブリッジを作るよりは大変でしょうが、NICそのものを作るよりはパラレルポートを作る方が楽です。ドライバもほとんどそのまま使えそうな気がします。
問題は、やっぱりドライバの中身が分からないこと。PC/ATと互換のハードだといっても、割り込みとか部分的にはMZに依存するわけで、そういうところをいかに書き換えればいいのか、ちょっと見えないわけです。これはもうがんばって元のドライバを解析するしかないわけなんですけれど、かなり大変なことになりそうで…。
ルータを使う
私がかつて住んでいた部屋は「寮」であり電話はレンタルなのでISDN化できませんでした。そこで使用していたルータは外付けモデムを制御するタイプのやつで、マイクロ総合研究所のNetGenesis-4といいます。これが19800円と安いわりにRAS機能までついていて、なかなかのお買得商品です(でも使う人はちょっと限られそうだけど)。
で、RASサーバに設定すれば、外部からPPP接続するとネットワークに入れるわけです。これがもし、あるパソコンからモデム−電話線−モデムという経路をばっさり取り払えたら、新たなネットワーク接続の方法になるんじゃないでしょうか?
というわけで、このルータのシリアルポートとMZのシリアルポートを直結して、ルータからはモデムに見えるようにMZに振る舞わせ、MZからはPPP接続してしまうという試みがうまくいくかどうかを確かめるために、まずX68030のIIJ-PPPを使ってやっているのですが…うまくいってません。まず最初の、X68030にモデムのふりをさせるというのがよくなくて、IIJ-PPPでは通信のログをとれるのですが、それによるとルータからは普通の文字列で送っているのにX68030からはHDLC規則に則った文字列を送っています。ちゃんと話ができているのかよくわかりません。今はシリアルラインモニタを調達してきてRAS接続される時の交信の内容を調べようかと思っています。
最近知ったのですが、MN128-SOHOにはRASならぬLAS(ローカル・アクセス・サーバー)という機能があって、10BASE-Tとは別に備わっているシリアルポートから普通のTAのように接続できるだけでなくて、そのボートからHUBを通じて10BASE-Tとも通信できるようになっているのです。でも、そのためだけに45000円は出せないよなぁ…。
実は問題はそれだけでなくて、例えX68030での実験が成功しても、例えMN128-SOHOを買ってきても(うちではバカ高いHUBにしかならんのだけど)、フリーで使えるDOS用のPPPドライバはPC/ATアーキテクチャに依存しているんです。つまり8250や16550が所定のIRQとI/Oポートアドレスでもって接続されているわけです。当然さっきと同じ割り込みの問題もあります(いくら8259で割り込みベクタの設定をする機構は同じといってもそのアドレスと接続順は違うわけで…)。ハードについてはMZのシリアルに対応させるか、8250/16550ボードを作ってしまうかのいずれかです。が、ソフトがねぇ。
どの道もいばらの道
どうせやるなら汎用性の高いものを、とか考えてはいますが、むつかしいですねぇ。実現したとして紹介しやすいのがルータによる接続、PPPソフトはMZのシリアルポートに対応したものとすれば、新規購入ハードがルータだけになります。HUBもついてるからおあつらえ向きなんですけどね。結局は根性と自分の技術力の問題なんでしょうかね。