PLIPのパケット転送方法
(2004.02.19)
随分前に、Amiga4000TとDOS/Vをネットワークで接続したかったのですけれど、当時はAmiga用のNICが高くて手が出ないもの
だったので、Interlink用ケーブルを使った接続プロトコル「PLIP」に挑戦しました。結果として接続ケーブルにIC1個の回路を
追加して(*1)、DOS/V(Linux)側は素のPLIPのままで、Amiga側のドライバを改造して、実用レベルで使っていました。
その後、AmigaのNICで手頃なXSurf2(クロス・サーフ2)を購入してPLIPをやめました。
部屋を整理していたら、当時PLIPを解析した結果のメモが見つかりましたので、ここに掲載します。
今時PLIPに興味がある人はいないと思いますが、出力のみのプリンタインターフェースでどうやって双方向(*2)のパケット転送を
実現したのか、先人達の苦労の跡をご覧ください。
DOS/Vのプリンタインターフェース制御について書籍で予習してから、ご覧いただくと、より楽しめます。
なお、例によって、ドライバのソースを読んで書き留めたものなので、内容について一切の保証をしません。
う〜ん、今時こんな解説を掲載するのは、世界で私だけかもしれません。なんちゃって。
*1:確かAmigaはackの割込みが違ってたので、割込み用の信号を作ってたと思う。
*2:PLIPは昔々の規格なので、後から出た双方向のインターフェース(IEEE 1284)を想定していません。
開始フェーズ
PLIPは、2台とも対等であり、送受信は決まっていません。
1台目 2台目
status data status data
10000--- 00000000 10000--- 00000000
10000--- 00001000
^
先にこのビットを立てた側が送信側になります。
11000--- --------
(ack)
ackを受けた側が受信側になります。
11000--- 00000001
^
それから送信側に返します。
10001--- 00001000
(error)
送信側のerrorビットで初めて送信側、受信側が確定します。
転送フェーズ
転送バイトの8ビットのパターンを「abcdefgh」とします。
転送順序は、パケットサイズの1バイト目、2バイト目、パケットデータ、チェックサムです。
以下の手順を1バイトずつ行ないます。
送信側 受信側
status data status data
10001--- 0000efgh
^^^^
下4ビットを送信します。
1efgh--- 00000001
(bit4-7)
10001--- 0001efgh
^
送信したことを伝えます。
0efgh--- 00000001
(~busy) ビット4-7は受信されました。
0efgh--- 00010001
^
受信したことを伝えます。
00001--- 0001efgh
(~busy)
受信したことがわかりました。
00001--- 0001abcd
^^^^
上4ビットを送信します。
0abcd--- 00010001
(bit0-3)
00001--- 0000abcd
^
送信したことを伝えます。
1abcd--- 00010001
(busy) ビット0-3は受信されました。
1abcd--- 00000001
^
受信したことを伝えます。
10001--- 0000abcd
受信したことがわかりました。
完了フェーズ
送信側 受信側
status data status data
10001--- 00000000
^^^^
データを0にします。
10000--- 00000001
10000--- 00000000
^
受信側だったビットをクリアします。
10000--- 00000000
(~error)
送信側だったビットがクリアされました。