Removed code that did not match
[retro-software/dec/tops10/v4.5.git] / src / lptser.mac
1 TITLE   LPTSER - LINE PRINTER SERVICE ROUTINE FOR MULTIPLE LINE PRINTERS - V405\r
2 SUBTTL  T. W. MCMANUS /TNM   TS   20 MAY 69\r
3         XP VLPTSR,405           ;DEFINE GLOBAL VERSION NUMBER FOR LOADER MAP\r
4 \r
5 ;THE FOLLOWING EXTERNAL SYMBOLS ARE DEFINED IN COMMON:\r
6 \r
7         EXTERNAL CPOPJ1, PION, PIOFF\r
8 \r
9 ;THE FOLLOWING EXTERNAL SYMBOLS ARE DEFINED IN CLOCK1:\r
10 \r
11         EXTERNAL SETIOD, WAIT1\r
12 \r
13 ;THE FOLLOWING EXTERNAL SYMBOLS ARE DEFINED IN ERRCON:\r
14 \r
15         EXTERNAL HNGSTP, ILLINP\r
16 \r
17 ;THE FOLLOWING EXTERNAL SYMBOLS ARE DEFINED IN UUCON:\r
18 \r
19         EXTERNAL ADVBFE, IOSET, OUT, SETACT, STOIOS\r
20 \r
21 \r
22 ;THE FOLLOWING SYMBOLS ARE REFERENCED OUTSIDE OF LPTSER:\r
23 \r
24         INTERN LPTINT, LPTNXT, LPTECM, LPTDON, LPTDSP\r
25         ENTRY LPTSER\r
26 \r
27 LPTSER:\r
28 \f;LINE PRINTER CONTROL REGISTER MNEMONIC DEFINITIONS\r
29 \r
30         LPTCLR=1B25                     ;CLEAR LINE PRINTER BUFFER\r
31         LPTLOV=1B26                     ;LINE OVERFLOW FLAG (PDP-6 ONLY)\r
32         LPTERR=1B27                     ;ERROR FLAG\r
33         LPTBSY=1B28                     ;BUSY FLAG\r
34         LPTDON=1B29                     ;DONE FLAG\r
35         LPTECM=7B32                     ;ERROR CHANNEL MASK\r
36         LPTDCM=7B35                     ;DONE CHANNEL MASK\r
37         LPTBDM=LPTBSY+LPTDON            ;BUSY/DONE FLAG MASK\r
38 \r
39 \r
40 ;LINE PRINTER DEVICE DEPENDANT I/O STATUS MNEMONIC DEFINITIONS\r
41 \r
42         LPTEND=Z(1B10)                  ;CLOSE UUO HAS BEEN DONE\r
43         LPTSYN=Z(1B11)                  ;CREF AFTER CLOSE UUO HAS BEEN SENT\r
44 \r
45 \r
46 ;LINE PRINTER DEVICE DATA BLOCK ADDRESSING MNEMNIC DEFINITIONS\r
47 \r
48         LPTCON=-4                       ;RH = SKIP CHAIN MASK REGISTER\r
49         LPTPTR= 7                       ;BLOCK OUTPUT POINTER\r
50         LPTCH= 11                       ;INTERRUPT CHANNEL ASSIGNMENTS\r
51         LPTSVE=12                       ;DDB ROUTINE TO SAVE AC'S\r
52         LPTEX1=16                       ;DDB EXIT ROUTINE IF AC'S NOT SAVED\r
53         LPTSV2=20                       ;TEMP. SAVE LOCN. FOR TAC\r
54         LPTECH=21                       ;CONSZ LP?,LPTECM\r
55         LPTDNE=22                       ;CONSO LP?,LPTDON\r
56         LPTCSO=23                       ;CONSO LP?,(TAC)\r
57         LPTCSZ=24                       ;CONSZ LP?,(TAC)\r
58         LPTCNI=25                       ;CONI  LP?,TAC\r
59         LPTCNO=26                       ;CONO  LP?,(TAC)\r
60         LPTDTO=27                       ;DATAO LP?,(TAC)\r
61         LPTBKO=30                       ;BLKO  LP?,LP?PTR\r
62 \r
63 \r
64 ;LINE PRINTER SERVICE DISPATCH TABLE\r
65 \r
66         JRST LPTINI                     ;INITIALIZE\r
67         JRST LPTHNG                     ;HUNG DEVICE ERROR\r
68 LPTDSP: JRST LPTREL                     ;RELEASE\r
69         JRST LPTCLS                     ;CLOSE\r
70         JRST LPTOUT                     ;OUTPUT\r
71         JRST ILLINP                     ;INPUT\r
72 \f;LINE PRINTER INITIALIZATION, HUNG DEVICE AND RELEASE CODE\r
73 \r
74         ;LPTINI IS CALLED AT SYSTEM INITIALIZATION TIME FROM\r
75         ;IOGO IN SYSINI WITH THE DDB ADDRESS IN DEVDAT\r
76         \r
77         ;LPTHNG IS CALLED FROM DEVCHK IN UUOCON (IOCSS) WITH\r
78         ;THE DDB ADDRESS IN DEVDAT WHENEVER A LINE PRINTER\r
79         ;HUNG DEVICE COUNT IS DECREMENTED TO ZERO\r
80 \r
81         ;LPTREL IS CALLED FROM RELEA1 IN UUOCON WITH THE DDB\r
82         ;ADDRESS IN DEVDAT WHENEVER A RELEASE UUO IS EXECUTED\r
83         ;FOR A LINE PRINTER\r
84 \r
85         ;EACH OF THE ABOVE ROUTINE MUST:\r
86         ;\r
87         ;       1.  CLEAR THE SPECIFIED LINE PRINTER\r
88         ;       2.  DEASSIGN BOTH THE ERROR AND DONE INTERRUPT\r
89         ;            CHANNELS FOR THE LINE PRINTER\r
90         ;       3.  CLEAR THE SKIP CHAIN INTERRUPT MASK FLAGS\r
91         ;            FOR THAT LINE PRINTER\r
92 \r
93         ;NOTE:  THE LPTINI CODE FORCES IOGO IN SYSINI TO INVOKE\r
94         ;       LPTINI FOR EACH LINE PRINTER ON THE SYSTEM RATHER\r
95         ;       THAN FOR THE NORMAL CASE WHERE IT INVOKES THE\r
96         ;       INITIALIZATION CODE ONCE FOR EACH DISPATCH TABLE.\r
97         ;\r
98         ;       THEREFORE, THE CORRECT OPERATION OF THE LPTINI CODE\r
99         ;       IS DEPENDANT UPON THE IOGO CODE WHICH SHOULD BE:\r
100         ;\r
101         ;               PUSHJ PDP,DINI(AC3)\r
102         ;               HRRZM AC3,SAVITM\r
103 \r
104 LPTHNG:\r
105 LPTREL:\r
106         SOS (PDP)                       ;COUNTERACT SKIP RETURN\r
107 LPTINI: MOVEI TAC,LPTCLR                ;CLEAR THE LINE PRINTER\r
108         XCT LPTCNO(DEVDAT)\r
109         HLLZS LPTCON(DEVDAT)            ;CLEAR SKIP CHAIN MASK FLAGS\r
110         JRST CPOPJ1                     ;SKIP RETURN IF ENTERED AT LPTINI\r
111                                         ; TO FORCE CALL FOR EACH LPT\r
112 \r
113 \r
114 ;LINE PRINTER CLOSE UUO ROUTINE\r
115 \r
116 LPTCLS: TLO IOS,LPTEND                  ;TURN ON THE END FLAG\r
117         TLZ IOS,LPTSYN                  ;TURN OFF SYNCHRONIZATION FLAG\r
118         MOVEM IOS,DEVIOS(DEVDAT)        ;SAVE IOS IN THE DDB\r
119         JRST OUT                        ; AND RETURN TO UUOCON\r
120 \f;LINE PRINTER OUTPUT UUO ROUTINE\r
121 \r
122 LPTOUT: SETZ TAC,                       ;CLEAR ALL POSSIBLE\r
123         XCT LPTCNO(DEVDAT)              ; LINE PRINTER FLAGS\r
124         MOVEI TAC,LPTERR                ;SET MASK FOR ERROR FLAG\r
125         XCT LPTCSO(DEVDAT)              ;SKIP IF ERROR FLAG IS ON\r
126         JRST .+3                        ; LPT IS NOT OFF, NOT ON LOCAL\r
127         PUSHJ PDP,HNGSTP                ;STOP JOB AND PRINT REMINDER\r
128         JRST LPTOUT                     ;TRY AGAIN WHEN USER TYPES "CONT"\r
129         TLNE IOS,IOBEG                  ;IS THIS FIRST OUTPUT SINCE INIT?\r
130         JRST LPTNEW                     ; YES\r
131         PUSHJ PDP,LPTSET                ; NO, SET UP BLKO POINTER\r
132 LPTGO:  PUSHJ PDP,SETACT                ;SET I/O ACTIVE BIT, STORE IOS\r
133                                         ; AND SET HUNG DEVICE COUNT\r
134         MOVE TAC,LPTCH(DEVDAT)          ;GET CHANNEL ASSIGNMENTS FROM DDB\r
135         TLNE IOS,IOBEG                  ;IS THIS FIRST OUTPUT SINCE INIT?\r
136         IORI TAC,LPTCLR+LPTDON          ;SET LPTCLR IF IOBEG:=1, ELSE\r
137         XORI TAC,LPTDON                 ; SET LPTDON\r
138         HRLI TAC,LPTLOV+LPTERR+LPTDON   ;GET SKIP CHAIN MASK FLAGS\r
139         CONO PI,PIOFF                   ;TURN OFF PI TO PREVENT IMM. INT.\r
140         XCT LPTCNO(DEVDAT)              ;SEND CONDITIONS OUT TO LPT\r
141         HLRM TAC,LPTCON(DEVDAT)         ;SAVE SKIP CHAIN MASK FLAGS\r
142         CONO PI,PION                    ;REENABLE ALL INTERRUTPS\r
143         POPJ PDP,                       ; AND RETURN TO UUOCON\r
144 \r
145 LPTNEW: TLO IOS,IO                      ;SET I/O DIRECTION TO OUTPUT\r
146         SETZM LPTPTR(DEVDAT)            ;CLEAR BLKO POINTER\r
147         JRST LPTGO                      ;RETURN TO MAINSTREAM\r
148 \f;LINE PRINTER INTERRUPT SERVICE ROUTINE\r
149 \r
150 LPTINT: XCT LPTECH(DEVDAT)              ;SKIP IF NO ERROR CHANNEL ASSIGNED\r
151         XCT LPTDNE(DEVDAT)              ;SKIP IF DONE FLAG IS UP\r
152         JRST LPTER1                     ; BRANCH TO ERROR SERVICE ROUTINE\r
153         SKIPL LPTPTR(DEVDAT)            ;BLKO COUNT TO 0 ON PREV. INTERRUPT\r
154         JRST LPTSVE(DEVDAT)             ; YES, GO SAVE ORIGINAL AC'S\r
155         XCT LPTBKO(DEVDAT)              ; NO, SEND NEXT WORD FOR PRINTING\r
156         JRST LPTEX1(DEVDAT)             ;LAST WORD SENT BUT INTERRUPT PENDING\r
157         JRST LPTEX1(DEVDAT)             ;GO RESTORE DEVDAT AND RETURN\r
158 \r
159 LPTNXT:                                 ;ENTER HERE AFTER DDB ROUTINE SAVE\r
160                                         ; ORIGINAL AC'S IN PROPER CHANNEL\r
161                                         ; SAVE AREA AND SETS UP DEVDAT\r
162                                         ; TO POINT TO DDB AGAIN\r
163 \r
164         PUSHJ PDP,IOSET                 ;SET AC PROG:= JOB AREA ADDRESS AND\r
165                                         ; AC IOS:= DEVIOS IN THE DDB\r
166         TLZE IOS,IOBEG                  ;FIRST BUFFER SINCE INIT?\r
167         JRST LPTBG1                     ; YES, GO OUTPUT A CRFF\r
168         PUSHJ PDP,ADVBFE                ; NO, ADVANCE TO NEXT BUFFER\r
169         JRST LPTOFF                     ;CANNOT ADVANCE, BUFFER UNAVAILABLE\r
170         PUSHJ PDP,LPTSET                ;SET UP NEW BLKO POINTER\r
171 LPTWCK: TLZE IOS,IOW                    ;IS JOB WAITING FOR I/O COMPLETION?\r
172         PUSHJ PDP,SETIOD                ; YES, ARRANGE FOR JOB TO RUN AGAIN\r
173 LPTEX2: JRST STOIOS                     ;SAVE IOS, RESET HUNG DEVICE COUNT\r
174                                         ; AND DISMISS INTERRUPT\r
175 \r
176 LPTOFF: TLNN IOS,LPTEND                 ;SKIP IF CLOSE HAS BEEN DONE\r
177         JRST LPTOF1                     ; GO TURN PRINTER OFF UNTIL NEXT OUTPUT\r
178         TLON IOS,LPTSYN                 ;HAS FINAL CRFF BEEN OUTPUT?\r
179         JRST LPTBG2                     ; NO, SO GO DO IT\r
180         TLZ IOS,LPTEND                  ; YES, SO CLEAR END FLAG\r
181 LPTOF1: TRZ IOS,IOACT                   ;CLEAR I/O ACTIVE BIT\r
182         SETZ TAC,                       ;CLEAR TAC AND\r
183         XCT LPTCNO(DEVDAT)              ; TURN LPT OFF\r
184         HLLZS LPTCON(DEVDAT)            ;CLEAR SKIP CHAIN MASK FLAGS\r
185         JRST LPTWCK                     ; AND BRANCH\r
186 \r
187 LPTBG1: PUSHJ PDP,LPTSET                ;SET UP INITIAL BLKO POINTER *****\r
188 LPTBG2: MOVEI TAC,[EXP 15B6+14B13]      ;SEND OUT A CRFF\r
189         XCT LPTDTO(DEVDAT)\r
190         JRST LPTEX2                     ;GO DISMISS ITERRUPT\r
191 \f;LINE PRINTER ERROR HANDLING ROUTINE\r
192 \r
193 LPTER1: MOVEM TAC,LPTSV2(DEVDAT)        ;SAVE TAC IN DDB\r
194         MOVEI TAC,LPTLOV                ;GET LINE OVERFLOW ERROR MASK\r
195         XCT LPTCSO(DEVDAT)              ;SKIP IF LINE OVERFLOW FLAG IS ON\r
196         JRST LPTER2                     ; GO CHECK IF PREVIOUS ERROR OCCURRED\r
197         MOVN TAC,[EXP 100001]           ;DECREMENT BLK0 POINTER\r
198         ADDM TAC,LPTPTR(DEVDAT)\r
199         MOVE TAC,[EXP 15B6+12B13]       ;PRINT CRLF\r
200         XCT LPTDTO(DEVDAT)\r
201         JRST LPTER4\r
202 \r
203 LPTER2: XCT LPTECH(DEVDAT)              ;SKIP IF ERROR INTERRUPT NOT ASSIGNED\r
204         JRST LPTER5                     ; ERROR CONDITION DETECTED\r
205         MOVE TAC,LPTCH(DEVDAT)          ;GET INTERRUPT CHANNEL ASSIGNMENTS\r
206         ANDI TAC,LPTDCM                 ;MASK OUT ERROR CHANNEL\r
207         IORI TAC,LPTBSY                 ;SET THE BUSY FLAG\r
208         XCT LPTCNO(DEVDAT)              ;SEND IT OUT TO THE LPT\r
209         MOVEI TAC,LPTLOV+LPTERR+LPTDON  ;ENABLE FOR ALL INTERRUPTS\r
210 LPTER3: HRRM TAC,LPTCON(DEVDAT)         ;SAVE SKIP CHAIN MASK FLAGS\r
211 LPTER4: MOVE TAC,LPTSV2(DEVDAT)         ;RESTORE SAVED ACCUMULATOR\r
212         JRST LPTEX1(DEVDAT)             ; AND GO DISMISS INTERRUPT\r
213 \r
214 LPTER5: MOVE TAC,LPTCH(DEVDAT)          ;GET INTERRUPT CHANNEL ASSIGNMENTS\r
215         ANDI TAC,LPTDCM                 ;MASK OUT ERROR CHANNEL ASSIGNMENT\r
216         IORI TAC,LPTBSY                 ;SET BUSY FLAG\r
217         XCT LPTCNO(DEVDAT)              ;SEND IT OUT TO THE LPT\r
218         MOVEI TAC,LPTDON                ;ENABLE FOR DONE FLAG ONLY\r
219         JRST LPTER3\r
220 \f;LINE PRINTER BLKO POINTER SETUP ROUTINE\r
221 \r
222 LPTSET: MOVEI TAC,@DEVOAD(DEVDAT)       ;GET ABS. ADDR. OF CURRENT BUFFER\r
223         MOVN TAC1,1(TAC)                ;GET NEGATIVE WORD COUNT\r
224         HRL TAC,TAC1                    ;COMBINE NEG. WORD COUNT AND ADDR,\r
225         AOJ TAC,                        ;INCREMENT BUFFER ADDRESS TO FORM\r
226         MOVEM TAC,LPTPTR(DEVDAT)        ; LPTPTR:= -(WORD COUNT),(BUFF, ADDR, +1)\r
227         POPJ PDP,                       ; AND RETURN\r
228 \r
229 \r
230         END\r