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
7 INTERNAL FTCHECK,FTMONP
\r
9 EXTERNAL MTCDDB,MTCDDS,MTECNT,MTRKCN
\r
11 IFE FTCHECK+FTMONP,<
\r
13 INTERNAL MTCDDB,MTCDSP
\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
19 MTCDDB: SIXBIT /MTA0/
\r
20 XWD 2*HUNGST,MTSIZ+1
\r
23 XWD DVMTA+DVIN+DVOUT+DVLNG,154407
\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
35 0 ;CUMMULATIVE RECORD COUNTER FOR THIS UNIT
\r
36 XP MTCDDS,.-ZZ ;SIUZE OF MTC DDB
\r
40 ;MAKE TAPE SERVICE SUBROUTINES
\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
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
57 POPJ PDP, ;CLOSE INPUT
\r
59 ;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS)
\r
61 DEFINE MTAPES (A) ;MARCO TO DEFINE LEGAL MTAPES UUO EFFECTIVE ADDRESSES.
\r
64 CODES=CODES!<1B<^D35-^O'A>>>>
\r
66 MTAPES <0,1,11,7,17,3,6,13,16,10> ;DEFINE WHICH CODES ARE LEGAL
\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
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
82 TLZ IOS,IOSLIC ;YES, CLEAR LEVEL
\r
83 TRNE T,SLEVEL ;SET TO 1?
\r
86 LSH T,^D8 ;MOVE TO FUNCTION
\r
87 ANDI T,7400 ;MODE BITS
\r
88 CAIN T,4000 ;LOGICAL EOT?
\r
90 CAIE T,1400 ;WRITE EOF
\r
91 CAIN T,5400 ;OR WRITE BLANK TAPE?
\r
92 JRST CHKLOK ;YES, CHECK WRITE-LOCK
\r
93 CONSO 224,4000 ;AT LOAD POINT?
\r
95 CAIE T,3400 ;YES, BACKSPACE RECORD?
\r
97 CAIN T,400 ;NO, REW?
\r
99 CAIN T,7400 ;NO, BACKSPACE FILE?
\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
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
117 MTGO3: MOVEI TAC1,MTPDUN
\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
128 CONO 224,(TAC) ;ENABLE FOR TCF OR ERF
\r
129 JRST STOIOS ;STORE HUNG COUNT, EXIT
\r
132 MTIN: PUSHJ PDP,MTCHEK ;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
138 MTIN2: MOVE TAC1,[BLKI DC,4000+MTDC*10]
\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
146 PUSHJ PDP,MTCHK4 ;WAIT FOR REWIND
\r
147 JRST MTCHEK ;GET DC & MT AGAIN
\r
151 MOVE IOS,DEVIOS(DEVDAT)
\r
152 TLZ IOS,IO ;CLEAR IO INDICATION SO "REWCK" WILL WORK
\r
153 PUSHJ PDP,MTCHK4 ;CHECK STATUS
\r
154 JRST MTCHK2 ;GET MT AGAIN
\r
156 MTCHK4: TLO IOS,HASMT ;THIS JOB NOW HAS MTC
\r
157 TLZE IOS,IOBEG ;FIRST OPERATION AFTER INIT OR SETSTS
\r
159 TLZ IOS,IOSLIC ;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
166 TLO IOS,IOREW ;SET DEVICE ACTIVE AND IN REWIND WAIT
\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
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
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
186 ; DETACH MTC, AND TURN OFF HASMT.
\r
187 ; THEN (IFF IODT ON)
\r
188 ; TURN OFF IODT AND DETACH DC
\r
192 TLZN IOS,HASMT ;THIS JOB HAS MTC?
\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
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
209 \f;ROUTINE TO SEE IF UNIT IS REWINDING
\r
210 ;CALL MOVE DEVDAT,ADDRESS OF DDB
\r
213 ; UNIT OFF OR WRITE LOCKED
\r
216 REWCK: LDB TAC,PUNIT
\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
226 POPJ PDP, ;YES- RETURN TO CALL+1
\r
229 THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT:
\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
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
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
253 HRRZM TAC1, MDCSAV ;SAVE DC COMMAND
\r
255 CONO PI,DCOFF ;TURN DC PI CHANNEL OFF
\r
256 MOVEM TAC1,DCLOC ;BLK COMMAND
\r
257 MOVE TAC1,[JSR MTDCND]
\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
265 CHKLOK: CONSO 224,200 ;WRITE LOCKED?
\r
266 JRST MTGO0 ;NO, DO MTAPE
\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
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
279 MOVEI T,3 ;WRITE EOF
\r
284 MTCINI: PUSHJ PDP,RELCON
\r
285 SETOM MTREWN ;SET CLOCK REQUEST COUNT TO -1
\r
290 IFE FTCHECK+FTMONP,<
\r
293 MTDCN1: CONO PI,DCOFF ;SHUT OFF DC CHANNEL
\r
297 \f;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO
\r
298 MTCINT: CONSO 224,@MTCCON
\r
300 JSR MTCSAV ;SAVE AC'S
\r
301 HRRZ DEVDAT,MTDEV ;DVDB
\r
302 LDB PROG,PJOBN; JOB NUMBER
\r
303 MOVE PROG,JBTADR(PROG)
\r
304 MOVE IOS, DEVIOS(DEVDAT)
\r
305 CONSO 224,TCF ;TAPE CONTROL FREE
\r
308 JRST MTBSP ;AFTER BACKSPACE
\r
309 JRST MTERR ;IF ERROR FOUND
\r
310 MTPDUN: TLNN IOS,IODT
\r
316 JRST MTNOTI ;WRITING
\r
317 SKIPE MTEOFF ;NOT EOF?
\r
319 MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS
\r
320 MOVN TAC1,MTDCCN ;WD CNT-1
\r
321 AOBJN 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
326 JRST MTEND1 ;NEXT BUFFER FULL
\r
327 JRST MTCON ;CONTINUE MODE
\r
329 DMPDUN: TLNN IOS,IO
\r
334 MTEOF: TLO IOS,IOEND
\r
335 SETZM MTEOFF ;CLEAR EOF FLAG
\r
337 ;AND FALL INTO MTEND1
\r
338 \fMTEND1: PUSHJ PDP,DETDC ;DETACH DC (IF ASSIGNED)
\r
339 PUSHJ PDP,ETCHK ;CHECK FOR END OF TAPE (FOR DUMP MODE OUT)
\r
341 CONSO 224,TCF ;TAPE CONTROL FREE?
\r
342 JRST MTIGN ;NO. WAIT FOR IT.
\r
344 MTNIO: TLZE IOS,IOW ;CLEAR WAIT
\r
346 PUSHJ PDP,DETMDC ;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
350 ;AND FALL INTO MTNIO1
\r
351 \fMTNIO1: MOVN TAC,MTREDO ;REPEAT COUNTER
\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
357 ;SOME UNIT IS REWINDING AND HAS HAD ANOTHER COMMAND HELD UP.
\r
362 MTREWW: SETOM MTREWN ;SET COUNT TO NO. UNITS IN REW WAIT
\r
364 MOVEI DEVDAT,MTCDDB ;GET BEGINNING OF MT DATA BLOCK CHAIN
\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
374 PUSHJ PDP,SETIOD ;START JOB UP AGAIN
\r
375 MOVEM IOS,DEVIOS(DEVDAT)
\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,(SIXBIT /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
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
394 \f;ROUTINE CALLED AT CLOCK LEVEL TO SEE IF ANY UNITS WHICH ARE IN A
\r
395 ;REW WAIT HAVE FINISHED REWIND.
\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
407 ;ROUTINE TO PUT IN A CLOCK REQUEST
\r
411 MTCLK: MOVEI TAC1,JIFSC2 ;CHECK EVERY HALF SECOND
\r
412 HRLI TAC1,MTCLOK ;DISPATCH ADDRESS
\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
419 \fMTNOTI: PUSHJ PDP,ADVBFE ;WRITING
\r
421 MTCON: CONSZ 224,10000 ;END OF TAPE?
\r
422 JRST MTEND1 ;YES - B/SP , EOF & EXIT
\r
426 MOVEM IOS,DEVIOS(DEVDAT)
\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
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
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
444 CONSO DC,160000 ;ANY CHARS. LEFT?
\r
446 MOVE T,DCWRD ;GET IOWD
\r
448 SKIPE MISSED ;NO, DATA MISSED
\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
459 AOBJN T,.+1 ;BUMP DATA POINTER
\r
460 MOVEM TAC,(T) ;STORE LAST WORD
\r
461 MOVEM T,DCWRD ;AND BUMPED POINTER
\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
473 MTEOR2: SOS MTIDSP ;POINT TO ERROR ROUTINE
\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
482 SKIPE MISSED ;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
493 HLRZ TAC,MTDEV ;COMMAND
\r
495 CONO 220,3400(TAC) ;BSP
\r
497 MTIGN: MOVEI TAC,TCF
\r
498 MTIGN1: CONO 224,(TAC)
\r
502 MTERR2: CONSO 224,400100 ;SET IODERR IF ILLEG OR MISSED CHAR FLAGS
\r
503 SKIPE MISSED ;SET IODERR IF DATA MISSED
\r
505 CONSZ 224,30 ;SET IODTER IF LONG OR LAT PARITY
\r
509 MTBSP: MOVE TAC,MTDCCN ;POINTER
\r
510 MOVEM TAC,DCWRD ;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
516 MTBSP2: TRO IOS,IOACT
\r
519 MTBSP3: TRNN TAC,1000 ;READING
\r
520 TRCA TAC,100000 ;YES-CHANGE SLICE LEVEL
\r
523 CONO 220,4400(TAC) ;WRITE BLANK TAPE
\r
526 \fMTC=220 ;MAG TAPE CONTROL DEVICE NUMBER
\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 CPE=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
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
554 INTERNAL MTCINT,DETMDC,DETDC
\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
561 IFE FTCHECK+FTMONP,<
\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
580 \f;LOGICAL EBND OF TAPE LOOP
\r
581 MTLEOT: MOVEI T,7 ;BACKSPACE
\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
587 MOVEI T,6 ;SPAVE ONE RECORD
\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
599 MTDMPO: PUSH PDP,UUO
\r
600 MTDPO1: PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE
\r
601 TLO IOS,IO ;WRITING
\r
603 MOVE TAC1, @MTOUT2 ;BLKO AND DATA CONTROL COMMAND
\r
604 MOVEI T,1000 ;WRITING COMMAND
\r
605 MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LIST
\r
606 MOVEM TAC, MTCMDP ;COMMAND POINTER
\r
607 SKIPN TAC,@TAC ;COMMAND WORD
\r
609 JUMPG TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE
\r
610 HLREM TAC, SVCNTR ;SAVE COUNTER
\r
611 HRRZS TAC ;GET ADDRESS ALONE
\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
621 PUSHJ PDP,MTINDC ;MOVE TAPE
\r
623 TLNN IOS, IO ;WRITING?
\r
624 JRST MTDPI1 ;READING
\r
625 LDB AC2,PIOMOD ;GET MODE
\r
632 SAVCHK: MOVEI AC1,JOBPFI
\r
633 MOVE TAC,JOBPD1(JDAT)
\r
640 MTDMPI: PUSH PDP,UUO
\r
641 MTDPI1: TRNE IOS,IODEND
\r
644 TLZ IOS,IO ;READING
\r
646 MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAND
\r
647 MOVEI T,2400 ;READ COMMAND
\r
650 MTDMP2: PUSHJ PDP,MTEND1
\r