X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..8975ed2f727e4bb0190f22b1401821e5981cf7c2:/src/mtcsr6.mac diff --git a/src/mtcsr6.mac b/src/mtcsr6.mac index 215a429..019128a 100644 --- a/src/mtcsr6.mac +++ b/src/mtcsr6.mac @@ -2,6 +2,7 @@ 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 @@ -58,10 +59,11 @@ MTCDSP: POPJ PDP, ;RELEASE POPJ PDP, ;UTPCLR ;MTAPE UUO (FALL INTO THIS CODE WHICH FOLLOWS) -DEFINE MTAPE (A) ;MARCO TO DEFINE LEGAL MTAPE UUO EFFECTIVE ADDRESSES. + +DEFINE MTAPES (A) ;MARCO TO DEFINE LEGAL MTAPES UUO EFFECTIVE ADDRESSES. < CODES=0 IRP A, < - CODES=CODES!<1B<^D35-^0'A>>>> + CODES=CODES!<1B<^D35-^O'A>>>> MTAPES <0,1,11,7,17,3,6,13,16,10> ;DEFINE WHICH CODES ARE LEGAL @@ -75,10 +77,11 @@ DEFINE MTAPE (A) ;MARCO TO DEFINE LEGAL MTAPE UUO EFFECTIVE ADDRESSES. 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. + +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 NOSFT ;NO + JRST NOSET ;NO TLZ IOS,IOSLIC ;YES, CLEAR LEVEL TRNE T,SLEVEL ;SET TO 1? TLO IOS,IOSLIC ;YES @@ -89,17 +92,17 @@ NOSET: JRST MTLEOT CAIE T,1400 ;WRITE EOF CAIN T,5400 ;OR WRITE BLANK TAPE? - JRST CHKLOC ;YES, CHECK WRITE-LOCK + 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. + +;HERE FROM INPUT AND OUTPUT UUOS AND INTERRUPT TO DO NEXT RECORD. MTGO1: LDB TAC1,PUNIT ;UNIT DPB TAC1,[POINT 3,T,31] ;UNIT @@ -114,7 +117,7 @@ MTGO1: LDB TAC1,PUNIT ;UNIT TRO TAC,100000 ;YES, SET COMMAND. HRRM DEVDAT,MTDEV ;COMMAND, DVDB HRLM TAC,MTDEV -MTGO3: MOVEI TAC1,MTPOUN +MTGO3: MOVEI TAC1,MTPDUN HRRM TAC1,MTIDSP SETZM MTEOFF ;CLEAR EOF FLAG TLNN IOS,IODT ;IS THIS A DATA TRANSFER OPERATION @@ -129,7 +132,7 @@ MTGO2: SETZM MISSED ;CLEAR DATA MISSED FLAG JRST STOIOS ;STORE HUNG COUNT, EXIT ;READ -MTIN: PUSHJ PDP,MTCHECK ;IS SYSTEM AVAILABLE?> +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 @@ -137,7 +140,8 @@ MTIN1: SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 MOVEI T,2400 ;READ MTIN2: MOVE TAC1,[BLKI DC,4000+MTDC*10] JRST MTINDC - ;IS SYSTEM AVAILABLE + +;IS SYSTEM AVAILABLE MTCHEK: PUSHJ PDP,GETDCMT ;GET DATA AND MAG TAPE CONTROLS AOSE MTREQ ;ARGUMENT MOVE IOS,DEVIOS(DEVDAT) @@ -149,14 +153,13 @@ MTCHEK: PUSHJ PDP,GETDCMT ;GET DATA AND MAG TAPE CONTROLS MTCHK2: AOSE MTREQ PUSHJ PDP,MTWAIT MOVE IOS,DEVIOS(DEVDAT) - TLZ IOS,IO ;CLEAR IUO INDICATION SO "REWCK" WILL WORK + 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,IUOSLIC ;YES, SET SLICE LEVEL TO 0. + 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 @@ -173,7 +176,9 @@ MTCHK4: TLO IOS,HASMT ;THIS JOB NOW HAS MTC QSTAT: PUSHJ PDP,DETMDC ;DETACH MTC AND DC JRST HNGSTP ;CHECK STATUS (PULL FINGERS OUT, ETC) - ;MTAPE 0 WAITS UNTIL THE CONTROL IS FREE + + +;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. @@ -182,6 +187,8 @@ MTP0: PUSHJ PDP,MTCHK2 ;WAIT FOR CONTROL TO BECOME FREE, ; AND RETURN TO THE USER. + + ;DETMDC- ; DETACH MTC, AND TURN OFF HASMT. ; THEN (IFF IODT ON) @@ -197,7 +204,7 @@ MTHUNG: DETDC: TLZN IOS,IODT ;DOES JOB HAVE DATA CONTROL? JRST STOIOS ;NO- EXIT CONO DC,0 - CONO PD,DCOFF + CONO PI,DCOFF SOSL DCREQ ;ANYONE ELSE WAITING FOR IT? SETOM DCAVAL ;YES- FLAG AS JUST BECOME AVAILABLE JRST STOIOS ;AND EXIT @@ -206,7 +213,8 @@ RELCON: CONO 220,0 CONO 224,0 SETZM MTCCON POPJ PDP, - ;ROUTINE TO SEE IF UNIT IS REWINDING + +;ROUTINE TO SEE IF UNIT IS REWINDING ;CALL MOVE DEVDAT,ADDRESS OF DDB ; PUSHJ PDP,REWCK ; UNIT READY @@ -225,6 +233,7 @@ REWCK: LDB TAC,PUNIT AOS (PDP) POPJ PDP, ;YES- RETURN TO CALL+1 + REPEAT 0,< THIS WORKS WITH THE FOLLOWING MOD TO 545 TRANSPORT: @@ -238,7 +247,8 @@ 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 + +;WRITE MTOUT: PUSHJ PDP,MTCHEK TLO IOS,IO ;WRITING MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDED @@ -254,7 +264,7 @@ MTINDC: MOVEM TAC,MTDCCN ;BLKO POINTER HRRI TAC1,DCWRD CONO PI,DCOFF ;TURN DC PI CHANNEL OFF MOVEM TAC1,DCLOC ;BLK COMMAND - MOVE TAC1,JSR MTDCND] + MOVE TAC1,[JSR MTDCND] MOVEM TAC1,DCLOC1 TRO IOS,IOACT ;SET IOACT MOVSI TAC, ERF ;ENABLE FOR EOR IF EOR FLAG NOT ON. @@ -262,6 +272,8 @@ MTINDC: MOVEM TAC,MTDCCN ;BLKO POINTER 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 @@ -281,12 +293,14 @@ MWLEOT: MOVEI T,3 ;WRITE EOF MOVEI T,7 ;BSP JRST MTAPE + MTCINI: PUSHJ PDP,RELCON - SETOM MRTEWN ;SET CLOCK REQUEST COUNT TO -1 + SETOM MTREWN ;SET CLOCK REQUEST COUNT TO -1 JRST MTNIO1 ;BLK COUNTED OUT + IFE FTCHECK+FTMONP,< MTDCND: 0 > @@ -294,12 +308,14 @@ MTDCN1: CONO PI,DCOFF ;SHUT OFF DC CHANNEL CONSZ DC,10000 SETOM MISSED JEN @MTDCND - ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO + + +;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,PJOBM; JOB NUMBER + LDB PROG,PJOBN; JOB NUMBER MOVE PROG,JBTADR(PROG) MOVE IOS, DEVIOS(DEVDAT) CONSO 224,TCF ;TAPE CONTROL FREE @@ -314,11 +330,11 @@ MTPDUN: TLNN IOS,IODT JRST DMPDUN ;DUMP TLNE IOS,IO JRST MTNOTI ;WRITING - SKIPF MTEOFF ;NOT EOF? + SKIPE MTEOFF ;NOT EOF? JRST MTEOF MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS MOVN TAC1,MTDCCN ;WD CNT-1 - AOBJ TAC1, .+1 ;WD CNT + 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 @@ -335,20 +351,21 @@ MTEOF: TLO IOS,IOEND SETZM MTEOFF ;CLEAR EOF FLAG ;AND FALL INTO MTEND1 - MTEND1: PUSHJ PDP,DETDO ;DETACH DC (IF ASSIGNED) + +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 MTION ;NO. WAIT FOR IT. + JRST MTIGN ;NO. WAIT FOR IT. MTFIN: MTNIO: TLZE IOS,IOW ;CLEAR WAIT PUSHJ PDP,SETIOD - PUSHJ PDP,DETMOC ;DETACH MTC (IF HASMT SET) AND DC (IF IODT) + 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 - MTIO1: MOVN TAC,MTREDO ;REPEAT COUNTER + MTNIO1: MOVN TAC,MTREDO ;REPEAT COUNTER HRREM TAC,MTERCN SKIPGE MTREWN ;IS ANY OTHER UNIT REWINDING AND ;A SECOND COMMAND HELD UP? @@ -368,7 +385,7 @@ REWLP: MOVE IOS,DEVIOS(DEVDAT) PUSHJ PDP,REWCK ;YES,SEE IF FINISHED REW. JRST .+3 ;HAS FINISHED JRST REW1 ;OFF- LET HUNG LOGICA TAKE CARE OF IT - JRST REW2 ;STILL REWINDING + 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 @@ -380,7 +397,7 @@ 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,(SIZBIT /MTA/) ;STILL A MAGTAPE? + 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 @@ -388,9 +405,10 @@ REW3: POP PDP,DEVDAT ETCHK: CONSZ MTS1,10000 ;EOT SEEN? TRO IOS,IOIMPM+IOTEND ;YES-SET FLAGS TDZ IOS,[XWD IOREW,IOBOT];NO LONGER REWINDING - CONSZ MTS1,24002 ;UNLESSS + 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. @@ -410,8 +428,6 @@ 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 @@ -436,12 +452,14 @@ MTNIO2: HLRZ TAC,MTDEV ;COMMAND 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,1600000 ;ANY CHARS. LEFT? + CONSO DC,160000 ;ANY CHARS. LEFT? JRST MTEOR1 ;NO MOVE T,DCWRD ;GET IOWD TLNN IOS,IO ;O/P @@ -455,7 +473,6 @@ MTNIO2: HLRZ TAC,MTDEV ;COMMAND 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 @@ -479,11 +496,12 @@ MTEOR2: SOS MTIDSP ;POINT TO ERROR ROUTINE CONSZ MTS1,400000 ;ILLEGAL OP? TRO T,1000 ;YES, COUNT IN QUARTER 3 CONSO MTS1,100 - SKIPF MISSFD ;DATA MISSED? + 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 + +MTERR: HLRZ TAC,MTDEV ;COMMAND ANDI TAC,7400 TRNE IOS,IONRCK JRST MTERR2 @@ -507,7 +525,7 @@ MTERR2: CONSO 224,400100 ;SET IODERR IF ILLEG OR MISSED CHAR FLAGS JRST MTPDUN MTBSP: MOVE TAC,MTDCCN ;POINTER - MOVEM TAC,DOWRD ;RESET POINTER WORD + 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) @@ -523,7 +541,8 @@ MTBSP3: TRNN TAC,1000 ;READING CONO 220,4400(TAC) ;WRITE BLANK TAPE AOS MTERCN JRST MTIGN - MTC=220 ;MAG TAPE CONTROL DEVICE NUMBER + +MTC=220 ;MAG TAPE CONTROL DEVICE NUMBER MTS1=224 ;MAG TAPE CONTROL STATUS REG 1 XNC=40000 ;TRANSFER NEW COMMAND @@ -531,18 +550,19 @@ MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO. TCF=1 ;TAPE CONTROL FREE ERF=4 ;END OF RECORD FLAG LPE=20 ;LONG. PARITY ERROR -CRE=10 ;CHAR. 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=2000 ;A 1 IF SLICE LEVEL IS 1, OTHERWISE 0. -HASMT=4000 ;IF A 1, THIS JOB HAS THE MAG TAPE CONTROL -IOREW=40000 ;A 1 IF UNIT IS REWINDING AND ANOTHER OPERATIONS +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 @@ -577,9 +597,10 @@ MTCCON: 0 ;INTERRUPT FLAGS MTIDSP: JRST MTPDUN > - ;LOGICAL EBND OF TAPE LOOP + +;LOGICAL END OF TAPE LOOP MTLEOT: MOVEI T,7 ;BACKSPACE - PUSHJ PDP,MTAPC2 + PUSHJ PDP,MTAPE2 PUSHJ PDP,MTCHK2 ;CALL INTERLOCK, PICKUP IOS ;AFTER PREVIOS TASK FINISHED. MTEOT2: MOVEI T,16 ;SAVE ONE FILE @@ -602,12 +623,12 @@ MTDPO1: PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE PUSHJ PDP,SAVCHK MOVE TAC1, @MTOUT2 ;BLKO AND DATA CONTROL COMMAND MOVEI T,1000 ;WRITING COMMAND -MTDMP1: HTLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LIST - MOVEM TAC, MTDUMP ;COMMAND POINTER +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, SVCNT ;SAVE COUNTER + HLREM TAC, SVCNTR ;SAVE COUNTER HRRZS TAC ;GET ADDRESS ALONE CAMGE TAC,AC1 JRST MTDMP2 @@ -640,15 +661,17 @@ SAVCHK: MOVEI AC1,JOBPFI MTDMPI: PUSH PDP,UUO MTDPI1: TRNE IOS,IODEND JRST TPOPJ - PUSHJ PDP,MTCHECK + 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