; KEYBOARD AND TELEPRINTER DRIVER - PART 3 ; ; VERSION V006A ;  001 ; ; COPYRIGHT 1973,1974 DIGITAL EQUIPMENT CORP. MAYNARD, MASS. ; ECHO BUFFER INPUT POINTER .WORD EB  ;CONSOLE EPI: LOC=EB LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON CONSOLE .=EPI+TK.NOU+TK.NOU ; ECHO BUFFER OUTPUT POINTER .WORD EB  ;CONSOLE EPO: LOC=EB LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE LOC=LOC+EBSZ .WORD LOC  ;NON-CONSOLE .=EPO+TK.NOU+TK.NOU ; TYPE AHEAD BUFFER INPUT POINTERS .WORD KC.BUF  ;COMMAND .WORD KI.BUF  ;CONSOLE K.IN: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE .=K.IN+TK.NOU+TK.NOU ; TYPE AHEAD BUFFER OUTPUT POINTER .WORD KC.BUF  ;COMMAND .WORD KI.BUF  ;CONSOLE K.OUT: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE .=K.OUT+TK.NOU+TK.NOU ; TERMINATOR FLAG/RUBOUT MODE .WORD 0  ;COMMAND .WORD 0  ;CONSOLE K.TRM: K.ROM=.+1 .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .=K.TRM+TK.NOU+TK.NOU ; INTERNAL BYTE COUNT .WORD 1  ;COMMAND .WORD 1  ;CONSOLE K.BC: .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .WORD 1  ;NON-CONSOLE .=K.BC+TK.NOU+TK.NOU ; INTERNAL DATA POINTER .WORD 0  ;CONSOLE K.DP: .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .WORD 0  ;NON-CONSOLE .=K.DP+TK.NOU+TK.NOU ; BUFFER POINTERS .WORD KC.BUF  ;COMMAND .WORD KI.BUF  ;CONSOLE K.BUF: LOC=KI.BUF LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE LOC=LOC+KBSZ+1 .WORD LOC  ;NON-CONSOLE .=K.BUF+TK.NOU+TK.NOU ; PTR TO SPECIAL OUTPUT STRING .WORD KO.MA+2  ;CONSOLE K.MPTR: .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .WORD KO.MA+2  ;NON-CONSOLE .=K.MPTR+TK.NOU+TK.NOU ; ECHO BUFFER POINTERS .WORD EB  ;CONSOLE EBP: LOC=EB LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE LOC=EB+EBSZ .WORD LOC  ;NON CONSOLE .=EBP+TK.NOU+TK.NOU ; OPEN CLOSE FLAG/ECHO SUPPRESS FLAG .WORD 0  ;ALWAYS 0 .WORD 0 K.OPF: K.ESF=.+1 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .=K.OPF+TK.NOU+TK.NOU ; STORE FOR CONTROL CHARACTERS/EOD FLAG .WORD 0  ;COMMAND .WORD 0 CCTMP: K.ENFL=.+1 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .=CCTMP+TK.NOU+TK.NOU ; COMMAND BUFFER .WORD 0 ;CMDST MUST START ON EVEN BOUNDRY . CMDST: KC.BUF: .=.+KBSZ ; NORMAL BUFFER .BYTE 0 KI.BUF: .=.+KBSZ .IFGE TK.NOU-1 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-2 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-3 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-4 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-5 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-6 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-7 .BYTE 0 .=.+KBSZ  ;NON CONSOLE .IFGE TK.NOU-8. .BYTE 0 .=.+KBSZ  ;NON CONSOLE .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; ECHO BUFFER EB: .=.+EBSZ  ;CONSOLE .IFGE TK.NOU-1 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-2 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-3 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-4 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-5 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-6 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-7 .=.+EBSZ  ;NON-CONSOLE .IFGE TK.NOU-8. .=.+EBSZ  ;NON-CONSOLE .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; CHARACTER CHECK STRING .BYTE 177,25,3 KO.MA:KBO.CR: .BYTE 15,12,0,40,11,13,14,7,10 KO.MB: .BYTE 15,12,'.,0 .EVEN ; DDB'S ; KB (KEYBOARD) 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN AND LEVEL COUNTS. +KB   ;DVR ADR. KBDDB: +0,0,0,0,0,0,0,0,0,0,0,0 ;STANDARD DDB .BYTE 0  ;TEMP FOR .READ/.WRITE .BYTE 1  ;SUSPEND # +KBFSZ   ;BUFFER SIZE IN BYTES. +KBBUF   ;PTR TO BUFFER. +KBBUF,KBBUF  ;IN,OUT CIRCULAR PTRS +0   ;PTR TO INPUT CHANGE BLOCK .BYTE 0  ;RESERVED TASK # .BYTE 0  ;FLAGS +0,+0   ;ROOM FOR CURRENT CHANGE BLOCK .WORD 0  ;TIME OUT COUNT/INHIBIT ; ; KB (TELEPRINTER) 0,0   ;ACTIVE DDB CHAIN +0,0,0 +KB+16 TPDDB: +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE 2 +TPSZ +TPBUF,TPBUF,TPBUF +0 .BYTE 0 .BYTE SY.DPR +0,0 +0 ;NON CONSOLE DDB'S ; KEYBOARD .IFGE TK.NOU-1 LOC=20 LOCA=0 TTDDB=.+14 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES. +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-2 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES. +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-3 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-4 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-5 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-6 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-7 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .IFGE TK.NOU-8. 0,0   ;ACTIVE DDB CHAIN +0,0,0   ;MONITOR CHAIN & LEVEL COUNTS +TT   ;DRIVER ADDRESS +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC  ;SUSPEND # LOC=LOC+1 +KBFSZ   ;BUFFER SIZE IN BYTES +TKBUF+LOCA ;BUFFER POINTER +TKBUF+LOCA ;IN POINTER +TKBUF+LOCA ;OUT POINTER LOCA=LOCA+KBFSZ +0,0,0,0  ;PIC, FLAGS, CURRENT CHANGE BLOCK +0 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; TELEPRINTER .IFGE TK.NOU-1 LOC=30 LOCA=0 TODDB=.+14 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-2 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-3 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-4 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-5 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-6 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-7 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .IFGE TK.NOU-8. 0,0   ;ACTIVE DDB CHAIN +0,0,0,TT+16 +0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0 .BYTE LOC LOC=LOC+1 +TPSZ,TOBUF+LOCA,TOBUF+LOCA,TOBUF+LOCA LOCA=LOCA+TPSZ +0 .BYTE 0,SY.DPR +0,0 +0 .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ; VECTOR SET UP FOR UNITS 1-N OF NON-CONSOLE ; TELETYPE ; ; .IFNZ TK.NOU ; .ASECT ; .IFDF TT0VCT TT1VCT=TT0VCT+10 .ENDC ; .IFNDF TT1VCT TT1VCT=310 ;DEFAULT .ENDC ; .=TT1VCT ; TK.VCT: .WORD TK.INT,341,TKO.INT,341 ;TT01 .WORD TK.INT,342,TKO.INT,342 ;TT02 .WORD TK.INT,343,TKO.INT,343 ;TT03 .WORD TK.INT,344,TKO.INT,344 ;TT04 .WORD TK.INT,345,TKO.INT,345 ;TT05 .WORD TK.INT,346,TKO.INT,346 ;TT06 .WORD TK.INT,347,TKO.INT,347 ;TT07 .ENDC .CSECT .END