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