X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..e0fec1517dc67b791890a0016bc6ecb0c168485d:/src/dtcsrn.mac diff --git a/src/dtcsrn.mac b/src/dtcsrn.mac index d8286ce..64eaa93 100644 --- a/src/dtcsrn.mac +++ b/src/dtcsrn.mac @@ -1,12 +1,12 @@ TITLE DTCSRN - NEW FORMAT DECTAPE SERVICE FOR 551 (PDP-6) SUBTTL DTA551 A.WACHS/TW/RCC 01 JUN 69 V012 - XP VDTASR,012 ;GLOBAL VERSION NUMBER FOIR LOADER STORAGE MAP. + XP VDTASR,012 ;GLOBAL VERSION NUMBER FOR LOADER STORAGE MAP. + ENTRY DTCSRN ;ENTRY POINT FOR SELECTIVE LOAD BY BUILD DTCSRN: EXTERNAL TPOPJ,TPOPJ1,DTCCHL,DCOUT,DCIN,DCON,DCOFF -EXTERNAL STOIOS,STOTAC,SETACT,CLRACT,OUT,DTASAV,PIOMOD - +EXTERNAL STOIOS,STOTAC,SETACT,CLRACT,OUT,DTCSAV,PIOMOD EXTERNAL DTAVAL,DTREQ,SETIOD,THSDAT,PUNIT,GETDCDT EXTERNAL ADVBFE,ADVBFF,ADRERR,WAIT1,CPOPJ,CPOPJ1,BADDIR EXTERNAL COMCHK,PJOBN,RELEA9,UADCK1,DTTRY @@ -23,6 +23,7 @@ NAMSTR=^D83 ;1ST NAME WORD IN DIRECTORY QUANT=5 ;NUMBER OF BLOCKS CAN READ BEORE GIVING UP DTC SPACE=6 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE + ;DDB MAGIC CELLS FSTBLK=13 DLOC=14 @@ -49,10 +50,9 @@ NOBUFC=737777 ;-NOBUF CPBIT=-1 ;CONDITIONAL ASSEMBLY PARAMETER FOR I/O DIRECTLY ;TO USER. IF -1 THE I/O IN DUMP MODE WITH ;BIT 29 ON IN INIT WILL DO IO DIRECTLY TO USER - ;WIUTHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES - EXTERN JIFSEC + ;WITHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES - INTERN DTCINT,DTCDDB,DTCINI,DTCDDS + INTERN DTCINT,DTCDDB,DTCINI,DTCDDS DTCDDB: SIXBIT /DTA0/ XWD ^D60*HUNGST,200 @@ -60,21 +60,18 @@ DTCDDB: SIXBIT /DTA0/ EXP DTCDSP XWD 1107,154403 EXP 0,0 - XWD PROG,0 XWD PROG,0 EXP 0,0,0 - EXP DTCDIR EXP 0,0,0,0,0 - - DTCDIR: BLOCK 200 DTCDDS=.-DTCDDB + JRST DTCINI JRST THRUTP ;HUNG DEVICE -DTADSP JRST UREL +DTCDSP: JRST UREL JRST UCLS JRST UOUT JRST UIN @@ -90,6 +87,7 @@ DTADSP JRST UREL JRST UTPCLR POPJ PDP, ;MTAPE + ;INITIALIZE DTC DTCINI: CONO DTC,0 CONO DC,0 @@ -125,10 +123,10 @@ STOWD4: IMUL TAC1,[-177] ;-NUMBER OF WORDS IF ALL BLOCKS FULL TLO IOS,SINGL ;JUST READ 1 RECORD MOVEI BLK,DIRBLK ;NO, FIND FIRST MENTION OF BLOCK PUSHJ PDP,LSTFRE+1 ;NEAR DIRECTORY - JUMPN BLK,LOOKE ;FOUND IF BLK NOT =0 + JUMPN BLK,.+3 ;FOUND IF BLK NOT =0 LOOKD: PUSHJ PDP,BLKSRC ;FIND FIRST MENTION IN DIRECTORY JRST BDDIR ;NOT THERE - ERROR -LOOKE: PUSHJ PDP,RDBLUK ;GO READ IT + PUSHJ PDP,READBF ;GO READ IT PUSHJ PDP,WAIT1 ;WAIT TILL IT'S IN HRLM AC1,IBLK(DEVDAT) ;SAVE INDEX ON INPUT FILE FOR LATER ;TEST ON ENTER - WONT ALLOW ENTER @@ -160,7 +158,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 @@ -185,11 +182,11 @@ DSER1: PUSHJ PDP,DIRCHK ;ENSURE DIRECTORY IS IN CORE HRRZ TAC,DLOC(DEVDAT) ;LOCAION OF DIRECTORY ADD TAC,[XWD -26,NAMSTR] ;POINT TO START OF NAMES NMLOOK: SKIPN TAC1,@UUO ;GET NAME - JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN + JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN 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 @@ -263,7 +260,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 @@ -277,7 +273,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 @@ -298,11 +294,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 @@ -323,7 +319,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 @@ -332,12 +328,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 @@ -372,6 +368,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 @@ -397,6 +394,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, @@ -444,7 +442,8 @@ UREL: SETZM FSTBLK(DEVDAT) ;ZERO FSTBLK PUSHJ PDP,GETDT ;WAIT TILL DTC AVAILABLE MOVEI BLK,DIRBLK ;BLOCK NUMBER PUSHJ PDP,WRTBLK ;WRITE UT - PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN + JRST WAIT1 ;DONT RETURN TO USER TILL DONE + ;GET DEC TAPE CONTROLLER GETDT: PUSHJ PDP,GETDCDT ;GET DATA CONTROL. DECTAPE CONTROL @@ -455,8 +454,9 @@ GETDT: PUSHJ PDP,GETDCDT ;GET DATA CONTROL. DECTAPE CONTROL MOVEM DEVDAT,USEWRD ;SAVE ACS NEEDED ON INTERRUPT LEVEL JRST SETACT ;LIGHT IOACT AND RETURN + ;HERE TO CLOSE A DUMP MODE FILE -CLSDMP: TLO IOS,DMPOCLS+IO+DMPMOD ;SET SWITCHES +CLSDMP: TLO IOS,CLSDMP ;SET SWITCHES PUSHJ PDP,GETDT ;GET CONTROL SETZM BUF ;ENSURE LINK, WORDCOUNT=0 JRST OUFULL ;GO WRITE THE BLOCK @@ -479,7 +479,6 @@ UIN: TLZ IOS,IO 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 ;READING DIRECTORY - GIVE CORE IMAGE IF IT EXISTS @@ -503,6 +502,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) @@ -527,12 +527,11 @@ UOUT: TLO IOS,IO JRST UOUT2 ;YES PUSHJ PDP,DIRCHK ;NO. MAKE SURE DIRECTORY IS IN CORE HRRZ BLK,OBLK(DEVDAT) - CAIN BLK,DIRBLKK ;CHECK IF WRITING DIRECTORY + CAIN BLK,DIRBLK ;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 FILBUF: DTOCHK: TLNE IOS,DMPMOD ;DUMP MODE? @@ -540,13 +539,15 @@ DTOCHK: TLNE IOS,DMPMOD ;DUMP MODE? MOVSI TAC,@DEVOAD(DEVDAT) ;LOCATION OF BUFFER ADD TAC,[XWD 1,BUF];SET TO STORE IN MONITOR BUFFER BLT TAC,BUF+177 ;GO BLT IT + SKIPN BUF ;GIVE UP TAPE IF + JRST THRUTP ;NO BUFFER TO OUTPUT TLZ IOS,NOLINK OUFULL: TRNE IOS,UDSD ;NON-STANDARD? JRST OUTBL2 ;YES, NO FILE-STRUCTURED OPERATIONS HLRE BLK,BUF ;IS IT? JUMPL BLK,LSTBLK ;YES, - LAST BLOCK OF FILE JUMPN BLK,OUTBLK ;IF NON-0 - YES - TLNE IOS,DMPCLS ;NO. LAST BLOCK OF A DUMPO FILE? + TLZE IOS,DMPCLS ;NO. LAST BLOCK OF A DUMPO FILE? JRST OUTBLK ;YES. LINK MUST STAY 0 OUCOMP: PUSHJ PDP,USRFRE ;COMPUTE NEXT BLOCK TLO IOS,NOLINK ;THIS BLOCK NOT LINKED @@ -561,8 +562,9 @@ 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 + MOVE TAC1,[BLKO DC,700] ;HERE WE ARE - GO WRITE JRST RDWRT ;WRITE LAST BLOCK LSTBLK: MOVEI BLK,0 ;LINK=0 @@ -575,10 +577,9 @@ COR2HM: MOVEI TAC,@DEVOAD(DEVDAT) ;WHERE IT IS MOVEI TAC1,177(TAC) BLT TAC,(TAC1) TLO IOS,CHNGDR ;REMEMBER TO WRITE IT OUT - MOVSI TAC1,DVDIRI + MOVSI TAC1,400000 ORM TAC1,DEVMOD(DEVDAT) ;DIR. IS NOW IN CORE -FAKADV: TLZE IOS,DMPMOD ;DUMP MODE? - JRST THRUTD ;YES. GIVE UP CONTROL +FAKADV: TLZN IOS,DMPMOD PUSHJ PDP,ADVBFE ;ADVANCE BUFFERS JFCL TLZ IOS,NOLINK ;DIRECTORY BLOCK IS NOT LINKED @@ -590,11 +591,11 @@ DMPSET: TLO IOS,DMPMOD ;LIGHT BIT HRLI UUO,PROG PUSHJ PDP,COMCHK ;CHECK VALIDITY OF LIST JRST SVADER ;NG. GIVE ADRESS ERROR - SKIPL TAC,@UUO ;OK. NULL LIST? + SKIPN TAC,@UUO ;OK. NULL LIST? 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) @@ -603,9 +604,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 @@ -614,10 +616,11 @@ TOUSRF: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE 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,DCLOC1 ;IOWD IS EXHAUSTED HRRZM PROG,ADRPRG ;SAVE JUST ADDRESS OF PROG TLO IOS,NOBUF ;INDICATE DIRECTLY TO USER + XCT @1(PDP) ;TURN ON/OFF IO TLNN IOS,IO JRST CPOPJ1 ;READING - CONTINUE POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME @@ -631,7 +634,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 @@ -670,14 +673,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 @@ -689,7 +694,7 @@ READBF: TLNN IOS,DMPMOD ;HAVE CONTROL IF DUMP-MODE PUSHJ PDP,GETDT ;GET DT CONTROL READBC: PUSHJ PDP,FNDBLK ;SEARCH FOR RIGHT BLOCK - MOVE TAC1,[BLKI DTC,300] ;FOUND IT - START READING + MOVE TAC1,[BLKI DC,300] ;FOUND IT - START READING ;HERE WITH BLK=BLOCK NUMBER, TAC1=FUNCTION, START SEARCH RDWRT: PUSH PDP,TAC @@ -706,18 +711,19 @@ IOGO: IFN CPBIT, < OR TAC1,UNIT ;UNIT AND PI CHAN MOVEM TAC1,COMAND ;SAVE COMMAND FOR READ OR WRITE POP PDP,TAC ;RESTORE SEARCH COMMAND - CONO DC,DCIN ;SET DATA CONTROL TO REAF + CONO DC,DCIN ;SET DATA CONTROL TO READ CONO PI,DCON ;TURN ON DC PI CHANNEL - HLRI TAC,37 + HRLI TAC,37 CONO PI,PIOFF CONO DTC,(TAC) ;START TAPE MOVING HLRM TAC,DTCINT CONO PI,PION POPJ PDP, ;DISMISS INTERRUPT -;HERE FOR AY DATA WORD WITH TAPE IN REVERSE + +;HERE FOR ANY DATA WORD WITH TAPE IN REVERSE RVERS: 0 -IOWD: BLKI DTC,PNTR ;READ (WRITE) A WORD +IOWD: BLKI DC,PNTR ;READ (WRITE) A WORD JRST RVTHRU ;POINTER RAN OUT SOS PNTR ;POINTER HAS TO BACK UP SOS PNTR @@ -731,11 +737,12 @@ DTATHR: 0 JSR SHUTDN ;SHUT DOWN DATA CONTROL JEN @DTATHR ;DISMISS + SHUTDN: 0 CONSZ DC,10000 ;DATA MISSED? SETOM ERRFLG ;YES. SET SWITCH CONSO DTC,400 ;READING? - CONO DC,0 ;YES. TERN OFF DC + CONO DC,0 ;YES. TURN OFF DC CONO PI,DCOFF ;TURN OFF DC PI JRST @SHUTDN ;COME HERE TO START READING BLOCK NUMBERS @@ -757,7 +764,6 @@ FNDBL2: SETZM ERRFLG ;RESET DATA MISSED FLAG MOVEM TEM,DCLOC1 ;FOR FORWARD DATA OPERATIONS CONSZ DTC,20000 ;IS TAPE ALREADY MOVING/ JRST FNDBL4 ;YES - TRO TAC,323200 ;NO, SET READ BLK NOS., START DELAY TLNN IOS,RVERSE ;MOVE TAPE BACKWARDS? TRO TAC,10000 ;YES @@ -770,6 +776,7 @@ FNDBL3: IFN CPBIT, < MOVEM IOS,DEVIOS(DEVDAT) ;RESTORE IOS IN CORE POPJ PDP, ;AND EXIT + ;HERE TO INITIATE READ OF A TAPE THAT IS MOVING ALREADY FNDBL4: CONSZ DTC,10000 ;GOING BACKWARDS? TRO TAC,10000 ;YES @@ -778,7 +785,7 @@ FNDBL4: CONSZ DTC,10000 ;GOING BACKWARDS? ;INTERRUPT HERE TO READ A BLOCK NUMBER SRCH: 0 MOVEM TAC,TEMP ;SAVE TAC - DATAI DTC,TAC ;NO. READ A BLOCK NUMBER + DATAI DC,TAC ;NO. READ A BLOCK NUMBER SUB TAC,BLOCK ;;PRESENT BLOCK - TARGET BLOCK IFN CPBIT, < SKIPE DIRCTN ;IF DIRECT IO @@ -826,7 +833,7 @@ FND1: MOVEM TAC,DCLOC CONO DTC,360000(TAC) ;START DATA FLOW JRST SRCHXT ;AND LEAVE -IORVS: MOVEI TAC,10000 ;SET IO FOR REVERSE +IORVRS: MOVEI TAC,10000 ;SET IO FOR REVERSE ORM TAC,COMAND MOVEI TAC,177 ADDM TAC,PNTR ;READ FROM TOP OF BUFFER DOWN @@ -835,7 +842,7 @@ IORVS: MOVEI TAC,10000 ;SET IO FOR REVERSE ;INTERRUPT HERE FOR FLAG CHANNEL DTCINT: CONSO DTS,37 ;INTERRUPT FOR DECTAPE? JRST . ;NO, GO AWAY - CONSZ DTS,40000 ;YES. JOB DONE ENABLED? + CONSO DTC,40000 ;YES. JOB DONE ENABLED? JRST BLKNUM ;NO. READING BLOCK NUMBERS CONSZ DTC,4000 ;YES. TIME FLAG ENABLED? JRST TIMINT ;YES. CHECK IF THIS IS A TIME INTERRUPT @@ -847,7 +854,7 @@ DTCIN1: CONO DC,0 ;NO. TURN OFF DATA CONTROL CONSZ DTS,1 ;JOB DONE LIT? CONSZ DTS,116 ;AND NO ERORS? JRST ERRS ;NO. ERROR - SKIPF ERRFLG ;DATA MISSED? + SKIPE ERRFLG ;DATA MISSED? JRST ERRS ;YES. TOO BAD ;DATA WAS READ IN OR WRITTEN OUT FINE @@ -860,13 +867,13 @@ DTCIN2: TLNE IOS,DMPMOD ;DUMP MODE? MOVEM TAC,IBLK(DEVDAT) ;STORE IN DDB TLZE IOS,IOW ;NO. IN IO WAIT? PUSHJ PDP,SETIOD ;YES. TAKE OUT OF WAIT - TLZE IOS,SINGL+RWDIR+DMPCLS ;DIRECTORY OPERATION OR - ;CLOSING DUMP FILE? + TLZE IOS,SINGL+RWDIR ;DIRECTORY OPERATION? JRST THRUTP ;YES. LEAVE TLNE IOS,IO ;WRITING? 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 @@ -876,14 +883,13 @@ DTCIN2: TLNE IOS,DMPMOD ;DUMP MODE? MOVEI TAC1,177(TAC) BLT TAC,(TAC1) ;TRANSFER IT HLRZ BLK,BUF ;NEXT BLOCK TO READ - TRNE IOS,UDSD ;IF NON-STD - AOSA BLK,IBLK(DEVDAT);READ SEQUENTIAL BLOCKS + TRNE IOS,UDSD + AOSA BLK,IBLK(DEVDAT) ;READ SEQUENTIAL BLOCKS HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB TRNE IOS,IODTER+IODERR+IOIMPM ;WAS THERE AN INPUT ERROR? JRST THRUIN ;YES. DONT ADVANCE BUFFERS - PUSHJ PDP,ADVBUFF ;GET NEXT BUFFER + PUSHJ PDP,ADVBFF ;GET NEXT BUFFER JRST THRUIN ;EMPTY BUF NOT AVAILABLE - SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE CAILE BLK,TOPBLK ;THE ERROR WILL BE CAUGHT ON THE JRST THRUIN ;UUO LEVEL NEXT TIME AROUND @@ -891,21 +897,22 @@ DTCIN2: 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 - CONSZ DTC,100000 + CONSZ DTC,10000 TLO IOS,RVERSE ;HERE WHEN TAPE IS DONE -THRUTP: CONSO DTC,200000 ;ON INTERRUPT LEVEL? +THRUTP: CONSO DTC,20000 ;ON INTERRUPT LEVEL? JRST THRUTD ;NO. TAPE IS NOT MOVING MOVE TAC,UNIT ;SET TO STOP TAPE CONSZ DTC,10000 ;GOING REVERSE? TRO TAC,10000 ;YES CONO DTC,245000(TAC) ;STOP TAPE, WITH TIME FLAG INTERRUPT ON ;ENABLE JOB DONE AS A FLAG FOR DTCINT -THRUTA: SOSL DTREQ ;GIVE UP DATA CONTROL (DECTAPE CONTROL - SETOM DTAVAL ;WILL BE GIVEN UP AT NEXT INTERRUPT +THRUTA: SOSL DCREQ ;GIVE UP DATA CONTROL (DECTAPE CONTROL + SETOM DCAVAL ;WILL BE GIVEN UP AT NEXT INTERRUPT TLZ IOS,DMPMOD+NOBUF ;RESET DUMP-MODE BIT JRST CLRACT ;RESET IOACT AND RETURN @@ -913,11 +920,10 @@ THRUTD: PUSHJ PDP,THRUTA ;GIVE UP DATA CONTROL SOSL DTREQ ;GIVE UP DECTAPE CONTROL SETOM DTAVAL CONO DC,0 ;SHUT OFF DATA CONTROL - CONO PI,DOFF ;AN TURN OF ITS PI CHANNEL + CONO PI,DCOFF ;AN TURN OF ITS PI CHANNEL CONO DTC,0 ;SHUT DOWN DATA CONTROL HLLZS DTCINT POPJ PDP, ;AND LEAVE - EXTERN CLOCK ;HERE ON END OF OUTPUT BLOCK @@ -932,6 +938,16 @@ 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 INTERUPT +TURN: MOVEM TAC,TEMPA ;SAVE TAC + MOVE TAC,UNIT ;UNIT AND CHANNEL + CONSO DTC,10000 ;IN REVERSE? + TRO TAC,10000 ;NO. NO WILL BE + CONO DTC,322200(TAC);READ BLOCK NOS IN OPPOSITE DIRECTION + MOVE TAC,TEMPA ;RESTORE TAC + JEN @DTCCHL ;AND EXIT THE INTERRUPT + TIMINT: CONSO DTS,20 ;TIME FLAG INTERRUPT ON? JRST SPRIUS ;NO. THIS IS A SPURIOUS INTERRUPT EXCH TAC,TIMREQ ;ANOTHER TAPE CAN NOT BE @@ -943,6 +959,7 @@ TIMINT: CONSO DTS,20 ;TIME FLAG INTERRUPT ON? HLLZS DTCINT JEN @DTCCHL ;AND LEAVE + ;HERE WITH AN INTERRUPT WHILE SEARCHING FOR BLOCK NUMBERS BLKNUM: CONSZ DTS,2 ;END ZONE INTERRUPT? JRST TURN ;YES. TURN AROUND @@ -957,7 +974,7 @@ SPRIUS: CONI DTC,TEMPA ;READ DTC STATUS BITS TIMREQ: XWD .+1,3 ;E CLOCK TICKS SOSL DTREQ ;ALLOW OTHER JOBS - SETOM DTAVAL ;TO GET DT CONTROL NOW + SETOM DTAVAL ;TO GET DT CONTROL NOW POPJ PDP, ;COME HERE ON END OF DUMP MODE BLOCK SVDMTH: IFN CPBIT, < @@ -970,9 +987,9 @@ SVDMTH: IFN CPBIT, < 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 @@ -997,6 +1014,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) @@ -1028,7 +1046,8 @@ 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 @@ -1052,7 +1071,6 @@ ERRS1: CONSO DTS,4 ;IF ILLEGAL OP - DONT RETRY JRST FNDBL2 ;NO. TRY AGAIN ;PERMANENT ERROR - PERMER: CONSZ DTS,10 TRO IOS,IODTER ;PARITY CONSO DTS,100 @@ -1069,12 +1087,11 @@ NOBLK0: TRO IOS,IOIMPM ;ILLEGAL OP TLZN IOS,RWDIR+SINGL ;DIRECTORY OPERATION? JRST THRUTP ;NO. RETURN TO USER PUSHJ PDP,THRUTP ;YES. STOP TAPE - MOVSI TAC,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT - ANDCAM TAC,DEVMOND(DEVDAT) -BDDIR: LDB ITEM,PJOBN ;NUMBER OF OFFENDING JOB - JRST RADDIR ;GO PRINT ERROR MESSAGE - INTERN DTABUF -BFPNTR: IOWD 200,BUF+1 + MOVSI TAC,400000 ;CLEAR DIRECTORY IN CORE BIT + ANDCAM TAC,DEVMOD(DEVDAT) +BDDIR: LDB BLK,PJOBN ;NUMBER OF OFFENDING JOB + JRST BADDIR ;GO PRINT ERROR MESSAGE + BFPNTR: IOWD 200,BUF+1 ONEONE: XWD 1,1 USEWRD: 0 USEPRG: 0 @@ -1090,10 +1107,10 @@ COMAND: 0 ERRFLG: 0 IFN CPBIT, < BLKCNT: 0 -SVPNTR: 0 USPNTR: 0 +SVPNTR: 0 ADRPRG: 0 -DIRCNT: 0 +DIRCTN: 0 > BUF: BLOCK 200 DTAEND: END