1 TITLE LPTSER - LINE PRINTER SERVICE ROUTINE
\r
3 INTERNAL LPTINT,LPTINI
\r
4 EXTERNAL LPTCHN, LPTCHL, LPTRET, OUT, WAIT1, LPTSAV, IOSET
\r
5 EXTERNAL ADVBFE, SETIOD,ILLINP,LPTCHB,LPTCLB
\r
7 ;DEVICE DATA BLOCK LINKAGE
\r
8 EXTERNAL LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD,LPTBUF,LPTPTR
\r
9 EXTERNAL LPTADR,LPTSV1
\r
13 ,LPT PARAMETER ASSIGNMENTS
\r
15 , LPT CONTROL REGISTER
\r
16 LPTCLR=2000 ;CLEAR BUFFER
\r
17 LPTDON=100 ;DONE FLAG
\r
18 LPTERR=400 ;ERROR FLAG
\r
19 LPTLOV=1000 ;LINE OVERFLOW
\r
21 , SPECIAL IO STATUS WORD ASSIGNMENTS
\r
27 LPTDAT: SIXBIT .LPT.
\r
39 , LPT SERVICE DISPATCH TABLE
\r
41 LPTDSP: JRST LPTINI ;RELEASE
\r
46 LPTINI: CONO LPT,LPTCLR ;LPT INITIALIZE
\r
51 LPTCLS: PUSHJ PDP,OUT ;PRINT REMAINING BUFFERS
\r
52 PUSHJ PDP, WAIT1 ;WAIT FOR IOACT=0
\r
53 DATAO LPT,LPTTOP ;PRINT CARRAGE RETURN, FORM FEED
\r
54 POPJ PDP, ;CLOSE RETURN
\r
56 LPTOUT: TRO IOS,IOACT ;IOACT=1
\r
57 TLZ IOS,IODISC ;IODISC:=0
\r
59 TLNE IOS,IOBEG ;VIRGIN DEVICE? IOBEG:=0
\r
62 MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS)
\r
66 LPTBEG: TLO IOS,IODISC
\r
67 MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS)
\r
70 LPTBG1: MOVEI TAC1,LPTLOV+LPTERR+LPTDON
\r
72 CONO LPT, LPTCHB(TAC) ;CLEAR BUFFER AND ASSIGN PI C
\r
77 , LINE PRINTER INTERRUPT SERVICE
\r
79 LPTINT: CONSO LPT,LPTLOV+LPTERR+LPTDON;LINE OVERFLOW, ERROR OR DONE
\r
80 JRST LPTINT ;IF LPT IS IN FLAG LIST, GO TO ERROR, E
\r
84 LPTIN1: SKIPGE LPTIOS ;IODISC=1?
\r
86 BLKO LPT,LPTPTR ;PRINT
\r
88 JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN
\r
89 MOVEM TAC,LPTSV1 ;SAVE TAC
\r
90 HRLZI TAC,IODISC ;IODISC:=1
\r
92 LPTERX: MOVE TAC,LPTSV1 ;RESTORE TAC
\r
93 JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN
\r
95 LPTDSC: JSR LPTSAV ;SAVE ACCUMULATORS AND ESTABL
\r
96 MOVEI DEVDAT,LPTDAT ;DEVDAT:=LPTDAT
\r
97 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVPTR)
\r
100 JRST LPTBG ;PUT OUT CR-LF
\r
101 PUSHJ PDP,ADVBFE ;ADVANCE BUFFER
\r
102 JRST LPTOFF ;NEXT BUFFER EMPTY
\r
103 TRNE IOS,IOCON ;CONTINUOUS? (IOCON=0?)
\r
106 PUSHJ PDP,LPTSET ;SET LPTPTR
\r
108 LPTINX: TLZE IOS,IOW ;IN A WAIT? IOW:=0
\r
109 PUSHJ PDP,SETIOD ;YES. IOWS:=1
\r
110 LPTXIT: MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS)
\r
111 JRST LPTRET ;RESTORE ACCUMULATORS AND DIS
\r
113 LPTOFF: TRZ IOS,IOACT
\r
115 HLLZS LPTINT ;TURN LPT OFF
\r
118 LPTBG: DATAO LPT,LPTTOP ;SEND OUT CR-FF
\r
119 TLZ IOS,IODISC ;WHEN IODISC=1
\r
123 ;HERE ON EITHER OVERFLOW OR ERROR(OFFLINE) OR ERROR CHANNEL
\r
126 LPTERI: MOVEM TAC,LPTSV1 ;SAVE TAC
\r
127 CONSO LPT,LPTLOV ;LINE OVERFLOW?
\r
129 MOVN TAC,[EXP 100001] ;YES, DECREMENT POINTER
\r
131 DATAO LPT,[EXP 15B6+12B13] ;PRINT CARRIAGE RETURN, LINE
\r
134 LPTER1: CONSO LPT,70 ;ERROR INTERRUPT ASSIGNED?
\r
136 CONO LPT,LPTCLB ;YES, DEASSIGN IT,SET BUSY,CLEAR REST
\r
137 MOVEI TAC,LPTDON ;ENABLE FOR DONE FLAG ONLY
\r
138 LPTERA: HRRM TAC,LPTINT
\r
141 LPTER2: CONI LPT,TAC
\r
143 CONO LPT,LPTCHB(TAC)
\r
144 MOVEI TAC,LPTDON+LPTERR+LPTLOV
\r
148 LPTTOP: EXP 15B6+14B13 ;CARRIAGE RETURN, FORM FEED
\r
151 ,SET UP PRINTER COUNTER AND POINTER
\r
153 LPTSET: MOVEI TAC,@LPTADR ;LPTPTR:=-(WORD COUNT+1), BUFFER ADDRES
\r
156 AOJLE TAC,.+2 ;C(LPTPTR0-17)<0?
\r