あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先
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) 送信側だったビットがクリアされました。