This file contains some notes about the PLIP driver (plip.xif), the
protocol it uses and how to build a PLIP cable.

What is PLIP ?
--------------

PLIP is a non standard protocol to transfer IP packets over bidirectional
parallel (centronics) lines. It is similar to SLIP in that it uses the
same algorithm to encode/decode outgoing/incoming data.

It is probably incompatible with all other so called protocols, because
it is my invention :)

I did not use a more `standard' protocol, because the Atari centronics
port lacks ACKNOWLEDGE, PAPEROUT, SELECT, FORMFEED (and probably other)
signals, some of which are used by the other protocols.

If you want to use PLIP you will have to build a cable connector
yourself. Someone told me about a Turbo-Laplink connecter that should
be compatible with the cable described below, but I did no see one 'til
now.

PLIP's main advantage over SLIP is that parallel lines are usually much
faster than the standard (not highspeed) serial lines.
The throughput depends very much on the speed of the computers you use,
because handshaking is done in software and can be expected to be at
least 15 kB/sec for two slow 8MHz ST's connected via PLIP.

Because it is much cheaper then ethernet cards, I could also think of
building tiny networks (3-4 hosts) using PLIP. When using more than 2
machines, some of them must have two or more parallel ports (and act
as gateways).

PLIP cable
----------

To build a PLIP cable, you need two male DB-25 connectors and some metres
of >= 11 conductor cable.

Note that the cable should not be longer than about 10 metres, because
the parallel port uses standard TTL signals.

The wiring is:

	pin (one end)	pin (other end)
	1  (STROBE)	11 (BUSY)
	2  (D0)		2  (D0)
	3  (D1)		3  (D1)
	4  (D2)		4  (D2)
	5  (D3)		5  (D3)
	6  (D4)		6  (D4)
	7  (D5)		7  (D5)
	8  (D6)		8  (D6)
	9  (D7)		9  (D7)
	11 (BUSY)	1  (STROBE)
	25 (GROUND)	25 (GROUND)

Pins 18-24 are extra grounds.

Build one yourself and have some fun.
You can buy the necessary incredients in computer stores for a few bucks.

Nonstandard PLIP protocol
-------------------------

For the ones interested in the protocol, here we go:

The data is encoded using the SLIP protocol, which defines the following
special characters:

END = 192 (decimal)
ESC = 219 (decimal)
ESC_ESC = 221 (decimal)
ESC_END = 220 (decimal)

Every character `c' of the IP packet is sent using the following algorithm:

if c == END then send ESC followed by ESC_END
else if c == ESC then send ESC followed by ESC_ESC
else send c

After all bytes have been sent this way, a single END character is sent to
indicate the end of the packet. Optionally the sender may send an END cha-
racter at the beginning of each packet. The PLIP receiver will drop the
resulting zero length packet.

Every byte is sent over the parallel line in the following way (note that
one ends STROBE is connected with the other ends BUSY):

sender:			receiver:

DATA OUT		WAIT ACK
SEND ACK		DATA IN
WAIT ACK		SEND ACK

The shortcuts have the following meaning:
DATA OUT/IN	--	write/read the byte to/from the port
SEND ACK	--	send an acknowledge (ie drop the STROBE wire for
			some micro seconds).
WAIT ACK	--	wait until an acknowledge is received (BUSY has
			dropped for some micro seconds).

Note that an interrupt is generated when the BUSY wire drops. Thus the
first byte sent will trigger the BUSY interrupt on the remote side, ie
transmission of packets is interrupt driven (no polling).

After this first interrupt the receiver disables the BUSY interrupt and
receives the whole packet polling the BUSY wire. Note that this is done
at low interrupt priority so that other interrupts can still be handled.

Waiting for acknowledgements is implemented using an adaptive timeout
mechanism.

Note that the SLIP encoding makes sure that the receiver/sender may get
in sync with the sender/receiver again after one end has timed out.

Also note that the character transmission protocoll used will let one
end time out if both ends try to send at the same time, ie collisions
can be detected.

Establishing a PLIP connection
------------------------------

This is essentially the same as establishing a SLIP connection. Read the
file README.OSLIP. The PLIP interfaces are called pl0, pl1, ...
Currently only pl0 is implemented (corresponds to the standard Atari
centronics port).


Happy PLIP'ing -- Kay.
