.TITLE TT V02-03 25-JUN-74 ; RT/RSX 'TT' DRIVER ; ; NOTE THAT THIS DRIVER MAY BE USED ONLY AS AN OUTPUT DEVICE, MUCH ; AS 'LP'. IN FACT, IT IS AN EXTRACTION OF 'LP.MAC' ; ; THIS DRIVER MAY BE USED WITH EITHER THE LOGICAL OR VIRTUAL ; VERSION, BUT MUST BE ASSEMBLED USING EITHER 'RSX.MAC' OR ; 'RSX24K.MAC' FOR THE 16K AND 24K SYSTEMS RESPECTIVELY. ; ; BY: G.BERNSTEIN ; DATE: 8-SEP-77 ; .GLOBL TIDPB ; MACROS FOR ASSEMBLING UNDER RT-11 ; THESE ARE 'EQUIVALENT' OF RSX MACROS .MACRO DIR$ DPB,ERR ;### MOV @#$DSW,-(SP) ;(SAVE DSW AROUND DIRECTIVES) ;### MOV DPB,-(SP) ;### EMT 377 ;### .IF NB ERR ;### BCC .+6 ;### JSR PC,ERR ;### .IFF ;### BCC .+4 ;### HALT ;### .ENDC ;ERR ;### MOV (SP)+,@#$DSW ;### .ENDM ;### ; DEFINITIONS FOR RSX QIO Q.IOAE=12 ;### Q.IOEF=6 ;### Q.IOFN=2 ;### Q.IOLU=4 ;### Q.IOPL=14 ;### Q.IOPR=7 ;### Q.IOSB=10 ;### H.BUFA=0 ;### H.BUFS=2 ;### H.LBN=6 ;### IO.RLB=1000 ;### IO.WLB=400 ;### $DSW=46 ;### R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; LINE PRINTER CONTROL REGISTERS LPS = 177514 ;LINE PRINTER CONTROL REGISTER LPB = 177516 ;LINE PRINTER DATA BUFFER LPVEC = 200 ;LINE PRINTER VECTOR ADDR ;CONSTANTS FOR MONITOR COMMUNICATION HDERR = 1 ;HARD ERROR BIT MONLOW = 54 ;BASE ADDR OF MONITOR OFFSET = 270 ;POINTER TO Q MANAGER COMP ENTRY PR7 = 340 PR4 = 200 ; ASCII CONSTANTS CR = 15 LF = 12 FF = 14 HT = 11 COLSIZ = 132. ;132 COLS ; LOAD POINT LOADPT: .WORD LPVEC ;ADDR OF INTERRUPT VECTOR .WORD LPINT-. ;OFFSET TO INTERRUPT SERVICE .WORD PR4 ;PRIORITY 7 LPLQE: .WORD 0 ;POINTER TO LAST Q ENTRY LPCQE: .WORD 0 ;POINTER TO CURRENT Q ENTRY ; ENTRY POINT LP: MOV LPCQE,R4 ;R4 POINTS TO CURRENT Q ENTRY ASL 6(R4) ;WORD COUNT TO BYTE COUNT BCC LPERR ;A READ REQUEST IS ILLEGAL CMP (R4)+,(R4)+ ;PT TO ADDRS OF NEXT CHAR ;### MOV (R4)+,@#TIDPB+Q.IOPL+H.BUFA ;### NEG (R4) ;### MOV (R4),@#TIDPB+Q.IOPL+H.BUFS ;### DIR$ #TIDPB ;### RTS PC ;### ; INTERRUPT SERVICE BR LPDONE ;ABORT ENTRY POINT LPINT: MOV @#54,-(SP) ;INTO SYSTEM STATE ;### JSR R5,@(SP)+ ;### .WORD ^C&PR7 LPDONE: MOV PC,R4 ADD #LPCQE-.,R4 ;ADDR OF CQE IN R3 MOV @#MONLOW,R5 JMP @OFFSET(R5) ;JUMP TO Q MANAGER INTEN: 0 LPERR: HALT ;### LPSIZE = .-LOADPT .END