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
8 INTERNAL FTCHECK,FTMONP
\r
10 EXTERNAL MTCDDB,MTCDDS,MTECNT,MTRKCN
\r
12 IFE FTCHECK+FTMONP,<
\r
14 INTERNAL MTCDDB,MTCDSP
\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
20 MTCDDB: SIXBIT /MTA0/
\r
21 XWD 2*HUNGST,MTSIZ+1
\r
24 XWD DVMTA+DVIN+DVOUT+DVLNG,154407
\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
36 0 ;CUMMULATIVE RECORD COUNTER FOR THIS UNIT
\r
37 XP MTCDDS,.-ZZ ;SIUZE OF MTC DDB
\r
41 ;MAKE TAPE SERVICE SUBROUTINES
\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
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
58 POPJ PDP, ;CLOSE INPUT
\r
60 ;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS)
\r
63 DEFINE MTAPES (A) ;MARCO TO DEFINE LEGAL MTAPES UUO EFFECTIVE ADDRESSES.
\r
66 CODES=CODES!<1B<^D35-^O'A>>>>
\r
68 MTAPES <0,1,11,7,17,3,6,13,16,10> ;DEFINE WHICH CODES ARE LEGAL
\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
77 TRZ IOS,776000 ;CLEAR ERROR BITS ,IOF.
\r
78 ;IOACT, IOBOT AND IOTEND.
\r
79 SKIPA T,UUO ;CALL MTAPE2
\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
85 TLZ IOS,IOSLIC ;YES, CLEAR LEVEL
\r
86 TRNE T,SLEVEL ;SET TO 1?
\r
89 LSH T,^D8 ;MOVE TO FUNCTION
\r
90 ANDI T,7400 ;MODE BITS
\r
91 CAIN T,4000 ;LOGICAL EOT?
\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
98 CAIE T,3400 ;YES, BACKSPACE RECORD?
\r
99 CAIN T,400 ;NO, REW?
\r
101 CAIN T,7400 ;NO, BACKSPACE FILE?
\r
103 MTGO0: MOVSI TAC,TCF ;LOOK FOR TAPE CONTROL FREE ONLY
\r
105 ;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD.
\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
120 MTGO3: MOVEI TAC1,MTPDUN
\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
131 CONO 224,(TAC) ;ENABLE FOR TCF OR ERF
\r
132 JRST STOIOS ;STORE HUNG COUNT, EXIT
\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
141 MTIN2: MOVE TAC1,[BLKI DC,4000+MTDC*10]
\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
150 PUSHJ PDP,MTCHK4 ;WAIT FOR REWIND
\r
151 JRST MTCHEK ;GET DC & MT AGAIN
\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
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
169 TLO IOS,IOREW ;SET DEVICE ACTIVE AND IN REWIND WAIT
\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
177 QSTAT: PUSHJ PDP,DETMDC ;DETACH MTC AND DC
\r
178 JRST HNGSTP ;CHECK STATUS (PULL FINGERS OUT, ETC)
\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
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
193 ; DETACH MTC, AND TURN OFF HASMT.
\r
194 ; THEN (IFF IODT ON)
\r
195 ; TURN OFF IODT AND DETACH DC
\r
199 TLZN IOS,HASMT ;THIS JOB HAS MTC?
\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
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
217 ;ROUTINE TO SEE IF UNIT IS REWINDING
\r
218 ;CALL MOVE DEVDAT,ADDRESS OF DDB
\r
221 ; UNIT OFF OR WRITE LOCKED
\r
224 REWCK: LDB TAC,PUNIT
\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
234 POPJ PDP, ;YES- RETURN TO CALL+1
\r
238 THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT:
\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
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
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
263 HRRZM TAC1, MDCSAV ;SAVE DC COMMAND
\r
265 CONO PI,DCOFF ;TURN DC PI CHANNEL OFF
\r
266 MOVEM TAC1,DCLOC ;BLK COMMAND
\r
267 MOVE TAC1,[JSR MTDCND]
\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
277 CHKLOK: CONSO 224,200 ;WRITE LOCKED?
\r
278 JRST MTGO0 ;NO, DO MTAPE
\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
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
291 MOVEI T,3 ;WRITE EOF
\r
297 MTCINI: PUSHJ PDP,RELCON
\r
298 SETOM MTREWN ;SET CLOCK REQUEST COUNT TO -1
\r
304 IFE FTCHECK+FTMONP,<
\r
307 MTDCN1: CONO PI,DCOFF ;SHUT OFF DC CHANNEL
\r
313 ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO
\r
314 MTCINT: CONSO 224,@MTCCON
\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
324 JRST MTBSP ;AFTER BACKSPACE
\r
325 JRST MTERR ;IF ERROR FOUND
\r
326 MTPDUN: TLNN IOS,IODT
\r
332 JRST MTNOTI ;WRITING
\r
333 SKIPE MTEOFF ;NOT EOF?
\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
342 JRST MTEND1 ;NEXT BUFFER FULL
\r
343 JRST MTCON ;CONTINUE MODE
\r
345 DMPDUN: TLNN IOS,IO
\r
350 MTEOF: TLO IOS,IOEND
\r
351 SETZM MTEOFF ;CLEAR EOF FLAG
\r
353 ;AND FALL INTO MTEND1
\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
358 CONSO 224,TCF ;TAPE CONTROL FREE?
\r
359 JRST MTIGN ;NO. WAIT FOR IT.
\r
361 MTNIO: TLZE IOS,IOW ;CLEAR WAIT
\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
367 ;AND FALL INTO MTNIO1
\r
368 \fMTNIO1: MOVN TAC,MTREDO ;REPEAT COUNTER
\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
374 ;SOME UNIT IS REWINDING AND HAS HAD ANOTHER COMMAND HELD UP.
\r
379 MTREWW: SETOM MTREWN ;SET COUNT TO NO. UNITS IN REW WAIT
\r
381 MOVEI DEVDAT,MTCDDB ;GET BEGINNING OF MT DATA BLOCK CHAIN
\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
391 PUSHJ PDP,SETIOD ;START JOB UP AGAIN
\r
392 MOVEM IOS,DEVIOS(DEVDAT)
\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
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
412 \f;ROUTINE CALLED AT CLOCK LEVEL TO SEE IF ANY UNITS WHICH ARE IN A
\r
413 ;REW WAIT HAVE FINISHED REWIND.
\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
425 ;ROUTINE TO PUT IN A CLOCK REQUEST
\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
435 \fMTNOTI: PUSHJ PDP,ADVBFE ;WRITING
\r
437 MTCON: CONSZ 224,10000 ;END OF TAPE?
\r
438 JRST MTEND1 ;YES - B/SP , EOF & EXIT
\r
442 MOVEM IOS,DEVIOS(DEVDAT)
\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
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
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
462 CONSO DC,160000 ;ANY CHARS. LEFT?
\r
464 MOVE T,DCWRD ;GET IOWD
\r
466 SKIPE MISSED ;NO, DATA MISSED
\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
476 AOBJN T,.+1 ;BUMP DATA POINTER
\r
477 MOVEM TAC,(T) ;STORE LAST WORD
\r
478 MOVEM T,DCWRD ;AND BUMPED POINTER
\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
490 MTEOR2: SOS MTIDSP ;POINT TO ERROR ROUTINE
\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
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
504 MTERR: HLRZ TAC,MTDEV ;COMMAND
\r
511 HLRZ TAC,MTDEV ;COMMAND
\r
513 CONO 220,3400(TAC) ;BSP
\r
515 MTIGN: MOVEI TAC,TCF
\r
516 MTIGN1: CONO 224,(TAC)
\r
520 MTERR2: CONSO 224,400100 ;SET IODERR IF ILLEG OR MISSED CHAR FLAGS
\r
521 SKIPE MISSED ;SET IODERR IF DATA MISSED
\r
523 CONSZ 224,30 ;SET IODTER IF LONG OR LAT PARITY
\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
534 MTBSP2: TRO IOS,IOACT
\r
537 MTBSP3: TRNN TAC,1000 ;READING
\r
538 TRCA TAC,100000 ;YES-CHANGE SLICE LEVEL
\r
541 CONO 220,4400(TAC) ;WRITE BLANK TAPE
\r
545 MTC=220 ;MAG TAPE CONTROL DEVICE NUMBER
\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
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
574 INTERNAL MTCINT,DETMDC,DETDC
\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
581 IFE FTCHECK+FTMONP,<
\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
601 ;LOGICAL END OF TAPE LOOP
\r
602 MTLEOT: MOVEI T,7 ;BACKSPACE
\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
608 MOVEI T,6 ;SPAVE ONE RECORD
\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
620 MTDMPO: PUSH PDP,UUO
\r
621 MTDPO1: PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE
\r
622 TLO IOS,IO ;WRITING
\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
630 JUMPG TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE
\r
631 HLREM TAC, SVCNTR ;SAVE COUNTER
\r
632 HRRZS TAC ;GET ADDRESS ALONE
\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
642 PUSHJ PDP,MTINDC ;MOVE TAPE
\r
644 TLNN IOS, IO ;WRITING?
\r
645 JRST MTDPI1 ;READING
\r
646 LDB AC2,PIOMOD ;GET MODE
\r
653 SAVCHK: MOVEI AC1,JOBPFI
\r
654 MOVE TAC,JOBPD1(JDAT)
\r
661 MTDMPI: PUSH PDP,UUO
\r
662 MTDPI1: TRNE IOS,IODEND
\r
665 TLZ IOS,IO ;READING
\r
667 MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAND
\r
668 MOVEI T,2400 ;READ COMMAND
\r
672 MTDMP2: PUSHJ PDP,MTEND1
\r