TITLE MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES SUBTTL L. HANTMAN 8-9-65 T=ITEM ; MAG TAPE SERVICE SUBROUTINES MTAPE1: PUSHJ PDP,WAIT1 HRRZI IOS,776000 ANDCAB IOS,DEVIOS(DEVDAT) MOVEI T,(UUO) PUSHJ PDP,MTAPE+1 JRST UXIT MTAPE: PUSHJ PDP,WAIT1 TLZ IOS,IODT TRO IOS, IOACT ;SET ACTIVE PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AV LSH T,^D8 ;MOVE TO FUNCTION ANDI T,7400 ;MODE BITS CAIN T,4000 ;LOGICAL EOT? JRST MTLEOT CAIE T,400 ;RWD? JRST .+3 CONSZ 224,4000 ;AT LOAD POINT? JRST MTDMP4 MOVEI TAC, TCF ;LOOK FOR TAPE CONTROL FREE 0 MTGO1: HRRM TAC, MTCONO HRRM TAC, MTCINT MTGO1A: LDB TAC,PUNIT ;UNIT DPB TAC,[POINT 3,T,31] ;UNIT LDB TAC, [POINT 3, IOS,28] ;DENSITY PARITY XORI TAC, 5 ;ODD, 556 DPB TAC,[POINT 3,T,23] MOVEI TAC,MTCCHN(T) ;CHANNEL MTGO: CONO 224, 0 ;DISABLE ALL INTERRUPTS TRO TAC, 200 ;INHIBIT RETURN TO POOL CONO 220,(TAC) ;COMMAND SETZM MTEOFF# ;CLEAR EOF FLAG HRRM DEVDAT,MTDEV# ;COMMAND, DVDB HRLM TAC,MTDEV TLNE IOS,IODT CONO PI,2000+DCB MOVEI TAC,MTPDUN MTCONO: CONO 224,TCF+ERF ;ENABLE FLAGS POPJ PDP, ;READ MTIN: TLZ IOS, IO ;READING PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE? SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 MTIN1: HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1 MOVEI T,2400 ;READ MTIN2: MOVE TAC1,[BLKI DC,4000+DCN+MTDC*10] JRST MTINDC ;IS SYSTEM AVAILABLE MTCHEK: TRO IOS, IOACT ;SET ACTIVE TLO IOS, IODT ;SET FOR DATA TRANSFER MOVEM IOS, DEVIOS(DEVDAT) MTCHK1: AOSE DCREQ PUSHJ PDP,DCWAIT MTCHK2: TLZ IOS, IOSEOF+IOBEG ;CLEAR SPACE TO EOF MOVEM IOS, DEVIOS(DEVDAT) ;STORE BITS AOSE MTREQ PUSHJ PDP,MTWAIT XCT MTGO1A ;UNIT ROT TAC, 4 ;PUT IN UNIT POSITION CONO 220, 200(TAC) ;HAS UNIT ONLY CONO 224, SEL ;JAM UNIT INTO COMMAND BUFFER CONSZ 224, SEL ;UNIT NOT READY? POPJ PDP, 0 ;EXIT ROT TAC, -4 ;UNIT IN TAC HRRM DEVDAT, MTSTAK(TAC) ;PUT IN STACK MOVE TAC1, [XWD MTCLOK,^D32] ;HALF SECOND DPB TAC, [POINT 3,TAC1,23] ;STORE UNIT NUMBER HRLM TAC1, MTSTAK(TAC) ;SAVE ACTUAL CLOCK REQUEST CONO PI, 400 ;TURN OFF PI IDPB TAC1, CLOCK ;REQUEST CLOCK RETURN TO MTCL CONO PI, 200 ;TURN PI ON SOSL MTREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W SETOM MTAVAL ;YES,SET MAG TAPE AVAL TLNN IOS, IODT ;NON-DATA TRANSFER? JRST MTCHK3 ;YES SOSL DCREQ ;NO,DECREMENT REQUEST COUNT,ANYONE LEFT SETOM DCAVAL ;YES,SET DATA CONTROL AVAILAB MTCHK3: PUSHJ PDP, WSYNC ;REQUEST WAIT MOVE IOS, DEVIOS(DEVDAT) ;LOAD STATUS TLNN IOS, IODT ;DATA TRANFER? JRST MTCHK2+2 ;CHECK FOR MT AVAILABLE ONLY JRST MTCHK1 ;CHECK FOR MT AND DC AVAIALABL ;WRITE MTOUT: TLO IOS, IO ;WRITING PUSHJ PDP,MTCHEK CONSZ 224,200 ;IS FILE PROTECT RING IN? JRST MTOUTE ;NO, ERROR CANT WRITE. CROCK!! MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE MOVN TAC1,1(TAC) ;-WD COUNT HRL TAC,TAC1 ;-WD CMT,BUFFER AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT MTOUT2: MOVE TAC,[BLKO DC,3400+DCN+MTDC*10] MOVEI T,1000 ;WRITE MTINDC: MOVEM TAC,MTDCCN# ;BLKO POINTER MOVEM TAC,DCWRD# HRRZM TAC1, MDCSAV# ;SAVE DC COMMAND HRRI TAC1,DCWRD MOVEM TAC1,40+<2*DCN> ;BLK COMMAND MOVE TAC1,[JSR MTDCND] MOVEM TAC1,41+<2*DCN> CONO PI,1100 CONO DC, @MDCSAV ;DATA CONTROL COMMAND MOVEI TAC, ERF JRST MTGO1 MTOUTE: TRO IOS,IODERR ;WRITE LOCK, DEVICE ERROR PUSHJ PDP,MTEND1 JRST UXIT MTCLS: LDB TAC,PIOMOD ;MODE CAIG TAC, 16 ;DUMP MODE JRST MTCLS1 ;CLOSE OUTPUT TLNE IOS,IO ;INPUT? JRST MTCLS1+1 ;WRITE EOFS MOVEI T,16 ;SPACE TO EOF JRST MTAPE ;GOES BACK TO UUO LEVEL MTCLS1: PUSHJ PDP,OUT MOVEI T,3 ;WRITE IOF PUSHJ PDP, MTAPE MOVEI T,3 ;WRITE EOF PUSHJ PDP, MTAPE MOVEI T,7 ;BSP JRST MTAPE MTDISP: POPJ PDP, ;RELEASE JRST MTCLS ;CLOSE JRST MTOUT ;WRITE JRST MTIN ;READ JRST CUXIT1 ;ENTER IN DIRECTORY JRST CUXIT1 ;LOOKUP IN DIRECTORY JRST MTDMPO ;DUMP OUT JRST MTDMPI ;DUMP IN JRST UXIT ;SETO JRST UXIT ;SETI JRST UXIT ;GETF MTCINI: MOVN TAC, MTREDO ;REPEAT COUNTER HRREM TAC, MTERCN ;RESET ERROR CNTR CONO 224,0 ;CLEAR ENABLES HLLZS MTCINT ;CLEAR CONSO POPJ PDP, ;BLK COUNTED OUT MTDCND: 0 CONO PI,DCB+1000 ;SHUT OF DC CHANNEL JEN @MTDCND ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO MTCINT: CONSO 224,TCF+ERF JRST . JSR MTCSAV ;SAVE ACS HRRZ DEVDAT,MTDEV ;DVBD LDB PROG,PJOBN; JOB NUMBER HRRZ PROG, JBTADR(PROG) MOVE IOS, DEVIOS(DEVDAT) CONSO 224,TCF ;TAPE CONTROL FREE JRST MTEOR MTIDSP: JRST MTPDUN ;POINTS TO MTERR FOR ERROR JRST MTBSP ;AFTER BACKSPACE JRST MTERR ;IF ERROR FOUND MTPDUN: TLNN IOS,IODT JRST MTNIO2 LDB TAC,PIOMOD CAIL TAC,16 JRST MTEND1 ;DUMP TLNE IOS,IO JRST MTNOTI ;WRITING SKIPE MTEOFF ;NOT EOF? JRST MTEOF MTINDN: 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 .+2 ;NEXT BUFFER FULL JRST MTCON ;CONTINUE MODE MTEND1: CONO DC, 0 ;TURN OFF DATA CONTROL SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT? SETOM DCAVAL ;YES, SET FLAG FOR CLOCK MTNIO: SOSL MTREQ SETOM MTAVAL ;YES, SET FLAG FOR CLOCK CONSZ 224,10000 ;END OF TAPE? TRO IOS, IOTEND ;SET END OF TAPE INDICATION TRZ IOS, IOBOT ;CLR LOAD POINT INDICATION CONSZ 224, 4000 ;LOAD POINT? TRO IOS, IOBOT ;SET LOAD POINT INDICATION CONSZ 224, 20000 ;TAPE REWINDING? TRO IOS, IOBOT ;SET LOAD POINT INDICATION TLZE IOS, IOW ;CLEAR WAIT PUSHJ PDP, SETIOD ;REQUEST WAIT SATISFIED TRZ IOS, IOACT ;CLEAR ACTIVE MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE BITS CONO 224,0 ;CLEAR MAG TAPE ENABLES HLLZS MTCINT ;CLEAR CONSO MOVN TAC, MTREDO ;REPEAT COUNTER HRREM TAC, MTERCN# POPJ PDP, ;DISMISS INTERRUPT OR RETURN TO CALLER MTNOTI: PUSHJ PDP,ADVBFE ;WRITING JRST MTEND1 MTCON: TRNE IOS,IOCON ;CONTINUOUS? JRST MTEND1 ;STOP TAPE CONSZ 224,10000 ;END OF TAPE? JRST MTEND1 ;STOP TAPE CONO DC,0 ;CLEAR DATA CONTROL 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 ;SPACE ONE RECORD JRST MTNIO ;EXIT CONSZ 224, 400 ;EOF? TLO IOS, IOSEOF ;SET EOF DETECTED JRST MTNIO ;EXIT MTEOF: TLO IOS, IOEND JRST MTEND1 MTEOR: CONSZ 224,LPE+CPE ;IF END OF RECORD CHECK PARIT SOS MTIDSP ;IF ERROR CAUSE INTERRUPT TO ;ERROR ROUTIE VIA TCF CONSZ 224, 400 ;EOF? SETOM MTEOFF ;SET EOF FLAG MTIGN: CONO 224, TCF ;IF ERF, CAUSE INTERRUPT TO D ;PATCH TABLE, DISABLE ERF FLA MOVEM TAC, MTDCND ;SAVE TAC MOVEI TAC, TCF ;LOOK FOR TCF ONLY HRRM TAC, MTCINT ;SET CONSO MOVE TAC,MTDCND ;RESTORE TAC JRST MTCRET ;DISMISS AND RETURN VIA TCF MTERR: HLRZ TAC,MTDEV ;COMMAND ANDI TAC,7400 CAIN TAC,2400 ;READ? JRST .+3 CAIN TAC,1000 ;WRITE JRST MTIGN2 ;IGNORE IF NOT RD OR WRITE TRNN IOS, IONRCK ;RE-DO? AOSL MTERCN ;THIRD ERROR? JRST MTERR2 ;TRIPLE ERROR HLRZ TAC,MTDEV ;COMMAND ANDI TAC,770377 CONO 220,3400(TAC) ;BSP SOS MTIDSP JRST MTIGN MTERR2: TRO IOS, IODERR ;DEVICE ERROR JRST MTPDUN MTBSP: MOVE TAC,MTDCCN ;POINTER MOVEM TAC,DCWRD ;RESET POINTER WORD CONI DC,TAC ;SAVE IN/OUT, PACK MD. DEV NU ;PRIORITY ANDI TAC,777 ADDI TAC,3000 ;MAKE WRITE TRNN TAC,400 ;WAS IT WRITING? ADDI TAC,1000 ;MAKE READ CONO DC,(TAC) ;REISSUE CONO HLRZ TAC,MTDEV ;COMMAND CONSO 224,XNC ;WAIT FOR XNC JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED CONO 220,(TAC) ;REISSUE RD OR WRITE SETZM MTEOFF ;CLR EOF FLAG CONO PI,2000+DCB ;TURN ON CHANNEL MOVEI TAC,MTPDUN ;RESET SWITCH HRRM TAC,MTIDSP MOVEI TAC, ERF HRRM TAC, MTCINT CONO 224, ERF JRST MTCRET ;ENABLE PROPER FLAGS MTIGN2: AOS MTIDSP ;RESET DISPATCH SWITCH JRST MTIGN ;NEED TO TRY WRITING LONG RECORD GAP ON OUTPUT(ONLY) AND TRY ;ONCE MORE AT NEW SPOT ON TAPE IF TRIPLE ERROR 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 DCB=100 ;DATA CHANNEL NUMBER DCN=1 ;DATA CHANNEL NUMBER 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 TRANFER TYPE COMMAND EXTERNAL UXIT, ADVBFF, ADVBFE, DCREQ, DCWAIT, MTCSAV EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTCCHL, MTREQ EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,CUXIT1 EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN EXTERNAL JBTADR ENTRY MTDISP INTERNAL MTCINT,MTAPE1,MTCINI ;CLOCK INTERRUPT, UNIT IN TAC MTCLOK: HRRZ DEVDAT, MTSTAK(TAC) ;DVDB ROT TAC, 4 ;PUT UNIT IN SEL BITS CONO 220, 200(TAC) ;UNIT ONLY CONO 224, SEL ;SEL UNIT CONSZ 224, SEL ;UNIT NOT READY? JRST MTCLK2 ;UNIT READY ROT TAC, -4 ;FOR INDEXING PURPOSES HLR TAC1, MTSTAK(TAC) ;CLOCK REQUEST HRLI TAC1, MTCLOK ;GET CLOCK REQUEST CONO PI, 400 ;TURN OFF PI IDPB TAC1, CLOCK ;STORE CLOCK REQUESTED CONO PI, 200 ;TURN ON PI POPJ PDP, 0 ;EXIT MTCLK2: MOVE IOS, DEVIOS(DEVDAT) TLZE IOS,IOW PUSHJ PDP, SETIOD MOVEM IOS, DEVIOS(DEVDAT) POPJ PDP, 0 MTSTAK: BLOCK ^D8 ;LOGICAL END OF TAPE LOOP MTLEOT: CONSZ 224, 4000 ;TAPE NOT AT LOAD POINT? JRST MTEOT2 ;AVOID BACKSPACE IFAT LOAD P MOVEI T,3400 ;BACKSPACE PUSHJ PDP, MTGO1-1 MTEOT2: MOVEI T,16 ;SPACE ONE FILE PUSHJ PDP, MTAPE MOVEI T,6 ;SPACE ONE RECORD PUSHJ PDP, MTAPE PUSHJ PDP, WAIT1 ;WAIT UNTIL SPACING IS COMPLE MOVE IOS, DEVIOS(DEVDAT) TLNN IOS, IOSEOF ;WAS EOF DETECTED? JRST MTEOT2 ;RESUME SPACING MOVEI T,7 ;BACKSPACE, LOGICAL EOF FOUND JRST MTAPE ;RETURN BACK TO MAIN PROGRAM MTREDO: 12 ;NUMBER OF TIMES TO RE-EXECUTE ;DEVICE DEPENDENT DUMP MODES. MODE 16. ;OUTPUT MTDMPO: TLO IOS, IO ;WRITING HRRZ T,UUO PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE? MOVE TAC1, @MTOUT2 ;BLK0 AND DATA CONTROL COMMAN MOVE TAC,T ;COMMAND LIST POINTER MOVEI T,1000 ;WRITING COMMAND MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LI MOVEM TAC, MTCMDP# ;COMMAND POINTER SKIPN TAC,@TAC ;COMMAND WORD JRST MTDMP3 ;NOTHING TO DO JUMPGE TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE HLREM TAC, SVCNTR# ;SAVE COUNTER HRRZS TAC ;GET ADDRESS ALONE SUB TAC, SVCNTR ;GET LAST ADDRESS CAMLE TAC, USRREL ;LESS THAN END? JRST MTDMP2 ;OUT OF BOUNDS MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN ADD TAC, PROG ;GET ACTUAL ADDRESS PUSHJ PDP, MTINDC ;MOVE TAPE PUSHJ PDP,WAIT1 AOS T,MTCMDP ;UPDATE COMMAND POINTER TLNN IOS, IO ;WRITING? JRST MTDMPI+2 ;READING JRST MTDMPO+2 ;WRITING ;INPUT MTDMPI: TLZ IOS, IO ;READING HRRZ T,UUO PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAN MOVE TAC,T ;COMMAND LIST POINTER MOVEI T,2400 ;READ COMMAND JRST MTDMP1 ;DUMP ;ADDRESS ERROR MTDMP2: PUSHJ PDP,MTDMP3 JRST ADRERR ;CLEAR ALL USE BITS. NOTHING IN COMMAND LIST MTDMP3: SOSL DCREQ SETOM DCAVAL MTDMP4: SOSL MTREQ SETOM MTAVAL TRZ IOS,IOACT TLZE IOS,IOW PUSHJ PDP,SETIOD MOVEM IOS,DEVIOS(DEVDAT) POPJ PDP, END,