58217f5900
WOO HOO!
113 lines
3.9 KiB
Text
113 lines
3.9 KiB
Text
\title{PLIP: The Parallel Line Internet Protocol Device}
|
|
|
|
\author{ Donald Becker (becker@super.org)}
|
|
\affiliation{I.D.A. Supercomputing Research Center, Bowie MD 20715}
|
|
|
|
%% At some point T. Thorn will probably contribute text,
|
|
%% \author{ Tommy Thorn (tthorn@daimi.aau.dk)}
|
|
|
|
\section{PLIP Introduction}
|
|
This document describes the parallel port packet pusher for Net/LGX.
|
|
This device interface allows a point-to-point connection between two
|
|
parallel ports to appear as a IP network interface.
|
|
|
|
\chapter{PLIP hardware interconnection}
|
|
PLIP uses several different data transfer methods. The first (and the
|
|
only one implemented in the early version of the code) uses a standard
|
|
printer "null" cable to transfers data four bits at a time using
|
|
data bit outputs connected to status bit inputs.
|
|
|
|
The second data transfer method relies on both machines having
|
|
bi-directional parallel ports, rather than output-only ``printer''
|
|
ports. This allows byte-wide transfers and avoids reconstructing
|
|
nibbles into bytes, leading to much faster transfers.
|
|
|
|
\section{Parallel Transfer Mode 0 Cable}
|
|
The cable for the first transfer mode is a standard
|
|
printer "null" cable which transfers data four bits at a time using
|
|
data bit outputs of the first port (machine T) connected to the
|
|
status bit inputs of the second port (machine R). There are five
|
|
status inputs, and they are used as four data inputs and a clock (data
|
|
strobe) input, arranged so that the data input bits appear as contiguous
|
|
bits with standard status register implementation.
|
|
|
|
A cable that implements this protocol is available commercially as a
|
|
"Null Printer" or "Turbo Laplink" cable. It can be constructed with
|
|
two DB-25 male connectors symmetrically connected as follows:
|
|
|
|
STROBE output 1*
|
|
D0->ERROR 2 - 15 15 - 2
|
|
D1->SLCT 3 - 13 13 - 3
|
|
D2->PAPOUT 4 - 12 12 - 4
|
|
D3->ACK 5 - 10 10 - 5
|
|
D4->BUSY 6 - 11 11 - 6
|
|
D5,D6,D7 are 7*, 8*, 9*
|
|
AUTOFD output 14*
|
|
INIT output 16*
|
|
SLCTIN 17 - 17
|
|
extra grounds are 18*,19*,20*,21*,22*,23*,24*
|
|
GROUND 25 - 25
|
|
* Do not connect these pins on either end
|
|
|
|
If the cable you are using has a metallic shield it should be
|
|
connected to the metallic DB-25 shell at one end only.
|
|
|
|
\section{Parallel Transfer Mode 1}
|
|
The second data transfer method relies on both machines having
|
|
bi-directional parallel ports, rather than output-only ``printer''
|
|
ports. This allows byte-wide transfers, and avoids reconstructing
|
|
nibbles into bytes. This cable should not be used on unidirectional
|
|
``printer'' (as opposed to ``parallel'') ports or when the machine
|
|
isn't configured for PLIP, as it will result in output driver
|
|
conflicts and the (unlikely) possibility of damage.
|
|
|
|
The cable for this tranfer mode should be constructed as follows:
|
|
|
|
STROBE->BUSY 1 - 11
|
|
D0->D0 2 - 2
|
|
D1->D1 3 - 3
|
|
D2->D2 4 - 4
|
|
D3->D3 5 - 5
|
|
D4->D4 6 - 6
|
|
D5->D5 7 - 7
|
|
D6->D6 8 - 8
|
|
D7->D7 9 - 9
|
|
INIT -> ACK 16 - 10
|
|
AUTOFD->PAPOUT 14 - 12
|
|
SLCT->SLCTIN 13 - 17
|
|
GND->ERROR 18 - 15
|
|
extra grounds are 19*,20*,21*,22*,23*,24*
|
|
GROUND 25 - 25
|
|
* Do not connect these pins on either end
|
|
|
|
Once again, if the cable you are using has a metallic shield it should
|
|
be connected to the metallic DB-25 shell at one end only.
|
|
|
|
\section{PLIP Mode 0 tranfer protocol}
|
|
The PLIP driver is compatible with the "Crynwr" parallel port transfer
|
|
standard in Mode 0. That standard specifies the following protocol:
|
|
|
|
send header nibble '8'
|
|
count-low octet
|
|
count-high octet
|
|
... data octets
|
|
checksum octet
|
|
|
|
Each octet is sent as
|
|
<wait for rx. '1'> <send 0x10+(octet&0x0F)>
|
|
<wait for rx. '0'> <send 0x00+((octet>>4)&0x0F)>
|
|
|
|
To start a transfer the transmitting machine outputs a nibble 0x08.
|
|
The raises the ACK line, triggering an interrupt in the receiving
|
|
machine. The receiving machine disables
|
|
|
|
Restated:
|
|
|
|
(OUT is bit 0-4, OUT.j is bit j from OUT. IN likewise)
|
|
Send_Byte:
|
|
OUT := low nibble, OUT.4 := 1
|
|
WAIT FOR IN.4 = 1
|
|
OUT := high nibble, OUT.4 := 0
|
|
WAIT FOR IN.4 = 0
|
|
|
|
|