シンプルLAN(LA-8シリーズ)

Tweet

 X1-CAIとしてマイコンクラスルームCAI-IIにX1turboが採用された時、教師および生徒の端末を相互に接続するネットワークが必要になりました(厳密にはネットワークで結ばれることも構想したCAIシステムの重要な要素)。この時、既存のネットワークI/Fをいろいろ検討したのですが価格的・機能的にちょうど良いものが見つからず、それなら自分たちで作ってしまおうということになりました。それが「シンプルLAN」です。

 X1-CAIは手作りではなくメーカー(シャープエンジニアリング株式会社、シャープシステムプロダクト株式会社)による市販製品となったので、このシンプルLANボードも量産を前提としたプリント基板となっています。

 X1turbo用のボードは所有していないので、カタログからの引用を…。

 プリント基板の知識をお持ちの方には違和感がありましょうが、それについての種明かしは後ほど。

 カタログによれば、だいたいこんなスペックのようです。

 ホストたるX1turboはZ80/4MHz、その性能では明らかに扱えない57600bpsという通信速度…ということで、ボード上にマイコンを搭載してホストの負荷にならないようにしています。使用されているのはシャープのLH0881…ザイログのZ8、セカンドソース元の型番はZ8681ですね。これを8MHzで駆動させているものと思われます。

 Z8681はROMレス版なので、EPROMが載っているわけですね。ROMとCPUの間にあるのがTMM2015AP、つまり2KBのSRAMです。バッファ数の大きさと符合しますので、外付けになっているRAMはバッファ用ということになりますね。スタックやワークメモリはCPUに内蔵するレジスタファイルで賄えるというのがZ8の特徴になります。

 ブラケットのところに見えているコネクタはFコネクタです。ここに5C-2V同軸ケーブルを接続します。5C-2Vって要は75Ωのアンテナケーブルなので、安上がりなんですよね。ネットワークはバス型なのですが、10BASE-2のようにT字型のコネクタを使うのではなく、2つのコネクタを使って数珠つなぎにしていきます。

 カタログにはソフトのことにも触れていて、

としています。CAIだけじゃなくFAなんかにも使えると謳っているので、オリジナルなソフトに組み込むための方法を提供しているということなんでしょう。

 しかしIPLはちょっと気になりますね…いわゆるネットワークブートできるという話ですもんね…。

 そして驚くなかれ…なんとカタログには「X1シリーズ・MZシリーズ共用可能」と謳われ、適用機種にもX1シリーズ全機種とMZシリーズとしてMZ-1500/2000/2200/80Bが挙げられています。共用というのは、ネットワークにX1とMZが同時につながるという話ではなくて(もちろんこれ自体は問題なく可能ですが)、このボード自体がX1にもMZにも使えるという意味なのです。X1用とMZ用で若干違うが大部分は同じというのは漢字ROMボードなど他にもありましたが、全く同じなんてこれまで見たことありません。

 カタログに掲載されている写真はX1用で、端に付いている板を二点鎖線のミシン目から切り離せばMZ用の基板の幅になるというわけです。とするならば、実はこんなボードを所有してまして…。

 全く何者かわからないまま昔ヤフオクでゲットしたものだったのですが、その後ボウリング場から出たと思しきMZ(コンピュータボウリングにてレーンの制御用に使われていたらしい)に同じボードが入っていることが確認され、もしかしたらCAIと関係してるかもと薄々考える中でシンプルLANのカタログを発見したというわけです。

 部品配置はわりと変わってますが、構成要素としてはほぼ同じみたいですね。

 あああ…基板の外縁部に、ミシン目から切って削って整えた痕跡が見えますね…。数も合いますし、これは間違いなくあのシンプルLANをMZ用に調整したものですね。

 そういえば、ブラケットを固定しているネジのすぐ横に穴があるんですが…手元のボードはカタログ写真で留めている穴とは違う方にネジがありますね。そうか、基板寸法が違うからブラケットの位置もずらさないといけないんですね。そういう部分も配慮されているということですか。

 使われている部品のデートコードからすると1990年3月以降の製造と思われますが、その頃にはX1-CAIの出荷はなかったのではないかと考えられます。そうなるとX1と共用できるデザインである意味はもうないんですが…設計変更のコストか、あるいは保守を考慮してか…。

 それはともかく、ブツが手元にあるなら回路図を描いてみるしかあるまいて(クリックで元のサイズになります)。以下、用語や機能名は便宜上のもので、実際の呼ばれ方とは異なると思われますのでご注意。

 まず注目するところはアドレスのデコードですね。元々X1turboで使ったボードなのでバスコネクタのパーツもX1turbo用を使用しましたが(案外知られてないのですがX1の拡張バス信号配列はMZのものからの流用です)…/EXIO以外はMZと共通の信号しか使われていません。その/EXIOはジャンパJ6によってデコーダに接続されるか切り離されてGNDが代わりに使われるか選択できるようになっています。

 アドレスの設定はDIP SWのSW1で行うようですが4ビット分しかありません。それとLS688で比較しているのはA7~4で、A11~8がジャンパを介してつながっていますが何か変ですね…A側は全部GNDに落ちてますからここは0000ですが、ジャンパがバイパスされて意味がなくなっています。実際J2からJ5は実装されてないのでA11~8はデコードに使われている形です。先ほどのJ6はB側がショートされてますから、x00xh~x0FxhがI/Oアドレスになります。これがMZ用として使われていたのですから、MZでも16ビットアドレスでアクセスする必要があるということになりますね。

 入手したボードではx08xhに設定されていました。X1-CAI-EXECUTORのROMでも解析したところ008xhをアクセスしていることがわかりましたので、標準的には008xh(x08xh)で使われていることになっていたんでしょう。

 アドレスデコード部の少し下にあるのはリセットと8255です。接続の仕方からして8255はモード2で初期設定されることになります。モード2とは、ポートAを8ビット双方向のデータポートとし、ポートCのうちPC7が/OBF(Output Buffer Full、出力用データがセットされている)、PC6が/ACK(Ackknowledge Input、出力データを受け取ったことを知らせる)、PC5がIBF(Input Buffer Full、入力データがセットされておりホストがまだ読み出していない)、PC4が/STB(Strobe Input、入力データを外部からセットする信号)としてハンドシェイクしながらデータを入出力できるモードです。

 そして右上の方にあるのがZ8。カタログでは8MHzでしたがこの基板では11.0592MHzという水晶が使われています。Z8自体は12MHz品を使っていますがこういう中途半端な発振周波数なのはシリアルなどの速度設定に影響するからわざわざ選んでいるということなのでしょう。

 ROMレス版ということで左半分がアドレス・データバス(時分割による共用)、右半分がGPIOその他ですね。P2ポートにつながっているDIP SW(SW2)が端末番の設定、P3ポートがSIOと8255とのハンドシェイクを行う信号、そしてホストへの割り込み制御用ということになります。

 Z8のすぐ右下にあるOPアンプじゃなくてコンパレータやトランジスタの回路がI/F部分になります。まぁ正直よくわからない…というか外部端子は入出力共通なので何か出力したらそのまま入力に入ってきちゃいますね。それはまぁそういうものなのか。

 なおZ8のSIOはZ80SIOのようにHDLC(SDLC)とか同期モードとか複雑な機能は何もなくて、単純なUARTを入出力するだけのものになっています。ということはこのシンプルLANの伝送信号もごく普通のシリアル信号だということになりますね。カタログにCSMA/CDとか書いてあったのはいったい…?

 さらに下にはROMとRAM。カタログでは2KBとされていたRAMが8KBに増量されています。あと何やらジャンパがいくつかまとわりついているのですが…いろいろな仕様のROM/RAMが使えるようにして部品調達に余裕を持たせてるんでしょうね。

 そしてさらにその下はホストへの割り込み回路。モード2対応なので、割り込みベクタをセットできるようになっています。Z8からは割り込みベクタをセットすると割り込み出力も同時に行われるという仕組みですね。まぁモード0でも同じ動きだしモード1はアクノリッジサイクルがないというだけですから、モード2以外の使い方でも問題ないのですけど。

 回路図から読み取ったところでは、ホスト側のI/Oマップはこうなるようです。

オフセット R/W 機能
+0 R/W 8255 ポートA
+1 ポートB
+2 ポートC
+3 コントロール
+4 W リセット
+12 W 割り込みクリア

 リセットと割り込みクリアで書き込む値は何でもOKです。
 割り込みクリアというのは、ボードとしてはモード2割り込みに対応しますがRETI命令による割り込み状態解除には対応しないので、マニュアルで代わりに行うためにあるポートです。割り込みハンドラにて処理終了時にアクセスすることで次回の割り込みを発生可能にします。CZ-8RSなんかと同様の仕組みですね。割り込み対応だけにZ80周辺LSIを使うのももったいないですし、ランダムロジックで組めますが小さくないので…。

 解析のついでというわけでもないですが、Z8側の情報など。まずは外部メモリマップ。

アドレス R/W 機能 データ
0000~1FFFh R 外部ROM プログラム
2000~3FFFh R/W 外部RAM 送受信バッファ
0A000~0BFFFh W ダミーバッファ
0C000~0D000h W 割り込み発生 割り込みベクタ
0E000~0FFFFh R/W ホストとの送受信 データ

 ただしそれぞれの領域全てを使用しているわけではありません。ROMは全部で1KBちょっとしか使われていませんし、RAMは27FFhまでしか利用していません。割り込み発生とホストとの通信は先頭の0C000hと0E000hしかアクセスしていませんし、ダミーバッファに至っては何もありません(受信データが保存できない/その必要がない時の「保存したフリ」用)。

 次はいわゆるGPIOの使い方。

ポート I/O 用途
P0 I/O AD7~0
P1 O A15~8
P2 I DIP SW
P3 P30 I SIO(Rx)
P31 I IBF
P32 I /OBF
P33 I IEI
P34 O /MD
P35 O IEO
P36 O 未使用
P37 O SIO(Tx)

 P33とP35にIEIとIEOがあるのがホストへの割り込み制御信号です。またP31とP32は8255を介したハンドシェイク通信で使用する信号ですね。

 P34の/MDはデータメモリアクセス時にアクティブとなる信号ですが、データメモリのためのRAMはありませんから意味もありませんね。回路も初期設定もお手本通りにしただけということでしょうか。

 そしてホストからボードに与えるコマンドについて。

コマンド 内容 長さ フォーマット(W) 長さ フォーマット(R)
S 送信 可変 53h dst num data data … data 0
C 送信状態取込み 1 43h 1 status
R 受信データ取込み 1 52h 可変 flg src num data data … data
I 端末番号取込み 1 49h 1 ID
V 割り込み制御 2 56h vector 0
B 伝送速度設定 2 42h speed 0
D メモリダンプ 2 44h upper 256 data data … data
W メモリライト 258 57h upper data data … data 0
X ワーキングレジスタ取込み 2 58h index 1 value

 カタログにはSからBまで書かれています。D,W,Xは隠しコマンドというか、デバッグ用みたいですね。

 Bコマンドは速度の値を直接送るのではなくて、対応する番号を送ります。次の値が受け付けられます。

番号 伝送速度(bps)
0 57600
1 19200
2 9600
3 4800
4 2400
5 1200
6 600

 カタログでは300bpsまでの値がありましたが、なくなったみたいですね。なおリセット後は57600bpsで初期化されています。

 Vコマンドは割り込みベクタを与えるだけでなく、割り込み許可制御も兼ねています。ここでいう割り込みとはホストへの受信割り込みを指しており、0FFhを指定すると割り込みを発生しなくなります(モード0割り込みにてRST 38Hを使用することはできないのか)。

 割り込みが許可されている場合、割り込みハンドラでは受信したデータを引き取ることになります。逆に割り込み禁止の状態では受信がホストに知らされませんので、定期的にRコマンドを実行してデータを引き取ります。Z8側ではどちらも同じルーチンが実行されますので、ホスト側も同様の処理を行うことになります。
 なおRコマンドはデータが受信されていない状態で実行されることもあり得ます。その場合先頭のバイトが0FFhになって引き取られていないデータがないことを示します。受信データは7つまで保留できて、それ以上はそれまでの受信データを引き取らないと受信不能になります(バッファフル)。手元のボードはカタログとは違いRAMの容量が8KBに増えていたのですが、使い方は2KB時代と同じだったので、性能向上目的での採用というわけではなかったようです。

 Sコマンドが送信です。コマンド自体は送信データをセットする機能であり、実際の送信はバスが空いていれば直ちに送信されますが他の端末が通信中だと待たされます。空き次第自動的に送信されますのでホストが何かする必要はありません。

 バスを流れる、パケットの基本的なフォーマットはこのようになっています。

宛先 送信元 種別 長さ データ データ データ データ チェックサム

 宛先とはそれぞれの端末のボード上で設定されている端末番号で、0FFhを使用すると接続されている全端末に対して送信できます。

 チェックサムとは宛先からチェックサムの直前までのバイトを全て加算して(桁あふれは捨て)、その結果をビット反転して1加えたもの…つまり2の補数ということになります。

 種別とはパケットの種類を表します。次の3種類が使われています。

 ビットで定義されているような気がします。bit0がACK、bit1がバッファフルでしょうかね。

 ホストとしての操作はSコマンドで送信してRコマンドまたは割り込みで受信して…となりますが、バス上のプロトコルとしてはデータ送信に対して受信側がACKを返すというルールになっています。このルールはボードが自動的に実行してくれます。もし7つの受信バッファが全て読み出しされずに保持したままの時は、ACKではなくバッファフルのパケットが返送されます。なおブロードキャスト送信の場合はACK返送はありません。

 ただこのデータ送信─ACK返送のやり取りを自動でやってはくれても、受信の有無やACK確認までやってくれるわけではありません。これを確認するのがCコマンドで、返される1バイトの下位4ビットがACKパケットの種別バイトの内容、上位4ビットが送信中フラグ(リトライ回数を示していて完了したら0になる)を示しています。00hが返ってきたら送信完了、01hならACKパケット受信という具合ですね。

 なお送信のリトライとはデータ送信にハード的なエラーがあった場合のリトライのことで、最大4回(最初と合わせて5回まで送信される)行われます。これはバスが送受信を兼ねてる関係で送信すると直ちにそのバイトを受信する構造になっていて、送ったものが正しく読み取れればOKというチェックを1バイト毎に行っており、ここでエラーになるとリトライということにしているという意味です。このカウンタは送信完了でゼロとなり、Sコマンド実行で1がセットされます。

 チェックサムでエラーになった場合はACKが返送されません(NACKは定義されていない)。つまり受信側の事情による再送信はアプリケーションで対応する必要があるわけですね。

 DコマンドはZ8のメモリ空間(ROMおよびRAM)から指定の256バイトを読み出すもので、アドレスの上位バイトをパラメータとして与えます。またWコマンドは逆に指定のアドレスに256バイトの任意のデータを書き込みます。簡易なコマンドなので、256バイト単位での読み書きのみサポートします。

 Xコマンドはレジスタファイルのうち通常使用しているレジスタポインタをベースとする16個のうち指定の一つを読み出すものです。メインルーチンではレジスタポインタには10hが入っていますので、10~1Fhのレジスタから読み出せることになります。さすがにプログラムの詳細を理解していないとどれが何を意味しているのかわかりませんけど…。


MZで使われたネットワーク

 現在、コンピュータはネットワークにつながってなんぼと言われる時代ですが、シンプルLANに限らずパソコンをネットワークで有機的につなげたいという需要は昔からありました。この際、ついでですので8ビット時代のMZで実際に使われていたネットワークについてご紹介しましょう。

●MZ-80オンラインシステム (シャープ中部サービスセンター)

 シャープが発行していた広報誌「アルゴニュース」No.13(1981年4月20日発行)にて紹介されていました。シャープ○○サービスセンターというのは元々故障箇所を修理するサービスマンを抱える会社でしたが、MZ-80K発売にあたって営業活動を担うことになり、さらにシステム開発を手掛けるまで成長を遂げていました。

 そのシャープ中部サービスセンターが開発し岐阜県情報処理教育センター(岐阜市、後に岐阜県教育総合センターに統合)に設置されたのがこのMZ-80オンラインシステムです。次のような特徴があります。

 接続例の図がありました。

 システムとしては親機1台に対して子機がぶら下がるスター型構成なのですが、この図を見ると全端末が数珠つなぎになっています。I/F間を接続しているケーブルは34Pとありますがつまりはフラットケーブルですね。本数がありますからパラレル信号として接続されていると推測します。

 情報処理教育センターでのオンラインシステム稼働中らしき写真も掲載されていました。机と机の間をフラットケーブルが橋渡ししていますね…。

 伝送容量の大きなケーブルとしては確かにフラットケーブルが手軽ではあるのですが、人間が当たっちゃいそうで怖くもあります。

 システムは親機が子機を支配しているという使い勝手で、プログラムやデータの転送を指示するのは親機のみ、子機は親機からの転送操作を無条件で受け入れるという格好になっている模様です。おそらくこういう教室で先生が親機を使い生徒が子機を使うという運用を想定して開発されたのでしょう。研究室や工場でマイコンが複数で利用される場所で使えるとのことらしいのですが、この仕組みだと複数のロガーからデータを収集するという使い方になりそうに思います。

●光ファイバ通信システム (シャープ近畿エンジニアリング)

 1982年6月に大阪で行われたMZフェア'82で紹介されていました。シャープ○○エンジニアリングというのはそれまでのシャープ○○サービスセンターという会社が組織変更したもので、詳細は未確認ですが修理やサプライ品販売などのサービス業務をシャープ○○システムサービスに移管し、培ってきたシステム開発を推し進める会社です。組織変更は4月なので、6月はまだ移行期間にあたっていたと思われます。

 この光ファイバ通信システムは、RS232Cやデジタル信号をメタル線から光ファイバーに変換してMZ-80Bと各種機器の接続を行おうというもので、正確にはネットワークというようなものではありません。ただ光モデムを介したMZどうしの通信や、光分岐器を使って1対多通信を行えるという点についてはネットワークの片鱗が伺えると捉えられなくもないと思います。

 なおシャープ近畿エンジニアリングはシステムの提案を行う立場で、主たる機材は住友電気工業の製品だと思われます(カタログに「協力」として明記されている)。

 邪道と知りつつ敢えてこれをここで紹介するのは、そのMZフェア'82での個人的な体験があるからです。会場にはこのシステムで結ばれた2台のMZ-80Bを並べてあるブースがあって、そこではファンクションキーを押すとプログラムの一覧が隣の80Bから転送されてきて、カーソルを移動してCRを押すとそのプログラムが隣から転送されてくるというデモがあったのです。

 プログラムといってもだいたいはハドソンのゲームだったりして、中学生だった私は次々とプログラムを選んでは遊ぶということしかしていませんでしたし、そのデモもスタンドアロンでFDを接続したようなものと何ら変わりなかったものではあったんですが…プログラムの呼び出しというのは記憶メディアに対してするものだというイメージがありましたから、コンピュータからコンピュータにデータが転送されてくるというものはまだ知識の浅い子供にはかなり強烈な印象を与えたのでした。

 数年後、ふとしたことからネットワークに対する興味が生まれ「16bit以上のシステムがいろいろできるのは当たり前、8bitシステムでも挑戦するから面白い」といろいろ模索するようになったのですが、それもこのシステムのことが記憶にあったからなんだと思います。

●MicroNET (マイクロ・エンジニアリング)

 Oh!MZ誌1983年1月号の記事「入門ローカル・ネットワーク」にて紹介されました。記事としてはLANの基礎知識を解説し、次いでEthernetを紹介するのでMZをEthernetに接続するってことか! と思ったらそうではなく、MZ-80Bをループ状のネットワークに接続するという話でした。

 記事を執筆もしているマイクロ・エンジニアリングは今探しても痕跡すら見つかりません。記事には問い合わせ先の電話番号もあるのですが、それで検索しても誰も使っていないらしい情報が出てくるのみです。MicroNETというネットワークI/Fも全くヒットしませんので、マイクロ・エンジニアリングのオリジナル製品だったのではないでしょうか。

 MicroNETの特徴は次のとおり。

 MicroNETの全体構成はこんな感じになります。

 ネットワーク本体はループ構成になっていて、ケーブル(ツイストペア線または光ファイバーケーブル)を数珠つなぎにしてあります。I/Fとして2本接続されるケーブルは入出力が明確に分かれていて、出力側に送り出したパケットが各ノードでリレーしながら一周して入力側に帰ってきたのを確認したら送信完了、というような使い方になります。

 ユーザー層のそれぞれのワークステーション(MZ-80B)に書いてあるシステムが異なっていますが、混在する各種システムから同じ使い方でファイルサーバーにアクセスできます。ネットワークブートも可能のようです。また記事執筆時点ではファイルサーバーもIPLを専用のものに交換したMZ-80Bで運用しているとのことでした。

 なおネットワークとしての管理端末のようなものはなく、全ノードが対等の関係にあるということのようです。上の図でサーバー層がバッチリ描かれていますが、データやプログラムの集積場所という以上の意味はないようです。

 通信用基板のブロック図を示します。

 6800を使用したインテリジェントボードになっていて、Z80とはPIOとPIAの結合を介したパラレルI/Fでデータの入出力を行います。もう一つのPIAは外部入出力や、二重系伝送路構成をとった時の迂回路用とのことです。

 これが通信用基板。妙に横長の基板ですが、実際に通常の拡張ボードの倍ちょっとの大きさになっていて、スロットには真ん中のレールを取り外した上で挿入します。バスコネクタも2つついてますね。

 ちょっと特殊な形状をしていますが、たまにあるのですこういうダブルサイズのボードが…。

 右寄りの40ピンパッケージのLSIが4つ並んでいるうちの一番下がZ80PIO、とするとすぐ上がPIA(6821)、上の端には未実装のコネクタ用パターンがある気がするので一番上もPIA、とすると上から2番目が6800でしょうか?

 真ん中のLSIのうち一番下がZ80CTCですかね。その上3つは同じに見えますのでPTM(6840)ですかね…とすると消去法でその左は一番上がACIA(6850)でその下が2KBのRAMが2つ?

 こちらが大容量ROM/RAM基板。綺麗に8個×5列で並んでいるIC群がありますので、これで64KB×5列のRAMで320KBでしょうね。一方ROMは4KB×8個で32KBですね。

 320KBのRAMというのはフロッピー1枚分というのを意識しているんでしょうね。せっかくならアイオーのPIO-3034と同じ仕様だったら良かったのにと思うのですが、どうだったんでしょう…なんならROMもPIO-3030と同じだったら…。

 記事での解説がI/F仕様に偏っているように見え、あまりアプリケーションレベルについての説明がないようです。機能としてはプログラム転送、データ転送、画面転送ができるようで、上記オンラインシステムとあまり変わらないようです。画面転送があるのはどういう意味なんでしょう? リモートデスクトップ的なことができるんでしょうか?

 こちらの記事では実際の導入例などもわからず、会議室風の部屋で構築されたシステムの写真はあるものの、どれだけのユーザーがいたのかちょっとわかりません。記事の時点ではまだ導入実績はなかったのかもしれませんね。

所蔵品一覧に戻る