X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..8975ed2f727e4bb0190f22b1401821e5981cf7c2:/src/dtasrn.mac diff --git a/src/dtasrn.mac b/src/dtasrn.mac index 2f8d0bd..37a077f 100644 --- a/src/dtasrn.mac +++ b/src/dtasrn.mac @@ -31,6 +31,7 @@ MINDIS=14 ;MINMUM NUMBER OF BLOCKS TO SEARCH BEFORE DISCONNECTING ;FROM A TAPE SPACE=4 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE + ;DDB MAGIC CELLS FSTBLK=13 DLOC=14 @@ -43,6 +44,7 @@ SVDWRD=21 UDSD=100 LSTSAV=20000 + ;FLAGS IN LH OF IOS NOLINK=200 CHNGDR=400 @@ -57,10 +59,10 @@ REWBIT=100000 RUNBIT=200000 RECKON=400000 ;THIS TAPE IS DEAD-RECKONING. ; (MUST BE SIGN BIT) - CPBIT=-1 ;FEATURE TEST TO ALLOW IO INTO USER AREA DIRECTLY ;IT WILL ONLY HAPPEN ON DUMP MODE WITH NON-STANDARD BIT ;(UDSD) ON + EXTERN JIFSEC INTERN DTAINT,DTADDB,DTAINI,DTADDS,DTADSP @@ -71,21 +73,18 @@ DTADDB: SIXBIT /DTA0/ EXP DTADSP XWD 1107,154403 EXP 0,0 - XWD PROG,0 XWD PROG,0 EXP 0,0,0 - EXP DTADIR EXP 0,0,0,0,0 - - DTADIR: BLOCK 200 -DTADDS=.-DTADDR +DTADDS=.-DTADDB + JRST DTAINI JRST HUNGTP ;HUNG DEVICE -DTADSP JRST UREL +DTADSP: JRST UREL JRST UCLS JRST UOUT JRST UIN @@ -103,9 +102,10 @@ DTADSP JRST UREL HRRZ TAC1,UUO ;MTAPE - GET OPERATION CAIE TAC1,1 ;REWIND OR CAIN TAC1,11 ;REWIND UNLOAD ARE LEGAL - SOJA TAC1,MTA0 + SOJA TAC1,MTAP0 POPJ PDP, ;OTHERS ARE NO-OPS + ;INITIALIZE DTC DTAINI: CONO DTC,0 SETZM DISCON @@ -179,7 +179,6 @@ RENAM1: TLO IOS,CHNGDR ;DIRECTORY HAS CHANGED ;COME HERE TO RENAME TO A REAL NEW NAME RENAM2: MOVE DAT,TAC ;SAVE LOC OF NAME IN DIRECTORY - PUSHJ PDP,DSERCH ;SEARCH FOR NEW NAME SKIPA ;NOT FOUND - GOOD JRST RENER2 ;NAME ALREADY EXISTS - ERROR @@ -208,7 +207,7 @@ NMLOOK: SKIPN TAC1,@UUO ;GET NAME MOVEM TAC1,DEVFIL(DEVDAT) ;STORE FOR RENAME AND SUPERSEDING ; SHARED SEGMENTS CAMN TAC1,(TAC) ;TEST FOR MATCH - AOJA UUOI,NMFOUN ;FOUND NAME, CHECK EXTENSION + AOJA UUO,NMFOUN ;FOUND NAME, CHECK EXTENSION AOBJN TAC,.-2 ;TRY NEXT NAME POPJ PDP, ;NOT FOUND NMFOUN: HLLZ TAC1,@UUO ;PICK UP USER'S EXTENSION @@ -282,7 +281,6 @@ DECPTR: JUMPL DAT,.+5 SOJA DAT,CPOPJ HRLI DAT,060500 SOJA DAT,CPOPJ - ;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS PUSHJ PDP,BLKSRC ;FIND A BLOCK BELONGING TO FILE @@ -296,7 +294,7 @@ DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS ENTR: TRNE IOS,UDSD ;NON STANDARD? JRST CPOPJ1 ;YES. RETURN PUSHJ PDP,DSERCH ;NO. LOOK FOR MATCH - JRST NEWNT ;THIS IS A NEW ENTRY + JRST NEWENT ;THIS IS A NEW ENTRY ENTR2: MOVE TAC1,@UUO ;PICK UP 2ND WORD (EXTENSSION) AOS UUO ;POINT TO WORD 3 HRR TAC1,@UUO ;ADD DATE @@ -317,11 +315,11 @@ ENTRA: SUBI UUO,2 ;NO. POINT TO NAME HRLM TAC,OBLK(DEVDAT) ;SAVE INDEX IN DDB PUSHJ PDP,DLETE ;DELETE ALL BLOCKS BELONGING TO FILE - AOJE AC3,FNTRD ;FIND FIRST FREE BLOCK ON TAPE IF THIS + AOJE AC3,ENTRD ;FIND FIRST FREE BLOCK ON TAPE IF THIS ;IS A SAVE FILE (UGETF DONE) MOVEI BLK,DIRBLK ;NO. GET 1ST BLOCK CLOSE TO TLO IOS,RVERSE ;DIRECTORY. GOING IN REVERSE - POPJ PDP,USLSTA + PUSHJ PDP,USLSTA CAILE BLK,TOPBLK ;BLOCK LEGAL? POPJ PDP, ;NO. ERROR RETURN ENTRC: MOVEM BLK,FSTBLK(DEVDAT) ;SAVE AS 1ST BLOCK @@ -342,7 +340,7 @@ MARKDR: PUSHJ PDP,DRPTR ;SET POINTER TO BLOCK IN DIR ;;SET POINTER TO CORRECT DIRECTORY ENTRY DRPTR: SUBI BLK,1 ;SET FOR ILDB OR IDPB IDIVI BLK,7 ;COMPUTE WORD, POSITION - ADD BLK,OLOC(DEVDAT) ;GET CORRECT ADDRESS + ADD BLK,DLOC(DEVDAT) ;GET CORRECT ADDRESS HRLI BLK,440500 ;MAKE IT A BYTE POINTER JUMPE DAT,CPOPJ ;CORRECT FOR POSITION IN WORD IBP BLK @@ -351,12 +349,12 @@ DRPTR: SUBI BLK,1 ;SET FOR ILDB OR IDPB ;HERE FOR NEW FILE NAME ON ENTER NEWENT: SUB TAC,[XWD 26,26];START AT BEGINNING OF DIRECT. - SKIPN (TAC) ;FIND A FREE SLOT AOJA UUO,ENTR2 ;RETURN WITH UUO POINTING TO WRD 2 AOBJN TAC,.-2 POPJ PDP, ;NONE AVAILABLE. + ;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE SETWD4: HLRE TAC1,@UUO ;GET -LENGTH MOVNS TAC1 ;+LENGTH @@ -391,6 +389,7 @@ GETF: PUSHJ PDP,WAIT1 ;WAIT TILL BUFFERES EMPTY MOVE TAC,BLK ;TELL USER THE BLOCK NUMBER JRST STOTAC + ;GET NEXT (OR PREVIOUS) FREE BLOCK USRFRE: MOVEI TEM,SPACE ;BLOCKS "SPACE" APART LDB BLK,PIOMOD ;EXCEPT DUMP AND SAVMOD FILES @@ -415,6 +414,7 @@ USRLST: SUBI BLK,(TEM) ;LOOK FOR FREE BLOCK N BEFORE USLSTA: PUSHJ PDP,LSTFRE ;THIS ONE JRST CALNXT+1 + ;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER NOBLKS: MOVEI BLK,TOPBLK+1 ;SET HIGH BLOCK POPJ PDP, @@ -450,8 +450,10 @@ UCLS: TLZE IOS,NOLINK ;IS LAST BLOCK NOT LINKED? MOVEM IOS,DEVIOS(DEVDAT) ;SAVE IOS JRST OUT ;GO TO WRITE RECORD + + ;HERE TO CLOSE A DUMP MODE FILE -CLSDMP: TLO IOS,DMPOCLS+IO+DMPMOD ;SET SWITCHES +CLSDMP: TLO IOS,DMPCLS+IO+DMPMOD ;SET SWITCHES PUSHJ PDP,GETDT ;GET CONTROL SETZM BUF ;ENSURE ZERO LINK,WORDCOUNT SETZM BUF+1 ;MAKE SURE 0, SO CAN GET WITH 3 SERIES MON. @@ -473,9 +475,9 @@ UREL: PUSHJ PDP,WAIT1 ;MAKE SURE THE TAPE IS STOPPED PUSHJ PDP,WRTBLK ;WRITE UT PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN + UREL2: MOVE TAC,DEVIAD(DEVDAT) ;BITS 1,2 ARE COUNT OF CHANS TLNE TAC,200000 ;DEV INITED ON ANOTHER CHANNEL TOO? - QUANTL: POPJ PDP,QUANT ;YES, DON'T ZAP IOS OR DDB ;SOME BITS IN THE IOS WORD AND THE DDB WILL NORMALLY BE CHANGED ON THE @@ -487,6 +489,8 @@ QUANTL: POPJ PDP,QUANT ;YES, DON'T ZAP IOS OR DDB ;IT WILL WORK (CHECK IS MADE AT ENTER) SETZM FSTBLK(DEVDAT) JRST STOIOS ;STORE IOS AND RETURN + + GETDT0: PUSHJ PDP,SETACT ;WAIT TILL TAPE COMES OUT OF REWIND PUSHJ PDP,WSYNC ;BEFORE DOING ANYTHING ELSE TO IT ;GET DEC TAPE CONTROLLER @@ -536,7 +540,6 @@ UIN: TLZ IOS,IO JUMPE BLK,EOF ;0 MEANS EOF PUSHJ PDP,BLKCHK ;CHECK LEGALITY OF BLOCK NUMBER TLNN IOS,DMPMOD ;DUMP MODE? - CAIE BLK,DIRBLK ;TRYING TO READ DIRECTORY? JRST READBF ;NO. GO READ @@ -561,6 +564,7 @@ EOF: TLO IOS,IOEND ;LIGHT EOF BIT JRST STOIOS JRST DMPEOF ;GIVE UP CONTROL IF DUMP-MODE + ;ZERO USER'S CORE ON SAVE-MODE INPUT ZERCOR: MOVEI TAC,JOBDDT(PROG) ;ZERO CORE HRLI TAC,1(TAC) @@ -589,8 +593,7 @@ UOUT: TLO IOS,IO HRRZ BLK,OBLK(DEVDAT) CAIN BLK,DIRBLKK ;CHECK IF WRITING DIRECTORY JRST COR2HM ;YES, WRITE CORE IMAGE - JUMPE BLK,FAKAV ;DONT WRITE IF NO BLOCK GIVEN - + JUMPE BLK,FAKADV ;DONT WRITE IF NO BLOCK GIVEN PUSHJ PDP,BLKCHK ;CHECK FOR LEGAL BLOCK UOUT2: TLNN IOS,DMPMOD ;ALREADY HAVE CONTROL IF DUMP-MODE PUSHJ PDP,GETDT ;GET DEC TAPE CONTROLLER @@ -623,6 +626,7 @@ OUTBLK: HRLM BLK,BUF ;SAVE LINK IN 1ST WORD OF BLOCK OUTBL2: HRRZ BLK,OBLK(DEVDAT) PUSHJ PDP,STOIOS + WRTBLK: PUSHJ PDP,FNDBLK ;GO SEARCH FOR BLOCK MOVE TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE JRST RDWRT @@ -655,7 +659,7 @@ DMPSET: PUSHJ PDP,GETDT ;GET CONTROL JRST DMPTS1 ;YES. RETURN IFN CPBIT, < TRNE IOS,UDSD ;NO. NON-STD MODE? - SOJA DAT,TDUSER ;YES. GO ELSEWHERE + SOJA DAT,TOUSER ;YES. GO ELSEWHERE > DMPST2: SOS UUO ;NO. SAVE START OF LIST (-1) MOVEM UUO,DMPLST(DEVDAT) @@ -664,9 +668,10 @@ DMPST2: SOS UUO ;NO. SAVE START OF LIST (-1) DMPTS1: POP PDP,TAC JRST THRUTD + IFN CPBIT, < ;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY -TOUSRF: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE +TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE ASH DAT,-7 ;NUMBER OF WRDS IN LIST /200 AOS DAT MOVEM DAT,BLKCNT ;SAVE TO UPDATE POSITION @@ -675,7 +680,7 @@ TOUSR1: MOVEM UUO,USPNTR ;SAVE IT MOVEM UUO,SVPNTR ADDI TAC,(PROG) ;RELOCATE ADDRESS OF 1ST IOWD MOVEM TAC,PNTR ;AND SAVE IT - MOVE TAC,[JSP DMPADV] ;SET UP LOC FOR WHEN + MOVE TAC,[JSR DMPADV] ;SET UP LOC FOR WHEN MOVEM TAC,DTALC2 ;IOWD IS EXHAUSTED HRRZM PROG,ADRPRG ;SAVE JUST ADDRESS OF PROG TLO IOS,NOBUF ;INDICATE DIRECTLY TO USER @@ -684,6 +689,7 @@ TOUSR1: MOVEM UUO,USPNTR ;SAVE IT POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME JRST OUTBL2 + NOBLK0: TRO IOS,IOIMPM POP PDP,TAC ;RETURN TO UUOCON WITH ERROR BIT SET JRST THRUTD @@ -696,7 +702,7 @@ DMPFIL: MOVSI TAC1,-177 > DMPFLB: PUSHJ PDP,NXTCOM ;GET NEXT COMMAND JRST DMPOTH ;END OF LIST -DMPLFA: MOVE TEM,(TAC) ;GET NEXT WORD +DMPFLA: MOVE TEM,(TAC) ;GET NEXT WORD MOVEM TEM,BUF+1(TAC1) ;INTO BUFFER AOBJP TAC1,DMPOVR ;BUFFER FULL IF GOES AOBJN TAC,.-3 ;GET NEXT WORD FROM COMMAND @@ -727,6 +733,7 @@ DMPOVA: MOVEI TAC,177 MOVEM TAC,BUF ;WD CNT =177 JRST OUFULL ;GO WRITE PART OF STUFF + ;GET NEXT COMMAND FROM LIST NXTCOM: SKIPN DMPLST(DEVDAT) ;END OF COMMANDS? JRST NXTCM2 ;YES. RETURN @@ -734,14 +741,16 @@ NXTCOM: SKIPN DMPLST(DEVDAT) ;END OF COMMANDS? NXTCM1: HRRM TAC,DMPLST(DEVDAT) ;STORE GO-TO ADDRESS MOVE TAC,@TAC ;GET COMMAND JUMPE TAC,NXTCM2 ;END OF LIST - JUMPG TAX,NXTCM1 ;GO-TO WORD + JUMPG TAC,NXTCM1 ;GO-TO WORD ADDI TAC,(PROG) ;REAL COMMAND - ADD RELOCATION AOJA TAC,CPOPJ1 ;AND RETURN + ;END OF DUMP-MODE LIST NXTCM2: SETZM SVDWRD(DEVDAT) ;ZERO POINTERS SETZM DMPLST(DEVDAT) POPJ PDP, + DMPFLC: SKIPE TAC,SVDWRD(DEVDAT) ;IS THERE ANOTHER COMMAND JRST DMPFLA ;YES. GET IT JRST DMPTH2 ;NO. THROUGH @@ -764,7 +773,6 @@ RDWRT: HLLM TAC1,IOWD ;BLKI OR BLKO SKIPA TAC,BFPNTR ;NO. INTO BUF HRR TAC,DLOC(DEVDAT) ;YES. LOC OF DIRECTORY CONSZ DTC,100000 ;IN REVERSE? - JRST IORVRS ;YES SOS TAC ;ADDRESS -1 MOVE TEM,IOWD ;GET IOWD @@ -782,7 +790,8 @@ IOGO2: CONO DTC,DTBOTH(TAC1) ;START READ OR WRITE ;HERE IF TAPE IS GOING IN REVERSE WHEN BLOCK NUMBER FOUND IORVRS: ADDI TAC,176 ;START AT TOP OF BUFFER MOVE TEM,[JSR RVERS] - JRST TOGO ;COMPILCATED STUFF FOR EACH WORD + JRST IOGO ;COMPILCATED STUFF FOR EACH WORD + ;HERE FOR AY DATA WORD WITH TAPE IN REVERSE RVERS: 0 @@ -810,6 +819,7 @@ MTAP0: PUSHJ PDP,GETDT ;GET THE CONTROL FOR THE TAPE MOVEI BLK,0 ;SEARCH FOR BLOCK 0 PUSHJ PDP,FNDBLK ;GO FIND BLOCK + ;CONTROL COMES HERE ON INTERRUPT CHANNEL WHEN THE BLOCK IS FOUND TLNE IOS,RUNBIT ;REWIND UNLOAD? JRST .+3 ;YES, CONTINUE @@ -829,6 +839,7 @@ RUNCLK: MOVE DEVDAT,USEWRD MOVE IOS,DEVIOS(DEVDAT) ;RESET IOS JRST REWDUN ;DECREASE DTREQ. STOP TAP + ;HERE TO PUT C(TAC) IN THE CLOCK QUEUE CLKREQ: 0 CONO PI,PIOFF ;TURN OFF PI @@ -877,7 +888,8 @@ SRCH: 0 TLNE TAC,2000 ;IS CONTROL STILL ACTIVE? JRST SRCHD ;YES. MUST BE IN "PSEUDO END-ZONE" DATAI DTC,TAC ;NO. READ A BLOCK NUMBER - TLZ TAC,-1 ;LEGAL BLOCK NUMBER> + TLZ TAC,-1 ;INSURANCE + CAILE TAC,TOPBLK ;LEGAL BLOCK NUMBER? JRST SRCHB ;NO. SET ERROR SWITCH SUB TAC,BLOCK ;NOW-WANTED IFN CPBIT, < @@ -888,13 +900,12 @@ SRCH: 0 SRCHA: CONSZ DTC,100000 ;IF TAPE IS IN REVERSE MOVNS TAC ;SWITCH TURN-AROUND TEST JUMPLE TAC,.+3 ;TEST FOR DISCONNECT IF DIRECTION IS CORRECT - ;*** CONO DTC,DTTURN ;TURN AROUND JRST SRCHXT ;AND GO AWAY MOVMS TAC CAILE TAC,MINDIS ;WORTH WHILE TO DISCONNECT TAPE? - JRST BEKON ;YES. GO DISCONNECT + JRST REKON ;YES. GO DISCONNECT SKIPLE DISCON ;NO. IS THERE A DISCON. TAPE ;WHICH HAS TIMED OUT? CAIG TAC,2 ;YES. WILL THIS SEARCH TAKE LONG? @@ -906,18 +917,19 @@ SRCHXT: MOVE TAC,TEMP ;RESTORE TAC SETZM ALMSWT JEN @SRCH ;AND DISMISS THE INTERRUPT ;HERE IF AN ILLEGAL BLOCK WAS READ FROM THE TAPE -SRCHR: AOS TAC,ERRCNT ;BUMP ERROR COUNT - CAIG TAC,DTTRV ;TRIED ENOUGH? +SRCHB: AOS TAC,ERRCNT ;BUMP ERROR COUNT + CAIG TAC,DTTRY ;TRIED ENOUGH? JRST SRCHXT ;NO. READ ANOTHER BLOCK NUMBER SETOM BLOCK ;YES. BLOCK = -1 AS AN ERROR SWITCH - CONO DTA,770001 ;FUNCTION STOP + CONO DTS,770001 ;FUNCTION STOP JRST SRCHXT ;GO AWAY + IFN CPBIT, < SRCHC: CONSZ DTC,100000 ;GOING FORWARD? TLCA TAC,400000 ;NO. SWITCH TURN AROUND TEST. ENSURE FORWARD JUMPE TAC,FOUND ;GO IF FOUND FORWARD - SKIPI TAC ;TURN AROUND?> + SKIPL TAC ;TURN AROUND? CONO DTC,DTTURN ;YES JRST SRCHXT ;READ ANOTHER BLOCK NUMBER > @@ -946,7 +958,6 @@ REKON: SKIPN IOWRIT ;MONITOR BUFFER FULL? LDB TAC1,PJOBN ;ASSOCIATED JOB NUMBER HRRM TAC1,MONB2 ;SAVE IN WD 2 OF MONITOR BUFFER HRLM DEVDAT,MONB2 ;SAVE ADDRESS OF DTA - CONSZ DTC,200000 IMULI TAC,62 ;COMPUTE A TIME TO BLOCK CONSZ DTC,100000 ;BASED ON 50 MSEC/BLOCK FORWARD @@ -993,6 +1004,7 @@ NXTICK: MOVE TAC,TIMRQ2 ;COME BACK IN A JIFFY TIMREQ: XWD BACK,0 TIMRQ2: XWD BACKA,1 + IFN ALMACT,< EXTERN PRIIN ;COME HERE ON THE CLOCK LEVEL TO BRING THE JOB ASSOCIATED WITH @@ -1006,12 +1018,13 @@ ALMREQ: XWD .+1,1 ANDCAM TAC,DEVIOS(DEVDAT) ;ZAP BIT SO IT WONT BE SWAPPED OUT AGAIN POPJ PDP, + ;HERE WHEN SWAPPER DOES GET THE JOB BACK INTO CORE SWPBAK: MOVE IOS,DEVIOS(DEVDAT) - SETM MONB2 ;CLEAR JOB NO, FROM MON BUFFER + SETZM MONB2 ;CLEAR JOB NO, FROM MON BUFFER TLNN IOS,IOFST ;WAS JOB SWAPPED OUT WHEN DATA FINISHED? POPJ PDP, ;NO. TRANSFER COMPLETED - MOVE TAC,JBTSTS(ITEM) ;YES, WAS IO ABORTED?> + MOVE TAC,JBTSTS(ITEM) ;YES, WAS IO ABORTED? TRNN TAC,ALBORT JRST FAKINT ;NO. NOW TRANSFER DATA, ADVANCE BUFFERS JRST THRUTP ;YES. FORGET REST OF OPERATION @@ -1035,7 +1048,6 @@ BACK2: TRZ TAC,10 HLRZ TAC1,IBLK(DEVDAT) ;BLOCK NEEDED DPB TAC1,[POINT 10,BLOCK,35] HRRZ TAC,CLOCK - HRLI TAC1,CPOPJ ;FIND CLOCK-QUEUE REFERENVCE TO BACKC BACK3: CAIN TAC,CIPWTM JRST BACKD ;NOT THERE, TAPE MUST HAVE BEEN STOPPED @@ -1070,6 +1082,7 @@ BACKA: SETOM TAC ;DISCON WILL GO TO -1 EXCH TAC,DISCON ;UNIT TO CONNECT TO JRST BACK2 ;GO RECONNECT + ;IF WE GET HERE THERE IS A SLOW TAPE ON THE SELECTED DRIVE BACKC: CONO PI,PIOFF ;CANT RISK CHANGING THE INTERRUPT ENABLES HRE CONI DTS,TAC ;READ IN ENABLE FLAGS @@ -1083,7 +1096,7 @@ FOUND: MOVEM TAC1,FNDTMP ;SAVE THOSE ACS THAT WILL BE USED MOVEM TEM,RVERS EXCH DEVDAT,USEWRD EXCH IOS,DEVIOS(DEVDAT) - ECHO PDP,FNDPDP + EXCH PDP,FNDPDP PUSHJ PDP,@DISPAD(DEVDAT) ;GO TO DISPATCH LOCATION EXCH PDP,FNDPDP ;RESTORE ACS EXCH IOS,DEVIOS(DEVDAT) @@ -1096,6 +1109,7 @@ FOUND: MOVEM TAC1,FNDTMP ;SAVE THOSE ACS THAT WILL BE USED FNDPDP: XWD -2,. 0 + IFN CPBIT, < ;HERE WHERE DUMP-MODE POINTER RUNS OUT DMPADV: 0 @@ -1139,6 +1153,7 @@ DTAIN1: TLZE IOS,REWBIT ;NO, FROM A REWIND MTAPE? CONSZ DTS,670000 ;AND NO ERRORS? JRST ERRS ;NO. TOUGH LUCK SKIPGE BLOCK ;BAD BLOCK NUMBER ON TAPE? + JRST DERR ;YES, TURN ON IODERR DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST DMPTHR ;YES. GO ELSEWHERE TLNN IOS,SINGL @@ -1155,6 +1170,7 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST OUTHRU ;YES EXTERN JBTSTS,PJOBN + ;HERE ON END OF AN INPUT BLOCK HRROI TAC1,177 ;MASK OUT 1ST-BLK DATA TRNN IOS,UDSD ;UNLESS IN NON-STD @@ -1169,9 +1185,8 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? HRRM BLK,IBLK(DEVDAT) ;DAVE IN DDB TRNE IOS,IODTER+IODERR+IOIMPM JRST THRUIN - PUSHJ PDP,ADVBUFF ;GET NEXT BUFFER + PUSHJ PDP,ADVBFF ;GET NEXT BUFFER JRST THRUIN ;EMPTY BUF NOT AVAILABLE - SKIPLE DISCON ;TAPE TIMED OUT? JRST BACKB ;YES. GO RECONNECT SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE @@ -1181,6 +1196,7 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? SKIPG DTREQ ;YES. ANYONE ELSE WANT IT? JRST READBC ;NO. READ NEXT BLOCK + THRUIN: HRRZ TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN? JUMPN TAC,THRUTP ;YES. DONT CHANGE REVERSE BIT TLZ IOS,RVERSE ;NO. SET IOS BIT TO CORRECT DIRECTION @@ -1193,7 +1209,7 @@ THRUTP: SKIPLE TAC,DISCON ;TAPE TIMED OUT? THRUTD: SOSL DTREQ ;BUMP COUNT DOWN SETOM DTAVAL ;TELL SCHEDULER THRUTA: CONO DTC,10000 ;DESELECT CONTROL - TLZ IOS,DMPMOD+NOBUF+DMPCLS+PEWBIT+RUNBIT + TLZ IOS,DMPMOD+NOBUF+DMPCLS+REWBIT+RUNBIT SETZM USEWRD ;INDICATE CONTROL NOW FREE JRST CLRACT ;RESET IOACT AND RETURN @@ -1203,6 +1219,7 @@ HUNGTP: JUMPGE IOS,THRUTP ;GIVE UP CONTROL IF NOT DEAD-RECKONING ;WHEN THE TAPE TIMES OUT FNDBLK WILL RESET THE HUNG TIME, AND ;IF IT IS STILL HUNG AT ITS END THE ERROR MESSAGE WILL OCCUR + INTERN FTSWAP EXTERN SHFWAT ;HERE ON END OF BLOCK WHEN THE JOB IS STILL SWAPPED OUT @@ -1240,6 +1257,7 @@ OUTHRU: PUSHJ PDP,ADVBFE ;GET NEXT BUFFER JRST FILBUF ;NO. GO WRITE NEXT BLOCK JRST THRUTP ;YES. GIVE UP TAPE + ;TURN TAPE AROUND AFTER END-ZONE INTERRUPT TURN: CONSZ DTC,500 ;READ BLOCK NUMBERS? JRST DIREOF ;NO. END ZONE WHILE READING DATA @@ -1266,9 +1284,9 @@ SVDMTH: SKIPLE DISCON ;HAS A TAPE TIMED OUT SUB TAC1,ONEONE ;SET UP TAC1 WITH COUNT > TLNN IOS,IO - JRST SVOMIN ;INPUT FILE + JRST SVDMIN ;INPUT FILE HRRZ BLK,OBLK(DEVDAT) ;OUTPUT FILE, NEXT BLOCK - JUMPF BLK,DMPTHA ;LAST BLOCK + JUMPE BLK,DMPTHA ;LAST BLOCK IFE CPBIT, < TRNE IOS,UDSD ;IF NON-STD MODE AOSA OBLK(DEVDAT) ;WRITE CONSECUTIVE BLOCKS @@ -1295,6 +1313,7 @@ SVDMIN: HLRZ BLK,BUF ;NEXT BLOCK NUMBER HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB JRST CPOPJ1 + IFN CPBIT, < ;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER USDMTH: MOVEI TAC1,IBLK(DEVDAT) @@ -1329,12 +1348,14 @@ DMIFLB: MOVE TEM,BUF+1(TAC1) ;NEXT DATA WORD JUMPE BLK,DMPEOF ;IF EOF - LIGHT BIT RDNXT: CAIG BLK,TOPBLK ;BLOCK LEGAL? JRST READBC ;GO READ BLOCK NUMBER - TROA IOS,IOBLKT ;LIGHT ERROR BIT + TROA IOS,IOBKTL ;LIGHT ERROR BIT ;EOF BEFORE ALL DATA IS IN - DUMP MODE DMPEOF: TRO IOS,IODEND ;LIGHT EOF BIT JRST DMPTH2 ;GIVE UP TAPE - SVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL + + +SVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL JRST ADRERR ;TYPE ERROR MESSAGE ;COME HERE ON ERROR ERRS: AOS TAC,ERRCNT ;BUMP COUNT @@ -1349,7 +1370,7 @@ ERRS: AOS TAC,ERRCNT ;BUMP COUNT > ERRS1: CONSO DTS,40000 ;IF ILLEGAL OP - DONT RETRY CAILE TAC,DTTRY ;ENOUGH REREADS? - JRST PERMET ;YES. PERMANENT ERROR + JRST PERMER ;YES. PERMANENT ERROR JRST FNDBL2 ;NO. TRY AGAIN ;PERMANENT ERROR @@ -1363,7 +1384,7 @@ DERR: TRO IOS,IODERR ;MISSED DATA TRO IOS,IOIMPM ;ILLEGAL OP TLNE IOS,DMPMOD ;DUMP MODE? JRST DMPTHR ;YES. NOT THROUGH YET - TLNN IOS,IO+RDDIR+SINGL + TLNN IOS,IO+RWDIR+SINGL JRST DTAIN2 REWDUN: TLZE IOS,IOW PUSHJ PDP,SETIOD ;NO. TAKE OUT OF IO WAIT @@ -1371,9 +1392,9 @@ REWDUN: TLZE IOS,IOW JRST THRUTP ;NO. RETURN TO USER PUSHJ PDP,THRUTP ;YES. STOP TAPE MOVSI TAC,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT - ANDCAM TAC,DEVMOND(DEVDAT) + ANDCAM TAC,DEVMOD(DEVDAT) BDDIR: LDB ITEM,PJOBN ;NUMBER OF OFFENDING JOB - JRST RADDIR ;GO PRINT ERROR MESSAGE + JRST BADDIR ;GO PRINT ERROR MESSAGE INTERN DTABUF BFPNTR: IOWD 200,BUF+1 ONEONE: XWD 1,1 @@ -1393,9 +1414,8 @@ ALMSWT: 0 IFN CPBIT, < BLKCNT: 0 SVPNTR: 0 - USPNTR: 0 -DIRCNT: 0 +DIRCTN: 0 > ;THIS IS THE MONITOR BUFFER DTABUF: