215a429cfe8658b50b6fc0afab56880467ab435b
[retro-software/dec/tops10/v4.5.git] / src / mtcsr6.mac
1 TITLE   MTCSR6 - MAGNETIC TAPE ROUTINES FOR 516 CONTROL\r
2 SUBTTL C.WHITE 27-APR-69 V406\r
3         XP      VMTCSR,406      ;DEFINE GLOBAL VERSION NUMBER FOR LOADER MAP\r
4 \r
5 ENTRY MTCSR6\r
6 MTCSR6:\r
7 INTERNAL FTCHECK,FTMONP\r
8 IFN FTCHECK+FTMONP,<\r
9 EXTERNAL MTCDDB,MTCDDS,MTECNT,MTRKCN\r
10 >\r
11 IFE FTCHECK+FTMONP,<\r
12 \r
13 INTERNAL MTCDDB,MTCDSP\r
14 \r
15 ;MTC  DEVICE DATA BLOCK\r
16 ;REMAINING MTA DDB'S  (IF ANY) ARE\r
17 ;GENERATED OUT OF LINE AT BUILD TIME\r
18         ZZ=.\r
19 MTCDDB: SIXBIT  /MTA0/\r
20         XWD     2*HUNGST,MTSIZ+1\r
21         0\r
22         EXP     MTCDSP\r
23         XWD     DVMTA+DVIN+DVOUT+DVLNG,154407\r
24         0\r
25         0\r
26         XWD     PROG,0\r
27         XWD     PROG,0\r
28         XP      MTECNT,.-ZZ\r
29         0                               ;CUMMULATIVE ERROR COUNT FOR THIS UNIT\r
30                                         ;BITS 0-8=LONG, PARITY ERROR COUNT\r
31                                         ;BITS 9-17=LAT, PARITY ERROR COUNT\r
32                                         ;BITS 18-26=ILL. OP. COUNT\r
33                                         ;BITS 27-35=DATA MISSED COUNT\r
34         XP      MTBKCN,.-ZZ\r
35         0                               ;CUMMULATIVE RECORD COUNTER FOR THIS UNIT\r
36         XP      MTCDDS,.-ZZ             ;SIUZE OF MTC DDB\r
37 \r
38 >\r
39 \f       T=ITEM\r
40 ;MAKE TAPE SERVICE SUBROUTINES\r
41 \r
42         JRST MTCINI             ;INITIALIZATION\r
43         JRST MTHUNG             ;MTA HUNG TIMEOUT. RELEASE DATA CONTROL.\r
44                                 ;MAGTAPE CONTROL. PRINT ERROR AND STOP JOB.\r
45 MTCDSP: POPJ PDP,               ;RELEASE\r
46         JRST MTCLSO             ;CLOSE OUTPUT\r
47         JRST MTOUT              ;OUTPUT\r
48         JRST MTIN               ;INTPUT\r
49         JRST CPOPJ1             ;ENTER IN DIRECTORY\r
50         JRST CPOPJ1             ;LOOKUP IN DIRECTORY\r
51         JRST MTDMPO             ;DUMP OUTPUT\r
52         JRST MTDMPI             ;DUMP INPUT\r
53         POPJ PDP,               ;SETO\r
54         POPJ PDP,               ;SETO\r
55         POPJ PDP,               ;GETF\r
56         JRST CPOPJ1             ;RENAME\r
57         POPJ PDP,               ;CLOSE INPUT\r
58         POPJ PDP,               ;UTPCLR\r
59                                 ;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS)\r
60 \r
61 DEFINE  MTAPE (A)       ;MARCO TO DEFINE LEGAL MTAPE UUO EFFECTIVE ADDRESSES.\r
62 <       CODES=0\r
63         IRP     A, <\r
64         CODES=CODES!<1B<^D35-^0'A>>>>\r
65 \r
66         MTAPES  <0,1,11,7,17,3,6,13,16,10>      ;DEFINE WHICH CODES ARE LEGAL\r
67 \r
68         MOVEI   T,1             ;CHECK FOR LEGAL MTAPE UUO\r
69         LSH     T,(UUO)         ;SHIFT BIT ACCORDING TO THE USER'S UUO\r
70         TRNN    T,CODES         ;DID HE SPECIFY A LEGAL CODE ?\r
71         JRST    UUOERR          ;NO--TYPE MONITOR ERROR MESSAGE.\r
72         SOJE    T,MTP0          ;CHECK FOR MTAPE 0 (SPECIAL SYNC WAIT NO-OP)\r
73 \r
74         PUSHJ PDP,MTCHK2\r
75         TRZ IOS,776000          ;CLEAR ERROR BITS ,IOF.\r
76                                 ;IOACT, IOBOT AND IOTEND.\r
77         SKIPA T,UUO             ;CALL MTAPE2\r
78 \fMTAPE: PUSHJ PDP,MTCHK2        ;CHECK IF MAG TAPE CONTROL AVAIL.\r
79 MTAPE2: TDZ IOS,[XWD IODT!IOSEOF,IOACT]\r
80         TRNN T,SLICE            ;SET SLICE LEVEL THIS UUO?\r
81         JRST NOSFT              ;NO\r
82         TLZ IOS,IOSLIC          ;YES, CLEAR LEVEL\r
83         TRNE T,SLEVEL           ;SET TO 1?\r
84         TLO IOS,IOSLIC          ;YES\r
85 NOSET:\r
86         LSH T,^D8               ;MOVE TO FUNCTION\r
87         ANDI T,7400             ;MODE BITS\r
88         CAIN T,4000             ;LOGICAL EOT?\r
89         JRST MTLEOT\r
90         CAIE T,1400             ;WRITE EOF\r
91         CAIN T,5400             ;OR WRITE BLANK TAPE?\r
92         JRST CHKLOC             ;YES, CHECK WRITE-LOCK\r
93         CONSO 224,4000          ;AT LOAD POINT?\r
94         JRST MTGO0              ;NO\r
95         CAIE T,3400             ;YES, BACKSPACE RECORD?\r
96 \r
97         CAIN T,400              ;NO, REW?\r
98         JRST MTFIN              ;YES\r
99         CAIN T,7400             ;NO, BACKSPACE FILE?\r
100         JRST MTFIN              ;YES\r
101 MTGO0:  MOVSI TAC,TCF           ;LOOK FOR TAPE CONTROL FREE ONLY\r
102 \f;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD.\r
103 \r
104 MTGO1:  LDB TAC1,PUNIT          ;UNIT\r
105         DPB TAC1,[POINT 3,T,31] ;UNIT\r
106         LDB TAC1, [POINT 3, IOS,28]     ;DENSITY PARITY\r
107         TRNN TAC1,7             ;NO DENSITY OR PARITY SPECIFIED?\r
108         IORI TAC1,STDENS                ;YES, USE STANDARD\r
109         XORI TAC1, 5            ;ODD, 556\r
110         DPB TAC1,[POINT 3,T,23]\r
111         HRRI TAC,MTCCHN(T)      ;CHANNEL\r
112         TRO TAC,200             ;INHIBIT RETURN TO POOL\r
113         TLNE IOS,IOSLIC         ;SLICE LEVEL A 1?\r
114         TRO TAC,100000          ;YES, SET COMMAND.\r
115         HRRM DEVDAT,MTDEV       ;COMMAND, DVDB\r
116         HRLM TAC,MTDEV\r
117 MTGO3:  MOVEI TAC1,MTPOUN\r
118         HRRM TAC1,MTIDSP\r
119         SETZM MTEOFF            ;CLEAR EOF FLAG\r
120         TLNN IOS,IODT           ;IS THIS A DATA TRANSFER OPERATION\r
121                                 ;REQUIRING DATA CONTROL\r
122         JRST MTGO2              ;NO, MUST BE SPACING OPERATION\r
123         CONO DC,@MDCSAV         ;YES, ATTACH DC TO MAGTAPE\r
124         CONO PI,DCON            ;TURN DC PI CHANNEL ON\r
125 MTGO2:  SETZM MISSED            ;CLEAR DATA MISSED FLAG\r
126         STARTDV MTC\r
127         HLRZS TAC\r
128         CONO 224,(TAC)          ;ENABLE FOR TCF OR ERF\r
129         JRST STOIOS             ;STORE HUNG COUNT, EXIT\r
130 \r
131 ;READ\r
132 MTIN:   PUSHJ PDP,MTCHECK       ;IS SYSTEM AVAILABLE?>\r
133         TLZ IOS,IO              ;READING.\r
134 MTIN1:  SETCM TAC,@DEVIAD(DEVDAT)       ;-SIZE-1\r
135         HRRI TAC,@DEVIAD(DEVDAT)        ;BUFFER ADDRESS,PROG INCLUDED\r
136         ADD TAC,[XWD 2,1]       ;-SIZE+1,BUFFER+1\r
137         MOVEI T,2400    ;READ\r
138 MTIN2:  MOVE TAC1,[BLKI DC,4000+MTDC*10]\r
139         JRST MTINDC\r
140 \f;IS SYSTEM AVAILABLE\r
141 MTCHEK: PUSHJ PDP,GETDCMT       ;GET DATA AND MAG TAPE CONTROLS\r
142         AOSE MTREQ              ;ARGUMENT\r
143         MOVE IOS,DEVIOS(DEVDAT)\r
144         TLO IOS,IODT            ;FLAG DATA TRANSFER\r
145         XCT @(PDP)\r
146         PUSHJ PDP,MTCHK4        ;WAIT FOR REWIND\r
147         JRST MTCHEK             ;GET DC & MT AGAIN\r
148 \r
149 MTCHK2: AOSE MTREQ\r
150         PUSHJ PDP,MTWAIT\r
151         MOVE IOS,DEVIOS(DEVDAT)\r
152         TLZ IOS,IO              ;CLEAR IUO INDICATION SO "REWCK" WILL WORK\r
153         PUSHJ PDP,MTCHK4        ;CHECK STATUS\r
154         JRST MTCHK2             ;GET MT AGAIN\r
155 \r
156 MTCHK4: TLO IOS,HASMT           ;THIS JOB NOW HAS MTC\r
157         TLZE IOS,IOBEG          ;FIRST OPERATION AFTER INIT OR SETSTS\r
158 \r
159         TLZ IOS,IUOSLIC         ;YES, SET SLICE LEVEL TO 0.\r
160         TLZ IOS,IOREW           ;CLEAR MAG TAPE REWINDING\r
161         PUSHJ PDP,REWCK         ;CHECK IF REWINDING?\r
162         JRST TPOPJ              ;NO - STATUS OK\r
163         JRST QSTAT              ;QUERY STATUS\r
164         PUSHJ PDP,DETMDC        ;REWINDING- DETACH MTC, DC AND TURN OFF\r
165                                 ;IODT AND HASMT\r
166         TLO IOS,IOREW           ;SET DEVICE ACTIVE AND IN REWIND WAIT\r
167         PUSHJ PDP,ORACT\r
168         AOSG MTREWN             ;ADD 1 TO REWIND WAIT COUNT\r
169         PUSHJ PDP,MTCLK         ;PUT IN CLOCK REQUEST.\r
170                                 ;(NO OTHER UNITS IN REWIND WAIT)\r
171 \r
172         JRST WSYNC\r
173 \r
174 QSTAT:  PUSHJ PDP,DETMDC        ;DETACH MTC AND DC\r
175         JRST HNGSTP             ;CHECK STATUS (PULL FINGERS OUT, ETC)\r
176 \f;MTAPE 0 WAITS UNTIL THE CONTROL IS FREE\r
177 ;THUS MTAPE 0 PROVIDES THE ONLY WAY FOR A USER TO WAIT UNTIL A SPACING OPERATION\r
178 ; (I.E., SKIP, BACKSPACE, OR REWIND) IS COMPLETED.\r
179 \r
180 MTP0:   PUSHJ   PDP,MTCHK2      ;WAIT FOR CONTROL TO BECOME FREE,\r
181                                 ; THEN GIVE IT BACK IMMEDIATELY,\r
182                                 ; AND RETURN TO THE USER.\r
183 \r
184 \r
185 ;DETMDC-\r
186 ;       DETACH MTC, AND TURN OFF HASMT.\r
187 ;       THEN (IFF IODT ON)\r
188 ;       TURN OFF IODT AND DETACH DC\r
189 \r
190 DETMDC:\r
191 MTHUNG:\r
192         TLZN IOS,HASMT          ;THIS JOB HAS MTC?\r
193         JRST STOIOS             ;NO\r
194         PUSHJ PDP,RELCON\r
195         SOSL MTREQ              ;YES- ANYONE ELSE WAITING FOR IT?\r
196         SETOM MTAVAL            ;YES- FLAG AS JUST BECOME AVAILABLE\r
197 DETDC:  TLZN IOS,IODT           ;DOES JOB HAVE DATA CONTROL?\r
198         JRST STOIOS             ;NO- EXIT\r
199         CONO DC,0\r
200         CONO PD,DCOFF\r
201         SOSL DCREQ              ;ANYONE ELSE WAITING FOR IT?\r
202         SETOM DCAVAL            ;YES- FLAG AS JUST BECOME AVAILABLE\r
203         JRST STOIOS             ;AND EXIT\r
204 \r
205 RELCON: CONO 220,0\r
206         CONO 224,0\r
207         SETZM MTCCON\r
208         POPJ PDP,\r
209 \f;ROUTINE TO SEE IF UNIT IS REWINDING\r
210 ;CALL   MOVE DEVDAT,ADDRESS OF DDB\r
211 ;       PUSHJ PDP,REWCK\r
212 ;       UNIT READY\r
213 ;       UNIT OFF OR WRITE LOCKED\r
214 ;       UNIT REWINDING\r
215 \r
216 REWCK:  LDB TAC,PUNIT\r
217         ROT TAC,4\r
218         CONO MTC,200(TAC)\r
219         CONO MTS1,SEL           ;JAM UNIT INTO COMMAND BUFFER\r
220         CONSZ MTS1,20000        ;SKIP IF REWIND MOTION OFF\r
221         JRST CPOPJ2             ;RETURN TO CALL+2 IF TAPE REWINDING\r
222         TLNE IOS,IO             ;OUTPUT ?\r
223         CONSO MTS1,200          ;YES-WRITE LOCKED ?\r
224         CONSO MTS1,2            ;NO-IS UNIT READY?\r
225         AOS (PDP)\r
226         POPJ PDP,               ;YES- RETURN TO CALL+1\r
227 \r
228 REPEAT 0,<\r
229 THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT:\r
230 \r
231 DELETE 1023K TO ??\r
232 \r
233 ADD     1B18H TO 1B08K          REW(1)(GND)\r
234         1B19S TO 1B08L          FWD/LP(1)(GND)\r
235         1B08N TO 1B23K          (REW(1).OR.FWD/LP(1))\r
236 \r
237 THIS MODE SETS IOP22(1) WHILE MAGTAPE IS REWINDING OR SPACING FORWARD\r
238 TO LOAD POINT- IF ENABLES THE PROCESSOR TO DISTINGUISH BETWEEN A\r
239 TAPE WHICH IS AT THE END OF A REWIND COMMAND, AND A TAPE WHICH IS\r
240 SWITCHED TO LOCAL, OR OFF>\r
241 \f;WRITE\r
242 MTOUT:  PUSHJ PDP,MTCHEK\r
243         TLO IOS,IO              ;WRITING\r
244 MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT)       ;BUFFER ADDRESS, PROG INCLUDED\r
245         MOVN TAC1,1(TAC)        ;-WD COUNT\r
246         HRL TAC,TAC1            ;-WD CMT,BUFFER\r
247         AOJG TAC,MTNOTI         ;BUFFER+1, TEST FOR ZERO WORD COUNT\r
248 MTOUT2: MOVE TAC1,[BLKO DC,3400+MTDC*10]\r
249         MOVEI T,1000            ;WRITE\r
250 MTINDC: MOVEM TAC,MTDCCN        ;BLKO POINTER\r
251         IORI TAC1,DCTCHN                ;DC PI CHANNEL NO.\r
252         MOVEM TAC,DCWRD\r
253         HRRZM TAC1, MDCSAV      ;SAVE DC COMMAND\r
254         HRRI TAC1,DCWRD\r
255         CONO PI,DCOFF           ;TURN DC PI CHANNEL OFF\r
256         MOVEM TAC1,DCLOC        ;BLK COMMAND\r
257         MOVE TAC1,JSR MTDCND]\r
258         MOVEM TAC1,DCLOC1\r
259         TRO IOS,IOACT           ;SET IOACT\r
260         MOVSI TAC, ERF          ;ENABLE FOR EOR IF EOR FLAG NOT ON.\r
261         CONSZ 224,ERF           ;END OF RECORD?\r
262         MOVSI TAC,XNC           ;NO. COME BACK WHEN COMMAND BUFFER IS EMPTY\r
263         JRST MTGO1\r
264 \r
265 CHKLOK: CONSO 224,200           ;WRITE LOCKED?\r
266         JRST MTGO0              ;NO, DO MTAPE\r
267         PUSHJ PDP,QSTAT\r
268         JRST CHKLOK\r
269 \f;CLOSE OUTPUT\r
270 \r
271 MTCLSO: TLNN DEVDAT,OUTPB       ;HAS ANB OUTPUT BEEN DONE?\r
272         POPJ PDP,               ;NO. DON'T WRITE ON TAPE.\r
273         LDB TAC,PIOMOD          ;DUMP MODE?\r
274         CAIGE TAC,16\r
275         PUSHJ PDP,OUT           ;NO. OUTPUT LAST PARIAL BUFFER\r
276         PUSHJ PDP,WAIT1         ;WAIT FOR OUTPUT TO FINISH\r
277 MWLEOT: MOVEI T,3               ;WRITE EOF\r
278         PUSHJ PDP, MTAPE\r
279         MOVEI T,3               ;WRITE EOF\r
280         PUSHJ PDP, MTAPE\r
281         MOVEI T,7               ;BSP\r
282         JRST MTAPE\r
283 \r
284 MTCINI: PUSHJ PDP,RELCON\r
285         SETOM MRTEWN            ;SET CLOCK REQUEST COUNT TO -1\r
286         JRST MTNIO1\r
287 \r
288 \r
289 ;BLK COUNTED OUT\r
290 IFE FTCHECK+FTMONP,<\r
291 MTDCND: 0\r
292 >\r
293 MTDCN1: CONO PI,DCOFF           ;SHUT OFF DC CHANNEL\r
294         CONSZ DC,10000\r
295         SETOM MISSED\r
296         JEN @MTDCND\r
297 \f;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO\r
298 MTCINT: CONSO 224,@MTCCON\r
299         JRST .\r
300         JSR MTCSAV              ;SAVE AC'S\r
301         HRRZ DEVDAT,MTDEV       ;DVDB\r
302         LDB PROG,PJOBM;         JOB NUMBER\r
303         MOVE PROG,JBTADR(PROG)\r
304         MOVE IOS, DEVIOS(DEVDAT)\r
305         CONSO 224,TCF           ;TAPE CONTROL FREE\r
306         JRST MTEOR\r
307         XCT MTIDSP\r
308         JRST MTBSP              ;AFTER BACKSPACE\r
309         JRST MTERR              ;IF ERROR FOUND\r
310 MTPDUN: TLNN IOS,IODT\r
311         JRST MTNIO2\r
312         LDB TAC,PIOMOD\r
313         CAIL TAC,16\r
314         JRST DMPDUN             ;DUMP\r
315         TLNE IOS,IO\r
316         JRST MTNOTI             ;WRITING\r
317         SKIPF MTEOFF            ;NOT EOF?\r
318         JRST MTEOF\r
319         MOVEI TAC,@DEVIAD(DEVDAT)       ;BUFFER ADDRESS\r
320         MOVN TAC1,MTDCCN        ;WD CNT-1\r
321         AOBJ TAC1, .+1          ;WD CNT\r
322         HLLZS TAC1              ;CLR RT HALF\r
323         ADD TAC1,DCWRD          ;ADD CURRENT COUNT=NO, OF WDS\r
324         HLRM TAC1,1(TAC)        ;STORE AT WORD COUNT\r
325         PUSHJ PDP,ADVBFF\r
326         JRST MTEND1             ;NEXT BUFFER FULL\r
327         JRST MTCON              ;CONTINUE MODE\r
328 \r
329 DMPDUN: TLNN IOS,IO\r
330         SKIPN MTEOFF\r
331         JRST MTEOF+1\r
332         TROA IOS,IODEND\r
333 \r
334 MTEOF:  TLO IOS,IOEND\r
335         SETZM MTEOFF            ;CLEAR EOF FLAG\r
336 \r
337 ;AND FALL INTO MTEND1\r
338 \fMTEND1:        PUSHJ PDP,DETDO         ;DETACH DC (IF ASSIGNED)\r
339         PUSHJ PDP,ETCHK         ;CHECK FOR END OF TAPE (FOR DUMP MODE OUT)\r
340         PUSHJ PDP,CLRACT\r
341         CONSO 224,TCF           ;TAPE CONTROL FREE?\r
342         JRST MTION              ;NO. WAIT FOR IT.\r
343 MTFIN:\r
344 MTNIO:  TLZE IOS,IOW            ;CLEAR WAIT\r
345         PUSHJ PDP,SETIOD\r
346         PUSHJ PDP,DETMOC        ;DETACH MTC (IF HASMT SET) AND DC (IF IODT)\r
347         PUSHJ PDP,ETCHK         ;CHECK FOR END OF TAPE\r
348         PUSHJ PDP,CLRACT        ;RESTORE BITS,CLEAR IOACT\r
349 \r
350 ;AND FALL INTO MTNIO1\r
351 \fMTIO1: MOVN TAC,MTREDO         ;REPEAT COUNTER\r
352         HRREM TAC,MTERCN\r
353         SKIPGE MTREWN           ;IS ANY OTHER UNIT REWINDING AND\r
354                                 ;A SECOND COMMAND HELD UP?\r
355         POPJ PDP,               ;NO, DISMISS INTERRUPT\r
356 \r
357 ;SOME UNIT IS REWINDING AND HAS HAD ANOTHER COMMAND HELD UP.\r
358 ;CHECK ALL UNITS\r
359 \r
360 EXTERNAL SETIOD\r
361 \r
362 MTREWW: SETOM MTREWN            ;SET COUNT TO NO. UNITS IN REW WAIT\r
363         PUSH PDP,DEVDAT\r
364         MOVEI DEVDAT,MTCDDB     ;GET BEGINNING OF MT DATA BLOCK CHAIN\r
365 \r
366 REWLP:  MOVE IOS,DEVIOS(DEVDAT)\r
367         JUMPGE IOS,REW2         ;IS UNIT IN A REW WAIT?\r
368         PUSHJ PDP,REWCK         ;YES,SEE IF FINISHED REW.\r
369         JRST .+3                ;HAS FINISHED\r
370         JRST REW1               ;OFF- LET HUNG LOGICA TAKE CARE OF IT\r
371         JRST REW2               ;STILL REWINDING\r
372         TDZ IOS,[XWD IOREW,IOACT];GET JOB OUT OF IO WAIT\r
373         TLZE IOS,IOW\r
374         PUSHJ PDP,SETIOD        ;START JOB UP AGAIN\r
375         MOVEM IOS,DEVIOS(DEVDAT)\r
376         JRST REW2\r
377 \r
378 REW0:   PUSHJ   PDP,STOIOS      ;RESET HUNG COUNT IF STILL REWINDING\r
379 REW1:   AOS MTREWN              ;INCREMENT COUNT OF REW WAIT UNITS\r
380 REW2:   HLRZ DEVDAT,DEVSER(DEVDAT)              ;DEVDAT TO NEXT DDB\r
381         JUMPE DEVDAT,REW3               ;LAST ONE?\r
382         HRLZ DAT,DEVNAM(DEVDAT)         ;NO,GET LH OF NAME\r
383         CAIN DAT,(SIZBIT /MTA/)         ;STILL A MAGTAPE?\r
384         JRST REWLP              ;YES, CONTINUE\r
385 REW3:   POP PDP,DEVDAT\r
386         POPJ PDP,               ;YES, DISMISS INTERRUPT OF RETURN TO MTC OK\r
387 \r
388 ETCHK:  CONSZ MTS1,10000        ;EOT SEEN?\r
389         TRO IOS,IOIMPM+IOTEND   ;YES-SET FLAGS\r
390         TDZ IOS,[XWD IOREW,IOBOT];NO LONGER REWINDING\r
391         CONSZ MTS1,24002        ;UNLESSS\r
392         TRO IOS,IOBOT           ;IS REALLY REWINDING\r
393         POPJ PDP,               ;EXIT\r
394 \f;ROUTINE CALLED AT CLOCK LEVEL TO SEE IF ANY UNITS WHICH ARE IN A\r
395 ;REW WAIT HAVE FINISHED REWIND.\r
396 \r
397 INTERNAL MTCLOK\r
398 \r
399 MTCLOK: SKIPGE MTREQ            ;IS ANY JOB USING ANY UNIT NOW?\r
400         PUSHJ PDP,MTREWW        ;NO, CHECK ALL MAG TAPE\r
401                                 ;UNITS TO SEE IF JUST FINISHED\r
402                                 ;REWINDING(WHICH WERE IN REW WAIT)\r
403         SKIPGE MTREWN           ;YES,ARE ANY UNITS STILL IN REW WAIT?\r
404         POPJ PDP,               ;NO, RETURN TO CLOCK ROUTINE WITHOUT\r
405                                 ;PUTTING IN CLOCK REQUEST\r
406 \r
407 ;ROUTINE TO PUT IN A CLOCK REQUEST\r
408 \r
409 EXTERNAL JIFSC2\r
410 \r
411 MTCLK:  MOVEI TAC1,JIFSC2       ;CHECK EVERY HALF SECOND\r
412         HRLI TAC1,MTCLOK        ;DISPATCH ADDRESS\r
413         \r
414 \r
415         CONO PI,400             ;TURN OFF PI\r
416         IDPB TAC1,CLOCK         ;STORE CLOCK REQUEST\r
417         CONO PI,200             ;TURN ON PI\r
418         POPJ PDP,\r
419 \fMTNOTI:        PUSHJ PDP,ADVBFE                ;WRITING\r
420         JRST MTEND1\r
421 MTCON:  CONSZ 224,10000         ;END OF TAPE?\r
422         JRST MTEND1             ;YES - B/SP , EOF & EXIT\r
423         CONO DC,0\r
424         TLZE IOS,IOW\r
425         PUSHJ PDP,SETIOD\r
426         MOVEM IOS,DEVIOS(DEVDAT)\r
427         MOVN TAC,MTREDO\r
428         HRREM TAC,MTERCN\r
429         TLNN IOS,IO             ;INPUT OR OUTPUT?\r
430         JRST MTIN1              ;CALL INPUT SUBROUTINE\r
431         JRST MTOUT1             ;CALL OUTPUT SUBROUTINE\r
432 MTNIO2: HLRZ TAC,MTDEV          ;COMMAND\r
433         ANDI TAC,7400\r
434         CAIE TAC,3000           ;NO. SPACING ONE RECORD?\r
435         JRST MTNIO              ;YES, EXIT\r
436         CONSZ 224, 400          ;EOF?\r
437         TDO IOS,[XWD IOSEOF,IODEND]\r
438         JRST MTNIO              ;EXIT\r
439 \fMTEOR: MOVEI TAC,ERF\r
440         CONSO 224,ERF           ;END OF RECORD FLAG ON?\r
441         JRST MTIGN1             ;NO. WAIT FOR IT.\r
442         CONSZ DC,1000           ;DATA MISSED\r
443         SETOM MISSED            ;YES\r
444         CONSO DC,1600000        ;ANY CHARS. LEFT?\r
445         JRST MTEOR1             ;NO\r
446         MOVE T,DCWRD            ;GET IOWD\r
447         TLNN IOS,IO             ;O/P\r
448         SKIPE MISSED            ;NO, DATA MISSED\r
449         JRST MTEOR2             ;YES\r
450         CONI DC,TAC1            ;FETCH DC STATUS BITS\r
451         LSH TAC1,-15            ;SHIFT CHARACTER COUNT TO LSBITS\r
452         IMULI TAC1,-6           ;-NO OF BITS TO FAR RIGHT\r
453         CONO DC,@MDCSAV         ;?? IF DON SAYS SO, WELL, OK (JUST)\r
454         DATAI DC,TAC            ;FETCH LAST PART-WORD OF DATA\r
455         CONO DC,0               ;SHUT DOWN DC\r
456         LSH TAC,44(TAC1)        ;SHIFT LAST CHARACTERS TO LEFT END\r
457         JUMPG T,MTEOR1\r
458 \r
459         AOBJN T,.+1             ;BUMP DATA POINTER\r
460         MOVEM TAC,(T)           ;STORE LAST WORD\r
461         MOVEM T,DCWRD           ;AND BUMPED POINTER\r
462 \r
463 MTEOR1: CONSZ 224,LPE!CPE!400100        ;IF END OF RECORD. CHECK\r
464                                 ;PARITY,DATA MISSED, AND ILLEGAL FLAG\r
465         JRST    MTEOR2          ;IF ERROR CAUSED INTERRUPT TO\r
466                                 ;ERROR ROUTINE VIA TCF\r
467 MTECON: CONSZ 224, 400          ;EOF?\r
468         SETOM MTEOFF            ;SET EOF FLAG\r
469         AOS     MTBKCN(DEVDAT)  ;COUNT NO. OF BLKS READ OR WRITTENE\r
470                                 ;INCLUDING RETRIES\r
471         JRST @MTIDSP            ;YES.\r
472 \r
473 MTEOR2: SOS     MTIDSP          ;POINT TO ERROR ROUTINE\r
474         MOVEI   T,0\r
475         CONSZ   MTS1,20         ;LONGITUDINAL PARITY ERROR?\r
476         TLO     T,1000          ;YES, COUNT IN QUARTER 1\r
477         CONSZ   MTS1,10         ;LATERAL PARITY ERROR?\r
478         TLO     T,1             ;YES, COUNT IN QUARTER 2\r
479         CONSZ   MTS1,400000     ;ILLEGAL OP?\r
480         TRO     T,1000          ;YES, COUNT IN QUARTER 3\r
481         CONSO MTS1,100\r
482         SKIPF   MISSFD          ;DATA MISSED?\r
483         TRO     T,1             ;YES, COUNT IN QUARTER 4\r
484         ADDM    T,MTECNT(DEVDAT);ADD TO ERROR COUNTS FOR THIS DRIVE\r
485         JRST    MTECON          ;CHECK EOF\r
486 \fMTERR: HLRZ TAC,MTDEV          ;COMMAND\r
487         ANDI TAC,7400\r
488         TRNE IOS,IONRCK\r
489         JRST MTERR2\r
490         AOSLE TAC1,MTERCN\r
491         CAIL TAC1,3\r
492         JRST MTERR2\r
493         HLRZ TAC,MTDEV          ;COMMAND\r
494         ANDI TAC,770377\r
495         CONO 220,3400(TAC)      ;BSP\r
496         SOS MTIDSP\r
497 MTIGN:  MOVEI   TAC,TCF\r
498 MTIGN1: CONO    224,(TAC)\r
499         HRRZM   TAC,MTCCON\r
500         JRST    MTCRET\r
501 \r
502 MTERR2: CONSO 224,400100        ;SET IODERR IF ILLEG OR MISSED CHAR FLAGS\r
503         SKIPE MISSED            ;SET IODERR IF DATA MISSED\r
504         TRO IOS,IODERR\r
505         CONSZ 224,30            ;SET IODTER IF LONG OR LAT PARITY\r
506         TRO IOS,IODTER\r
507         JRST MTPDUN\r
508 \r
509 MTBSP:  MOVE TAC,MTDCCN         ;POINTER\r
510         MOVEM TAC,DOWRD         ;RESET POINTER WORD\r
511         HLRZ TAC,MTDEV          ;COMMAND\r
512         CONSO 224,XNC           ;WAIT FOR XNC\r
513         JRST .-1                ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED OFF)\r
514         SKIPLE TAC1,MTERCN\r
515         JRST MTBSP3\r
516 MTBSP2: TRO IOS,IOACT\r
517         HRLI TAC,ERF\r
518         JRST MTGO3\r
519 MTBSP3: TRNN TAC,1000           ;READING\r
520         TRCA TAC,100000         ;YES-CHANGE SLICE LEVEL\r
521         TRNN TAC1,1             ;NO\r
522         JRST MTBSP2\r
523         CONO 220,4400(TAC)      ;WRITE BLANK TAPE\r
524         AOS     MTERCN\r
525         JRST MTIGN\r
526 \fMTC=220                ;MAG TAPE CONTROL DEVICE NUMBER\r
527 \r
528 MTS1=224                ;MAG TAPE CONTROL STATUS REG 1\r
529 XNC=40000       ;TRANSFER NEW COMMAND\r
530 MTDC=2          ;MAG TAPE DATA CONTROL DEVICE NO.\r
531 TCF=1           ;TAPE CONTROL FREE\r
532 ERF=4           ;END OF RECORD FLAG\r
533 LPE=20          ;LONG. PARITY ERROR\r
534 CRE=10          ;CHAR. PARITY ERROR\r
535 SEL=2           ;UNIT TO COMMAND BUFFER\r
536 IOSEOF=4000     ;SPACING ONE RECORD FORWARD FOUND EOF\r
537 IOTEND=2000     ;EOT INDICATION\r
538 IONRCK=100      ;DO NOT RE-TRY ON ERRORS\r
539 IOBOT=4000      ;TAPE AT LOAD POINT\r
540 IODT=10000      ;A 1 FOR A DATA TRANSFER TYPE COMMAND\r
541 IOSLIC=2000     ;A 1 IF SLICE LEVEL IS 1, OTHERWISE 0.\r
542 HASMT=4000      ;IF A 1, THIS JOB HAS THE MAG TAPE CONTROL\r
543 IOREW=40000     ;A 1 IF UNIT IS REWINDING AND ANOTHER OPERATIONS\r
544                 ;IS ATTEMPTED ON SAME UNIT. MUST BE SIGN BIT.\r
545 \r
546 EXTERNAL ADVBFF,ADVBFE,DCREQ,MTCSAV,SETACT,CLRACT,ORACT,GETDCMT\r
547 EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTREQ\r
548 EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,HNGSTP,MTSIZ\r
549 EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN\r
550 EXTERNAL JOBPD1,JOBSAV\r
551 EXTERNAL JBTADR,JOBPFI,STDENS,CPOPJ1,CPOPJ2,UUOERR\r
552 EXTERNAL DCTCHN,DCLOC,DCLOC1,DCOFF,DCON,STOIOS,TPOPJ\r
553 \r
554 INTERNAL MTCINT,DETMDC,DETDC\r
555 \r
556 IFN FTCHECK+FTMONP,<\r
557 EXTERNAL MTEOFF,MTDEV,MTDCCN,DCWRD,MDCSAV,MISSED,MTERCN\r
558 EXTERNAL MTREN,MTCMDP,SVCNTR,MTCCON,MTIOSP,MTOCND\r
559 INTERNAL MTDCN1,MTPDUN\r
560 >\r
561 IFE FTCHECK+FTMONP,<\r
562 ;CONTROL DATA\r
563 \r
564 MTEOFF: 0       ;EOF FLAG\r
565 MTDEV:  0       ;XWD COMMAND,DEVICE DATA BLOCK\r
566 MTDCCN: 0       ;BLKI/O POINTER FOR REDO\r
567 DCWRD:  0       ;BLKI/O POINTER FOR DC\r
568 MDCSAV: 0       ;DC COMMAND\r
569 MISSED: 0       ;-1 IF DC CONTAINS PARTIAL WORD\r
570 MTERCN: 0       ;ERROR COUNTER\r
571 MTREWN: 0       ;NO. OF MAG TAPE UNITS-1 IN IO WAIT DOING REWINDS\r
572                 ;BECAUSE THEY REQUESTED OTHER OPERATIONS BEFORE REW\r
573                 ;FINISHED. -1 MEANS NONE, 0 MEANS 1 IN QUEUE\r
574 MTCMDP: 0       ;DUMP COMMAND LIST POINTER\r
575 SVCNTR: 0       ;DUMP COMMAND IOWD NEGATIVE WORD COUNT\r
576 MTCCON: 0       ;INTERRUPT FLAGS\r
577 MTIDSP: JRST MTPDUN\r
578 \r
579 >\r
580 \f;LOGICAL EBND OF TAPE LOOP\r
581 MTLEOT: MOVEI T,7               ;BACKSPACE\r
582         PUSHJ PDP,MTAPC2\r
583         PUSHJ PDP,MTCHK2        ;CALL INTERLOCK, PICKUP IOS\r
584                                 ;AFTER PREVIOS TASK FINISHED.\r
585 MTEOT2: MOVEI T,16              ;SAVE ONE FILE\r
586         PUSHJ PDP,MTAPE2\r
587         MOVEI T,6               ;SPAVE ONE RECORD\r
588         PUSHJ PDP, MTAPE\r
589         PUSHJ PDP,MTCHK2        ;CALL INTERLOCK, RETURN WHEN\r
590                                 ;SPACING FINISHED WITH NEW IOS\r
591         TLNN IOS, IOSEOF        ;WAS EOF DETECTED?\r
592         JRST MTEOT2             ;NO, RESUME SPACING.\r
593         MOVEI T,7               ;PREPARE FOR BACKSPACE MTAPE\r
594         JRST MTAPE2             ;BACKSPACE, LOGICAL EOT FOUND\r
595                                 ;RETURN TO MAKE PROGRAM\r
596 MTREDO: 12                      ;NUMBER OF TIUMES TO RE-EXECUTE\r
597 \f;DEVICE DEPENDENT DUMP MODES, MODE 16.\r
598 ;OUTPUT\r
599 MTDMPO: PUSH    PDP,UUO\r
600 MTDPO1: PUSHJ PDP,MTCHEK        ;IS SYSTEM AVAILABLE\r
601         TLO IOS,IO              ;WRITING\r
602         PUSHJ PDP,SAVCHK\r
603         MOVE TAC1, @MTOUT2      ;BLKO AND DATA CONTROL COMMAND\r
604         MOVEI T,1000            ;WRITING COMMAND\r
605 MTDMP1: HTLI TAC, PROG          ;ACTUAL ADDRESS OF COMMAND LIST\r
606         MOVEM TAC, MTDUMP       ;COMMAND POINTER\r
607         SKIPN TAC,@TAC          ;COMMAND WORD\r
608         JRST MTEND1\r
609         JUMPG TAC, MTDMP1       ;CHANGE COMMAND SEQUENCE\r
610         HLREM TAC, SVCNT        ;SAVE COUNTER\r
611         HRRZS TAC               ;GET ADDRESS ALONE\r
612         CAMGE TAC,AC1\r
613         JRST MTDMP2\r
614         SUB TAC, SVCNTR         ;GET LAST ADDRESS\r
615         CAMLE TAC, USRREL       ;LESS THAN END?\r
616         JRST MTDMP2             ;OUT OF BOUNDS\r
617         MOVE TAC, @MTCMDP       ;PICK UP POINTER AGAIN\r
618         ADDI TAC,(PROG)         ;GET ACTUAL ADDRESS\r
619         AOS     MTCMDP\r
620         PUSH    PDP,MTCMDP\r
621         PUSHJ PDP,MTINDC        ;MOVE TAPE\r
622         PUSHJ PDP,WAIT1\r
623         TLNN IOS, IO            ;WRITING?\r
624         JRST MTDPI1             ;READING\r
625         LDB AC2,PIOMOD          ;GET MODE\r
626         CAIE    AC2,2\r
627         JRST    MTDPO1\r
628         PUSHJ   PDP,MWLEOT\r
629         PUSHJ   PDP,MTCHK2\r
630         JRST    MTEND1\r
631 \r
632 SAVCHK: MOVEI AC1,JOBPFI\r
633         MOVE TAC,JOBPD1(JDAT)\r
634         TLNN    TAC,USRMOD\r
635         MOVEI AC1,JOBSAV\r
636         POP     PDP,TAC1\r
637         POP     PDP,TAC\r
638         JRST    (TAC1)\r
639 ;INPUT\r
640 MTDMPI: PUSH    PDP,UUO\r
641 MTDPI1: TRNE IOS,IODEND\r
642         JRST    TPOPJ\r
643         PUSHJ PDP,MTCHECK\r
644         TLZ IOS,IO              ;READING\r
645         PUSHJ PDP,SAVCHK\r
646         MOVE TAC1,@MTIN2        ;BLKI AND DATA CONTROL COMMAND\r
647         MOVEI T,2400            ;READ COMMAND\r
648         JRST MTDMP1             ;DUMP\r
649 ;ADDRESS ERROR\r
650 MTDMP2: PUSHJ PDP,MTEND1\r
651         JRST ADRERR\r
652 \r
653         END\r
654 \f\r