The Digital Equipment Corporation PDP-8Console Teletype Instructions
Part of
the PDP-8 Programmer's Reference Manual
|
This document describes the console teletype interface of early PDP-8 models, the KL8E (M865 and M8650) asynchronous interface, and the KL8JA (M8655) asynchronous interface. The console terminal and asynchronous line interfaces on the VT78 were upward compatable from the interface described here. The LC8E (M8329) parallel DECwriter interface is also compatable.
Note: Most of these registers are accessed via the accumulator; such registers are illustrated as their contents appears when loaded in the accumulator.
00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | | | | | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | | | |ER PE FE OE| Keyboard Buffer | | Status | |The keyboard buffer register holds the character most recently read from the asynchronous input channel. While a character is being read, the contents of this register are unpredictable.
The status field is only supported by the KL8JA (M8655) asynchronous interface, and then, only if the SWD jumper is present and if the device control register is set to enable status reporting. The status bits are:
00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | | | | | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | | | | Ignored | Keyboard Buffer |The teleprinter buffer register holds the character that is to be output to the asynchronous interface. Modifying this register while it is being used to generate output may produce unpredictable results, but on early models of the asynchronous interfaces (prior to the M8655), repeatedly writing zero to this register was an effective way to emulate the pressing of the break key on a teletype.
00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | | | | | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | | | | ignored |SE IE|This register is not present in PDP-8 console interfaces prior to the PDP-8/E and the KL8E (M865 and M8650) only supports the IE bit, while the KL8JA (M8655) supported both bits.
00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 0| | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | | | | | IOT | Device | Op |The console teletype is usually connected as devices 03 and 04, however, the KL8/E (M8650) interface common on the PDP-8/E and later models could be jumpered to support any two device codes. The following table lists the most commonly used device codes for serial interfaces:
| input | output | | xx | yy | ---------------|--------|--------| Console TTY | 03 | 04 | Second TTY | 40 | 41 | Serial printer | 65 | 66 | ---------------|--------|--------| VT78 serial #1 | 30 | 31 | VT78 serial #2 | 32 | 33 | ---------------|--------|--------| DECmate printer| 32 | 33 |By convention, no matter what device codes are used, the input device code x is always one less than the output device code y. The serial printer port at address 66 is a special case; 66 is the address commonly used for the parallel printer interface, and by a combination of luck and crafty design, the commonly used coding conventions for output to a parallel printer happen to work for a serial interface.
KCF
The keyboard flag, signalling input data ready, is cleared. This operation is not supported by the console interfaces on PDP-8 models prior to the PDP-8/E, and thus should be avoided in portable code.
KSF
If the keyboard flag is set, indicating that input data is ready, the next instruction in sequence is skipped. All PDP-8 console interfaces support this operation.
On the DECmates, this operaton resets the flag, and the flag cannot be set again until the character has been read out of the keyboard buffer. This is a source of some compatability problems!
KCC
The keyboard flag is reset, the accumulator is cleared, and the process of reading the next character of input is initiated (in those cases where the interface is connected to a paper-tape reader). All PDP-8 console interfaces support this operation.
KRS
The 8-bit character in the keyboard buffer is ored with the accumulator. All PDP-8 console interfaces support this operation.
KIE
The accumulator is loaded into the device control register (the interrupt enable and status report control bits). This operation is not supported by the console interfaces on PDP-8 models prior to the PDP-8/E, and thus should be avoided in portable code.
KRB
The 8 bit character in the keyboard buffer is transferred to the accumulator,
and the keyboard flag is cleared, allowing the reading of the next character
to begin. In effect, this operation combines the KCC
and
KRS
operations; in early PDP-8 models, this was implemented as
a microcoded combination of these operations.
All PDP-8 console interfaces support this operation.
TFL
The printer flag, signalling output complete, is set. This operation is not supported by the console interfaces on PDP-8 models prior to the PDP-8/E, and thus should be avoided in portable code.
TSF
If the printer flag is set, indicating output is complete, the next instruction in sequence is skipped. All PDP-8 console interfaces support this operation.
TCF
The printer flag is reset. All PDP-8 console interfaces support this operation.
TPC
The least significant 8-bits of the accumulator is copied to the print buffer, initiating output. All PDP-8 console interfaces support this operation.
TSK
If either the print flag or the keyboard flag are set, the next instruction in sequence is skipped. This operation is not supported by the console interfaces on PDP-8 models prior to the PDP-8/E, and thus should be avoided in portable code.
TLS
The least significant 8 bits of the accumulator are copied to the print buffer,
initiating output, and the printer flag is reset.
In effect, this operation combines the TCF
and
TPC
operations; in early PDP-8 models, this was implemented as
a microcoded combination of these operations.
All PDP-8 console interfaces support this operation.
KSF= 6031 / Keyboard Skip if Flag KCC= 6032 / Keyboard Clear and read Character KRS= 6034 / Keyboard Read Static KRB= 6036 / Keyboard Read and Begin next read TSF= 6041 / Teleprinter Skip if Flag TCF= 6042 / Teleprinter Clear Flag TPC= 6044 / Teleprinter Print Character TLS= 6046 / Teleprinter Load and Start
One problem with the design of the TTY interface is that the teleprinter flag, like all device flags, is cleared on reset and powerup, but for many purposes, it would be better to have this flag set, indicating that, at startup time, the teleprinter buffer register is ready to receive one character of output. The traditional startup code accomplishes this by outputting a null:
/ initialize the teletype for output CLA TLS / output nullOn the PDP-8/E and more recent machines, the need to output a character as part of the startup sequence was eliminated by the introduction of the TFL instruction. This can be substituted for the above in code intended only for use only on the PDP-8/E and later machines.
Given this initialization, the following two subroutines (or variations on them) are commonly used in most PDP-8 programs for polled console input-output:
TTYIN, .-. /Read from TTY / returns character in ac TTYILP, KSF / await input ready JMP TTYILP KRB / read character JMP I TTYIN TTYOUT, .-. /Write to TTY / given character in ac TTYOLP, TSF / await input ready JMP TTYOLP TLS / write character JMP I TTYOUTWhen writing programs to support multiple I/O ports, the following alternative definitions for devcde I/O instructions and device addresses are appropriate:
KSF= 6001 / Keyboard Skip if Flag KCC= 6002 / Keyboard Clear and read Character KRS= 6004 / Keyboard Read Static KRB= 6006 / Keyboard Read and Begin next read TSF= 6011 / Teleprinter Skip if Flag TCF= 6012 / Teleprinter Clear Flag TPC= 6014 / Teleprinter Print Character TLS= 6016 / Teleprinter Load and Start TTY= 0030 / the console TTY LPR= 0650 / the printer portThese definitions allow coding an operation for a particular device as, for example, KSF+TTY to check the console TTY keyboard input flag, and they allow use of reasonably clear self-modifying code for general-purpose I/O routines, as is illustrated in the following variation on the teletype output routine previously given:
TTYOUT, .-. /Write to TTY / given character in ac / device address inline DCA TMP / set aside the character TAD I TTYOUT / get the device address TAD (TSF) / fix a TSF instruction DCA TTYOLP / plant it in the code TAD I TTYOUT / get the device address TAD (TLS) / fix a TLS instruction DCA TTYTLS / plant it in the code ISZ TTYOUT / advance over param TTYOLP, TSF / await input ready JMP TTYOLP TAD TMP / recover character TTYTLS, TLS / and write it out JMP I TTYOUT