.he DK-10 Programming Page .l 62 .comment harware memo 12 .paperw 62 .bspdir .ds .center DK-10 Programming .sp 1. Introduction .sp The Systems Concepts DK-10 terminal controller provides direct from memory output and buffered input of characters at program set speeds from a DEC PDP-10 system. The following memo describes the programming of the DK-10 and some aspects of its operation. .sp 2.1 Input .sp The DK-10 has provisions for setting the speed of each input line and for enabling and disabling each input line (see section 3.4). When a character is received on an enabled input line it is placed in a 16 slot first-in-first-out stack along with the line number on which it was received. A character received when this stack is full will be lost. As long as there is at least one character in the input stack, the input done flag will be on in the DK-10`s control register and it will request an interrupt if its PIA is non-zero. Character and line number pairs may be read in from the stack by doing a DATAI. The entire input stack can be cleared by doing a CONO to clear the input done flag. .sp 2.2 Output .sp The DK-10 performs character output directly from memory and handles enough bookkeeping that, for may applications, no output interrupts need be taken. The DK-10 has a base address register (see section 3.2) that is used to access a list of word pairs for the output lines. The first word of each pair, at the base address plus twice the line number, has a count of characters remaining to be output on that line. The second word, at the base address plus one plus twice the line number, is a pointer to the buffer of characters to be output. This pointer is similar to a regular byte pointer with its halves swapped and is effectively ILDBed by the DK-10 to get characters. The size field is always treated and stored back as if it were 7. The postion field should be of the form 36-7k. .figure 5 When the count word is counted down to -1 for an output line, the output done flag is set for this line. If output interrupts have been enabled, the DK-10 will then request an interrupt and it will be possible to read in the number of the line that stopped. The DK-10 has provisions for starting and stopping each output line and for setting the speed of each output line be doing CONOs. To make it easy to ring buffer output, the DK-10 actually examines each word that it fetches from memory for the purpose of extracting a character from it. If the bottom bit is one (this bit is not used in packed 7 bit fields) then the word is treated as a new "swapped byte pointer" which is effectively ILDBed to get the character to output and then stored back on top of the second word of the word pair associated with this output line. Thus one can store a byte pointer back to the start of a buffer at the end of the buffer. If the DK-10 gets a non-existant memory indication on a read or write or a parity error on a read it sets an error flag in its control register and stops all output processing until reset. .sp 3.1 DATAI .sp .figure 2 14-17 input line on which character was received 28-35 charcter code .sp 3.2 DATAO .sp .figure 2 15 if a one, enables output interrupts 16-35 base address for output control words .sp 3.3 CONI .sp .figure 2 14-17 number of an output line with done flag set 27 in on, indicates some output line done 28 state of selected input line 29 selected output line busy 30 parity error 31 non-existant memory error 32 input done flag 33-35 priority interrupt channel assignment .sp .block 4 3.4 CONO .sp .figure 2 .sp 18 master clear 19 makes function apply to selected line through highest 20-23 line number 24-26 speed if used by function 27-29 function as follows: 0 set output done 1 start output 2 disable input 3 enable input 4 stop output & clear output done 5 set output speed & start output 6 set input speed & disable input 7 set input speed & enable input 30 clear parity error 31 clear non-existant memory error 32 clear input done flag 33-35 priority interrupt channel assignment