The ports are used in a way compatible with the Gemini implementation of
the Centronics interface, as follows:–
Port A is used in control mode.
Bit 0 is an output signal from the GIPB and is high when Busy and low
when able to accept data.
Bit 1 is an input to the GIPB and is a strobe which goes low for a short
time when data has been sent to port B.
Port B is used in control mode, as the GIPB input port. Bit 7 of the
input data is ignored, and the output to the printer has even parity added to
follow the normal standards.
Operation of the system is completely automatic, and all data received is
printed as soon as possible. The program uses a circular buffer and
compresses consecutive spaces to save memory. Up to 128 consecutive spaces
can be held in one byte. Most listings contain many spaces, so the buffer
will often be able to hold well over 100K in the 60K available. If the buffer
becomes full the Busy line remains high so that no data can be lost.
If a keyboard is attached the following single character commands are
Space Halt the printer, or if halted start printing again. This does not
affect the input of data to the buffer.
D Delete the contents of the buffer and restart the program.
T Delete the contents of the buffer and restart the program with a
minimal buffer of only two bytes.
CR Output CR/LF to the console device (normally the printer).
M Output a status message to the console device. This shows the
number of characters waiting to be printed, the number of bytes
spare in the buffer, and whether or not the printer has been halted.
N End the program and pass control to RP/M. RP/M operates as normal
and can boot a disk system but does not have any cassette handling
routines. The command G F000 will execute the program from RP/M.
! Halt the processor.
The GIPB operates on an interrupt driven basis, with an interrupt being
generated when the input strobe goes high rather than low. It was necessary
to do it this way because some host software does not initialise the ports
correctly so that the first character is lost following a Reset. This method
overcomes this problem and should not cause any problems. Some host software
will send a null during initialisation. This is sent to the printer which is
likely to ignore it.
The GIPB catches all characters transmitted by enabling interrupts and
then setting the Busy line to 0. After about 8 instructions the Busy line is
set back to 1. This should give the host machine plenty of time to notice
that the line is not Busy, and decide to output the data. The GIPB waits for