TITLE MTCSR6 - MAGNETIC TAPE ROUTINES FOR 516 CONTROL SUBTTL C.WHITE 27-APR-69 V406 XP VMTCSR,406 ;DEFINE GLOBAL VERSION NUMBER FOR LOADER MAP ENTRY MTCSR6 MTCSR6: INTERNAL FTCHECK,FTMONP IFN FTCHECK+FTMONP,< EXTERNAL MTCDDB,MTCDDS,MTECNT,MTRKCN > IFE FTCHECK+FTMONP,< INTERNAL MTCDDB,MTCDSP ;MTC DEVICE DATA BLOCK ;REMAINING MTA DDB'S (IF ANY) ARE ;GENERATED OUT OF LINE AT BUILD TIME ZZ=. MTCDDB: SIXBIT /MTA0/ XWD 2*HUNGST,MTSIZ+1 0 EXP MTCDSP XWD DVMTA+DVIN+DVOUT+DVLNG,154407 0 0 XWD PROG,0 XWD PROG,0 XP MTECNT,.-ZZ 0 ;CUMMULATIVE ERROR COUNT FOR THIS UNIT ;BITS 0-8=LONG, PARITY ERROR COUNT ;BITS 9-17=LAT, PARITY ERROR COUNT ;BITS 18-26=ILL. OP. COUNT ;BITS 27-35=DATA MISSED COUNT XP MTBKCN,.-ZZ 0 ;CUMMULATIVE RECORD COUNTER FOR THIS UNIT XP MTCDDS,.-ZZ ;SIUZE OF MTC DDB > T=ITEM ;MAKE TAPE SERVICE SUBROUTINES JRST MTCINI ;INITIALIZATION JRST MTHUNG ;MTA HUNG TIMEOUT. RELEASE DATA CONTROL. ;MAGTAPE CONTROL. PRINT ERROR AND STOP JOB. MTCDSP: POPJ PDP, ;RELEASE JRST MTCLSO ;CLOSE OUTPUT JRST MTOUT ;OUTPUT JRST MTIN ;INTPUT JRST CPOPJ1 ;ENTER IN DIRECTORY JRST CPOPJ1 ;LOOKUP IN DIRECTORY JRST MTDMPO ;DUMP OUTPUT JRST MTDMPI ;DUMP INPUT POPJ PDP, ;SETO POPJ PDP, ;SETO POPJ PDP, ;GETF JRST CPOPJ1 ;RENAME POPJ PDP, ;CLOSE INPUT POPJ PDP, ;UTPCLR ;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS) DEFINE MTAPES (A) ;MARCO TO DEFINE LEGAL MTAPES UUO EFFECTIVE ADDRESSES. < CODES=0 IRP A, < CODES=CODES!<1B<^D35-^O'A>>>> MTAPES <0,1,11,7,17,3,6,13,16,10> ;DEFINE WHICH CODES ARE LEGAL MOVEI T,1 ;CHECK FOR LEGAL MTAPE UUO LSH T,(UUO) ;SHIFT BIT ACCORDING TO THE USER'S UUO TRNN T,CODES ;DID HE SPECIFY A LEGAL CODE ? JRST UUOERR ;NO--TYPE MONITOR ERROR MESSAGE. SOJE T,MTP0 ;CHECK FOR MTAPE 0 (SPECIAL SYNC WAIT NO-OP) PUSHJ PDP,MTCHK2 TRZ IOS,776000 ;CLEAR ERROR BITS ,IOF. ;IOACT, IOBOT AND IOTEND. SKIPA T,UUO ;CALL MTAPE2 MTAPE: PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AVAIL. MTAPE2: TDZ IOS,[XWD IODT!IOSEOF,IOACT] TRNN T,SLICE ;SET SLICE LEVEL THIS UUO? JRST NOSET ;NO TLZ IOS,IOSLIC ;YES, CLEAR LEVEL TRNE T,SLEVEL ;SET TO 1? TLO IOS,IOSLIC ;YES NOSET: LSH T,^D8 ;MOVE TO FUNCTION ANDI T,7400 ;MODE BITS CAIN T,4000 ;LOGICAL EOT? JRST MTLEOT CAIE T,1400 ;WRITE EOF CAIN T,5400 ;OR WRITE BLANK TAPE? JRST CHKLOK ;YES, CHECK WRITE-LOCK CONSO 224,4000 ;AT LOAD POINT? JRST MTGO0 ;NO CAIE T,3400 ;YES, BACKSPACE RECORD? CAIN T,400 ;NO, REW? JRST MTFIN ;YES CAIN T,7400 ;NO, BACKSPACE FILE? JRST MTFIN ;YES MTGO0: MOVSI TAC,TCF ;LOOK FOR TAPE CONTROL FREE ONLY ;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD. MTGO1: LDB TAC1,PUNIT ;UNIT DPB TAC1,[POINT 3,T,31] ;UNIT LDB TAC1, [POINT 3, IOS,28] ;DENSITY PARITY TRNN TAC1,7 ;NO DENSITY OR PARITY SPECIFIED? IORI TAC1,STDENS ;YES, USE STANDARD XORI TAC1, 5 ;ODD, 556 DPB TAC1,[POINT 3,T,23] HRRI TAC,MTCCHN(T) ;CHANNEL TRO TAC,200 ;INHIBIT RETURN TO POOL TLNE IOS,IOSLIC ;SLICE LEVEL A 1? TRO TAC,100000 ;YES, SET COMMAND. HRRM DEVDAT,MTDEV ;COMMAND, DVDB HRLM TAC,MTDEV MTGO3: MOVEI TAC1,MTPDUN HRRM TAC1,MTIDSP SETZM MTEOFF ;CLEAR EOF FLAG TLNN IOS,IODT ;IS THIS A DATA TRANSFER OPERATION ;REQUIRING DATA CONTROL JRST MTGO2 ;NO, MUST BE SPACING OPERATION CONO DC,@MDCSAV ;YES, ATTACH DC TO MAGTAPE CONO PI,DCON ;TURN DC PI CHANNEL ON MTGO2: SETZM MISSED ;CLEAR DATA MISSED FLAG STARTDV MTC HLRZS TAC CONO 224,(TAC) ;ENABLE FOR TCF OR ERF JRST STOIOS ;STORE HUNG COUNT, EXIT ;READ MTIN: PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE?> TLZ IOS,IO ;READING. MTIN1: SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS,PROG INCLUDED ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1 MOVEI T,2400 ;READ MTIN2: MOVE TAC1,[BLKI DC,4000+MTDC*10] JRST MTINDC ;IS SYSTEM AVAILABLE MTCHEK: PUSHJ PDP,GETDCMT ;GET DATA AND MAG TAPE CONTROLS AOSE MTREQ ;ARGUMENT MOVE IOS,DEVIOS(DEVDAT) TLO IOS,IODT ;FLAG DATA TRANSFER XCT @(PDP) PUSHJ PDP,MTCHK4 ;WAIT FOR REWIND JRST MTCHEK ;GET DC & MT AGAIN MTCHK2: AOSE MTREQ PUSHJ PDP,MTWAIT MOVE IOS,DEVIOS(DEVDAT) TLZ IOS,IO ;CLEAR IO INDICATION SO "REWCK" WILL WORK PUSHJ PDP,MTCHK4 ;CHECK STATUS JRST MTCHK2 ;GET MT AGAIN MTCHK4: TLO IOS,HASMT ;THIS JOB NOW HAS MTC TLZE IOS,IOBEG ;FIRST OPERATION AFTER INIT OR SETSTS TLZ IOS,IOSLIC ;YES, SET SLICE LEVEL TO 0. TLZ IOS,IOREW ;CLEAR MAG TAPE REWINDING PUSHJ PDP,REWCK ;CHECK IF REWINDING? JRST TPOPJ ;NO - STATUS OK JRST QSTAT ;QUERY STATUS PUSHJ PDP,DETMDC ;REWINDING- DETACH MTC, DC AND TURN OFF ;IODT AND HASMT TLO IOS,IOREW ;SET DEVICE ACTIVE AND IN REWIND WAIT PUSHJ PDP,ORACT AOSG MTREWN ;ADD 1 TO REWIND WAIT COUNT PUSHJ PDP,MTCLK ;PUT IN CLOCK REQUEST. ;(NO OTHER UNITS IN REWIND WAIT) JRST WSYNC QSTAT: PUSHJ PDP,DETMDC ;DETACH MTC AND DC JRST HNGSTP ;CHECK STATUS (PULL FINGERS OUT, ETC) ;MTAPE 0 WAITS UNTIL THE CONTROL IS FREE ;THUS MTAPE 0 PROVIDES THE ONLY WAY FOR A USER TO WAIT UNTIL A SPACING OPERATION ; (I.E., SKIP, BACKSPACE, OR REWIND) IS COMPLETED. MTP0: PUSHJ PDP,MTCHK2 ;WAIT FOR CONTROL TO BECOME FREE, ; THEN GIVE IT BACK IMMEDIATELY, ; AND RETURN TO THE USER. ;DETMDC- ; DETACH MTC, AND TURN OFF HASMT. ; THEN (IFF IODT ON) ; TURN OFF IODT AND DETACH DC DETMDC: MTHUNG: TLZN IOS,HASMT ;THIS JOB HAS MTC? JRST STOIOS ;NO PUSHJ PDP,RELCON SOSL MTREQ ;YES- ANYONE ELSE WAITING FOR IT? SETOM MTAVAL ;YES- FLAG AS JUST BECOME AVAILABLE DETDC: TLZN IOS,IODT ;DOES JOB HAVE DATA CONTROL? JRST STOIOS ;NO- EXIT CONO DC,0 CONO PI,DCOFF SOSL DCREQ ;ANYONE ELSE WAITING FOR IT? SETOM DCAVAL ;YES- FLAG AS JUST BECOME AVAILABLE JRST STOIOS ;AND EXIT RELCON: CONO 220,0 CONO 224,0 SETZM MTCCON POPJ PDP, ;ROUTINE TO SEE IF UNIT IS REWINDING ;CALL MOVE DEVDAT,ADDRESS OF DDB ; PUSHJ PDP,REWCK ; UNIT READY ; UNIT OFF OR WRITE LOCKED ; UNIT REWINDING REWCK: LDB TAC,PUNIT ROT TAC,4 CONO MTC,200(TAC) CONO MTS1,SEL ;JAM UNIT INTO COMMAND BUFFER CONSZ MTS1,20000 ;SKIP IF REWIND MOTION OFF JRST CPOPJ2 ;RETURN TO CALL+2 IF TAPE REWINDING TLNE IOS,IO ;OUTPUT ? CONSO MTS1,200 ;YES-WRITE LOCKED ? CONSO MTS1,2 ;NO-IS UNIT READY? AOS (PDP) POPJ PDP, ;YES- RETURN TO CALL+1 REPEAT 0,< THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT: DELETE 1023K TO ?? ADD 1B18H TO 1B08K REW(1)(GND) 1B19S TO 1B08L FWD/LP(1)(GND) 1B08N TO 1B23K (REW(1).OR.FWD/LP(1)) THIS MODE SETS IOP22(1) WHILE MAGTAPE IS REWINDING OR SPACING FORWARD TO LOAD POINT- IF ENABLES THE PROCESSOR TO DISTINGUISH BETWEEN A TAPE WHICH IS AT THE END OF A REWIND COMMAND, AND A TAPE WHICH IS SWITCHED TO LOCAL, OR OFF> ;WRITE MTOUT: PUSHJ PDP,MTCHEK TLO IOS,IO ;WRITING MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDED MOVN TAC1,1(TAC) ;-WD COUNT HRL TAC,TAC1 ;-WD CMT,BUFFER AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT MTOUT2: MOVE TAC1,[BLKO DC,3400+MTDC*10] MOVEI T,1000 ;WRITE MTINDC: MOVEM TAC,MTDCCN ;BLKO POINTER IORI TAC1,DCTCHN ;DC PI CHANNEL NO. MOVEM TAC,DCWRD HRRZM TAC1, MDCSAV ;SAVE DC COMMAND HRRI TAC1,DCWRD CONO PI,DCOFF ;TURN DC PI CHANNEL OFF MOVEM TAC1,DCLOC ;BLK COMMAND MOVE TAC1,[JSR MTDCND] MOVEM TAC1,DCLOC1 TRO IOS,IOACT ;SET IOACT MOVSI TAC, ERF ;ENABLE FOR EOR IF EOR FLAG NOT ON. CONSZ 224,ERF ;END OF RECORD? MOVSI TAC,XNC ;NO. COME BACK WHEN COMMAND BUFFER IS EMPTY JRST MTGO1 CHKLOK: CONSO 224,200 ;WRITE LOCKED? JRST MTGO0 ;NO, DO MTAPE PUSHJ PDP,QSTAT JRST CHKLOK ;CLOSE OUTPUT MTCLSO: TLNN DEVDAT,OUTPB ;HAS ANB OUTPUT BEEN DONE? POPJ PDP, ;NO. DON'T WRITE ON TAPE. LDB TAC,PIOMOD ;DUMP MODE? CAIGE TAC,16 PUSHJ PDP,OUT ;NO. OUTPUT LAST PARIAL BUFFER PUSHJ PDP,WAIT1 ;WAIT FOR OUTPUT TO FINISH MWLEOT: MOVEI T,3 ;WRITE EOF PUSHJ PDP, MTAPE MOVEI T,3 ;WRITE EOF PUSHJ PDP, MTAPE MOVEI T,7 ;BSP JRST MTAPE MTCINI: PUSHJ PDP,RELCON SETOM MTREWN ;SET CLOCK REQUEST COUNT TO -1 JRST MTNIO1 ;BLK COUNTED OUT IFE FTCHECK+FTMONP,< MTDCND: 0 > MTDCN1: CONO PI,DCOFF ;SHUT OFF DC CHANNEL CONSZ DC,10000 SETOM MISSED JEN @MTDCND ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO MTCINT: CONSO 224,@MTCCON JRST . JSR MTCSAV ;SAVE AC'S HRRZ DEVDAT,MTDEV ;DVDB LDB PROG,PJOBN; JOB NUMBER MOVE PROG,JBTADR(PROG) MOVE IOS, DEVIOS(DEVDAT) CONSO 224,TCF ;TAPE CONTROL FREE JRST MTEOR XCT MTIDSP JRST MTBSP ;AFTER BACKSPACE JRST MTERR ;IF ERROR FOUND MTPDUN: TLNN IOS,IODT JRST MTNIO2 LDB TAC,PIOMOD CAIL TAC,16 JRST DMPDUN ;DUMP TLNE IOS,IO JRST MTNOTI ;WRITING SKIPE MTEOFF ;NOT EOF? JRST MTEOF MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS MOVN TAC1,MTDCCN ;WD CNT-1 AOBJN TAC1, .+1 ;WD CNT HLLZS TAC1 ;CLR RT HALF ADD TAC1,DCWRD ;ADD CURRENT COUNT=NO, OF WDS HLRM TAC1,1(TAC) ;STORE AT WORD COUNT PUSHJ PDP,ADVBFF JRST MTEND1 ;NEXT BUFFER FULL JRST MTCON ;CONTINUE MODE DMPDUN: TLNN IOS,IO SKIPN MTEOFF JRST MTEOF+1 TROA IOS,IODEND MTEOF: TLO IOS,IOEND SETZM MTEOFF ;CLEAR EOF FLAG ;AND FALL INTO MTEND1 MTEND1: PUSHJ PDP,DETDC ;DETACH DC (IF ASSIGNED) PUSHJ PDP,ETCHK ;CHECK FOR END OF TAPE (FOR DUMP MODE OUT) PUSHJ PDP,CLRACT CONSO 224,TCF ;TAPE CONTROL FREE? JRST MTIGN ;NO. WAIT FOR IT. MTFIN: MTNIO: TLZE IOS,IOW ;CLEAR WAIT PUSHJ PDP,SETIOD PUSHJ PDP,DETMDC ;DETACH MTC (IF HASMT SET) AND DC (IF IODT) PUSHJ PDP,ETCHK ;CHECK FOR END OF TAPE PUSHJ PDP,CLRACT ;RESTORE BITS,CLEAR IOACT ;AND FALL INTO MTNIO1 MTNIO1: MOVN TAC,MTREDO ;REPEAT COUNTER HRREM TAC,MTERCN SKIPGE MTREWN ;IS ANY OTHER UNIT REWINDING AND ;A SECOND COMMAND HELD UP? POPJ PDP, ;NO, DISMISS INTERRUPT ;SOME UNIT IS REWINDING AND HAS HAD ANOTHER COMMAND HELD UP. ;CHECK ALL UNITS EXTERNAL SETIOD MTREWW: SETOM MTREWN ;SET COUNT TO NO. UNITS IN REW WAIT PUSH PDP,DEVDAT MOVEI DEVDAT,MTCDDB ;GET BEGINNING OF MT DATA BLOCK CHAIN REWLP: MOVE IOS,DEVIOS(DEVDAT) JUMPGE IOS,REW2 ;IS UNIT IN A REW WAIT? PUSHJ PDP,REWCK ;YES,SEE IF FINISHED REW. JRST .+3 ;HAS FINISHED JRST REW1 ;OFF- LET HUNG LOGICA TAKE CARE OF IT JRST REW0 ;STILL REWINDING TDZ IOS,[XWD IOREW,IOACT];GET JOB OUT OF IO WAIT TLZE IOS,IOW PUSHJ PDP,SETIOD ;START JOB UP AGAIN MOVEM IOS,DEVIOS(DEVDAT) JRST REW2 REW0: PUSHJ PDP,STOIOS ;RESET HUNG COUNT IF STILL REWINDING REW1: AOS MTREWN ;INCREMENT COUNT OF REW WAIT UNITS REW2: HLRZ DEVDAT,DEVSER(DEVDAT) ;DEVDAT TO NEXT DDB JUMPE DEVDAT,REW3 ;LAST ONE? HRLZ DAT,DEVNAM(DEVDAT) ;NO,GET LH OF NAME CAIN DAT,(SIXBIT /MTA/) ;STILL A MAGTAPE? JRST REWLP ;YES, CONTINUE REW3: POP PDP,DEVDAT POPJ PDP, ;YES, DISMISS INTERRUPT OF RETURN TO MTC OK ETCHK: CONSZ MTS1,10000 ;EOT SEEN? TRO IOS,IOIMPM+IOTEND ;YES-SET FLAGS TDZ IOS,[XWD IOREW,IOBOT];NO LONGER REWINDING CONSZ MTS1,24000 ;UNLESSS TRO IOS,IOBOT ;IS REALLY REWINDING POPJ PDP, ;EXIT ;ROUTINE CALLED AT CLOCK LEVEL TO SEE IF ANY UNITS WHICH ARE IN A ;REW WAIT HAVE FINISHED REWIND. INTERNAL MTCLOK MTCLOK: SKIPGE MTREQ ;IS ANY JOB USING ANY UNIT NOW? PUSHJ PDP,MTREWW ;NO, CHECK ALL MAG TAPE ;UNITS TO SEE IF JUST FINISHED ;REWINDING(WHICH WERE IN REW WAIT) SKIPGE MTREWN ;YES,ARE ANY UNITS STILL IN REW WAIT? POPJ PDP, ;NO, RETURN TO CLOCK ROUTINE WITHOUT ;PUTTING IN CLOCK REQUEST ;ROUTINE TO PUT IN A CLOCK REQUEST EXTERNAL JIFSC2 MTCLK: MOVEI TAC1,JIFSC2 ;CHECK EVERY HALF SECOND HRLI TAC1,MTCLOK ;DISPATCH ADDRESS CONO PI,400 ;TURN OFF PI IDPB TAC1,CLOCK ;STORE CLOCK REQUEST CONO PI,200 ;TURN ON PI POPJ PDP, MTNOTI: PUSHJ PDP,ADVBFE ;WRITING JRST MTEND1 MTCON: CONSZ 224,10000 ;END OF TAPE? JRST MTEND1 ;YES - B/SP , EOF & EXIT CONO DC,0 TLZE IOS,IOW PUSHJ PDP,SETIOD MOVEM IOS,DEVIOS(DEVDAT) MOVN TAC,MTREDO HRREM TAC,MTERCN TLNN IOS,IO ;INPUT OR OUTPUT? JRST MTIN1 ;CALL INPUT SUBROUTINE JRST MTOUT1 ;CALL OUTPUT SUBROUTINE MTNIO2: HLRZ TAC,MTDEV ;COMMAND ANDI TAC,7400 CAIE TAC,3000 ;NO. SPACING ONE RECORD? JRST MTNIO ;YES, EXIT CONSZ 224, 400 ;EOF? TDO IOS,[XWD IOSEOF,IODEND] JRST MTNIO ;EXIT MTEOR: MOVEI TAC,ERF CONSO 224,ERF ;END OF RECORD FLAG ON? JRST MTIGN1 ;NO. WAIT FOR IT. CONSZ DC,1000 ;DATA MISSED SETOM MISSED ;YES CONSO DC,160000 ;ANY CHARS. LEFT? JRST MTEOR1 ;NO MOVE T,DCWRD ;GET IOWD TLNN IOS,IO ;O/P SKIPE MISSED ;NO, DATA MISSED JRST MTEOR2 ;YES CONI DC,TAC1 ;FETCH DC STATUS BITS LSH TAC1,-15 ;SHIFT CHARACTER COUNT TO LSBITS IMULI TAC1,-6 ;-NO OF BITS TO FAR RIGHT CONO DC,@MDCSAV ;?? IF DON SAYS SO, WELL, OK (JUST) DATAI DC,TAC ;FETCH LAST PART-WORD OF DATA CONO DC,0 ;SHUT DOWN DC LSH TAC,44(TAC1) ;SHIFT LAST CHARACTERS TO LEFT END JUMPG T,MTEOR1 AOBJN T,.+1 ;BUMP DATA POINTER MOVEM TAC,(T) ;STORE LAST WORD MOVEM T,DCWRD ;AND BUMPED POINTER MTEOR1: CONSZ 224,LPE!CPE!400100 ;IF END OF RECORD. CHECK ;PARITY,DATA MISSED, AND ILLEGAL FLAG JRST MTEOR2 ;IF ERROR CAUSED INTERRUPT TO ;ERROR ROUTINE VIA TCF MTECON: CONSZ 224, 400 ;EOF? SETOM MTEOFF ;SET EOF FLAG AOS MTBKCN(DEVDAT) ;COUNT NO. OF BLKS READ OR WRITTENE ;INCLUDING RETRIES JRST @MTIDSP ;YES. MTEOR2: SOS MTIDSP ;POINT TO ERROR ROUTINE MOVEI T,0 CONSZ MTS1,20 ;LONGITUDINAL PARITY ERROR? TLO T,1000 ;YES, COUNT IN QUARTER 1 CONSZ MTS1,10 ;LATERAL PARITY ERROR? TLO T,1 ;YES, COUNT IN QUARTER 2 CONSZ MTS1,400000 ;ILLEGAL OP? TRO T,1000 ;YES, COUNT IN QUARTER 3 CONSO MTS1,100 SKIPE MISSED ;DATA MISSED? TRO T,1 ;YES, COUNT IN QUARTER 4 ADDM T,MTECNT(DEVDAT);ADD TO ERROR COUNTS FOR THIS DRIVE JRST MTECON ;CHECK EOF MTERR: HLRZ TAC,MTDEV ;COMMAND ANDI TAC,7400 TRNE IOS,IONRCK JRST MTERR2 AOSLE TAC1,MTERCN CAIL TAC1,3 JRST MTERR2 HLRZ TAC,MTDEV ;COMMAND ANDI TAC,770377 CONO 220,3400(TAC) ;BSP SOS MTIDSP MTIGN: MOVEI TAC,TCF MTIGN1: CONO 224,(TAC) HRRZM TAC,MTCCON JRST MTCRET MTERR2: CONSO 224,400100 ;SET IODERR IF ILLEG OR MISSED CHAR FLAGS SKIPE MISSED ;SET IODERR IF DATA MISSED TRO IOS,IODERR CONSZ 224,30 ;SET IODTER IF LONG OR LAT PARITY TRO IOS,IODTER JRST MTPDUN MTBSP: MOVE TAC,MTDCCN ;POINTER MOVEM TAC,DCWRD ;RESET POINTER WORD HLRZ TAC,MTDEV ;COMMAND CONSO 224,XNC ;WAIT FOR XNC JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED OFF) SKIPLE TAC1,MTERCN JRST MTBSP3 MTBSP2: TRO IOS,IOACT HRLI TAC,ERF JRST MTGO3 MTBSP3: TRNN TAC,1000 ;READING TRCA TAC,100000 ;YES-CHANGE SLICE LEVEL TRNN TAC1,1 ;NO JRST MTBSP2 CONO 220,4400(TAC) ;WRITE BLANK TAPE AOS MTERCN JRST MTIGN MTC=220 ;MAG TAPE CONTROL DEVICE NUMBER MTS1=224 ;MAG TAPE CONTROL STATUS REG 1 XNC=40000 ;TRANSFER NEW COMMAND MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO. TCF=1 ;TAPE CONTROL FREE ERF=4 ;END OF RECORD FLAG LPE=20 ;LONG. PARITY ERROR CPE=10 ;CHAR. PARITY ERROR SEL=2 ;UNIT TO COMMAND BUFFER IOSEOF=4000 ;SPACING ONE RECORD FORWARD FOUND EOF IOTEND=2000 ;EOT INDICATION IONRCK=100 ;DO NOT RE-TRY ON ERRORS IOBOT=4000 ;TAPE AT LOAD POINT IODT=10000 ;A 1 FOR A DATA TRANSFER TYPE COMMAND IOSLIC=20000 ;A 1 IF SLICE LEVEL IS 1, OTHERWISE 0. HASMT=40000 ;IF A 1, THIS JOB HAS THE MAG TAPE CONTROL IOREW=400000 ;A 1 IF UNIT IS REWINDING AND ANOTHER OPERATIONS ;IS ATTEMPTED ON SAME UNIT. MUST BE SIGN BIT. EXTERNAL ADVBFF,ADVBFE,DCREQ,MTCSAV,SETACT,CLRACT,ORACT,GETDCMT EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTREQ EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,HNGSTP,MTSIZ EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN EXTERNAL JOBPD1,JOBSAV EXTERNAL JBTADR,JOBPFI,STDENS,CPOPJ1,CPOPJ2,UUOERR EXTERNAL DCTCHN,DCLOC,DCLOC1,DCOFF,DCON,STOIOS,TPOPJ INTERNAL MTCINT,DETMDC,DETDC IFN FTCHECK+FTMONP,< EXTERNAL MTEOFF,MTDEV,MTDCCN,DCWRD,MDCSAV,MISSED,MTERCN EXTERNAL MTREN,MTCMDP,SVCNTR,MTCCON,MTIOSP,MTOCND INTERNAL MTDCN1,MTPDUN > IFE FTCHECK+FTMONP,< ;CONTROL DATA MTEOFF: 0 ;EOF FLAG MTDEV: 0 ;XWD COMMAND,DEVICE DATA BLOCK MTDCCN: 0 ;BLKI/O POINTER FOR REDO DCWRD: 0 ;BLKI/O POINTER FOR DC MDCSAV: 0 ;DC COMMAND MISSED: 0 ;-1 IF DC CONTAINS PARTIAL WORD MTERCN: 0 ;ERROR COUNTER MTREWN: 0 ;NO. OF MAG TAPE UNITS-1 IN IO WAIT DOING REWINDS ;BECAUSE THEY REQUESTED OTHER OPERATIONS BEFORE REW ;FINISHED. -1 MEANS NONE, 0 MEANS 1 IN QUEUE MTCMDP: 0 ;DUMP COMMAND LIST POINTER SVCNTR: 0 ;DUMP COMMAND IOWD NEGATIVE WORD COUNT MTCCON: 0 ;INTERRUPT FLAGS MTIDSP: JRST MTPDUN > ;LOGICAL END OF TAPE LOOP MTLEOT: MOVEI T,7 ;BACKSPACE PUSHJ PDP,MTAPE2 PUSHJ PDP,MTCHK2 ;CALL INTERLOCK, PICKUP IOS ;AFTER PREVIOS TASK FINISHED. MTEOT2: MOVEI T,16 ;SAVE ONE FILE PUSHJ PDP,MTAPE2 MOVEI T,6 ;SPAVE ONE RECORD PUSHJ PDP, MTAPE PUSHJ PDP,MTCHK2 ;CALL INTERLOCK, RETURN WHEN ;SPACING FINISHED WITH NEW IOS TLNN IOS, IOSEOF ;WAS EOF DETECTED? JRST MTEOT2 ;NO, RESUME SPACING. MOVEI T,7 ;PREPARE FOR BACKSPACE MTAPE JRST MTAPE2 ;BACKSPACE, LOGICAL EOT FOUND ;RETURN TO MAKE PROGRAM MTREDO: 12 ;NUMBER OF TIUMES TO RE-EXECUTE ;DEVICE DEPENDENT DUMP MODES, MODE 16. ;OUTPUT MTDMPO: PUSH PDP,UUO MTDPO1: PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE TLO IOS,IO ;WRITING PUSHJ PDP,SAVCHK MOVE TAC1, @MTOUT2 ;BLKO AND DATA CONTROL COMMAND MOVEI T,1000 ;WRITING COMMAND MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LIST MOVEM TAC, MTCMDP ;COMMAND POINTER SKIPN TAC,@TAC ;COMMAND WORD JRST MTEND1 JUMPG TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE HLREM TAC, SVCNTR ;SAVE COUNTER HRRZS TAC ;GET ADDRESS ALONE CAMGE TAC,AC1 JRST MTDMP2 SUB TAC, SVCNTR ;GET LAST ADDRESS CAMLE TAC, USRREL ;LESS THAN END? JRST MTDMP2 ;OUT OF BOUNDS MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN ADDI TAC,(PROG) ;GET ACTUAL ADDRESS AOS MTCMDP PUSH PDP,MTCMDP PUSHJ PDP,MTINDC ;MOVE TAPE PUSHJ PDP,WAIT1 TLNN IOS, IO ;WRITING? JRST MTDPI1 ;READING LDB AC2,PIOMOD ;GET MODE CAIE AC2,2 JRST MTDPO1 PUSHJ PDP,MWLEOT PUSHJ PDP,MTCHK2 JRST MTEND1 SAVCHK: MOVEI AC1,JOBPFI MOVE TAC,JOBPD1(JDAT) TLNN TAC,USRMOD MOVEI AC1,JOBSAV POP PDP,TAC1 POP PDP,TAC JRST (TAC1) ;INPUT MTDMPI: PUSH PDP,UUO MTDPI1: TRNE IOS,IODEND JRST TPOPJ PUSHJ PDP,MTCHEK TLZ IOS,IO ;READING PUSHJ PDP,SAVCHK MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAND MOVEI T,2400 ;READ COMMAND JRST MTDMP1 ;DUMP ;ADDRESS ERROR MTDMP2: PUSHJ PDP,MTEND1 JRST ADRERR END