Added CREF.MAC
[retro-software/dec/tops10/v4.5.git] / src / dtcsrn.mac
index d8286ce..c665ac5 100644 (file)
@@ -1,12 +1,12 @@
 TITLE  DTCSRN - NEW FORMAT DECTAPE SERVICE FOR 551 (PDP-6)\r
 SUBTTL DTA551 A.WACHS/TW/RCC 01 JUN 69  V012\r
-       XP      VDTASR,012      ;GLOBAL VERSION NUMBER FOIR LOADER STORAGE MAP.\r
+       XP      VDTASR,012      ;GLOBAL VERSION NUMBER FOR LOADER STORAGE MAP.\r
+\r
 \r
        ENTRY   DTCSRN   ;ENTRY POINT FOR SELECTIVE LOAD BY BUILD\r
 DTCSRN:\r
 EXTERNAL       TPOPJ,TPOPJ1,DTCCHL,DCOUT,DCIN,DCON,DCOFF\r
-EXTERNAL       STOIOS,STOTAC,SETACT,CLRACT,OUT,DTASAV,PIOMOD\r
-\r
+EXTERNAL       STOIOS,STOTAC,SETACT,CLRACT,OUT,DTCSAV,PIOMOD\r
 EXTERNAL       DTAVAL,DTREQ,SETIOD,THSDAT,PUNIT,GETDCDT\r
 EXTERNAL       ADVBFE,ADVBFF,ADRERR,WAIT1,CPOPJ,CPOPJ1,BADDIR\r
 EXTERNAL       COMCHK,PJOBN,RELEA9,UADCK1,DTTRY\r
@@ -23,6 +23,7 @@ NAMSTR=^D83   ;1ST NAME WORD IN DIRECTORY
 QUANT=5                ;NUMBER OF BLOCKS CAN READ BEORE GIVING UP DTC\r
 SPACE=6                ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE\r
 \r
+\r
 ;DDB MAGIC CELLS\r
 FSTBLK=13\r
 DLOC=14\r
@@ -50,9 +51,8 @@ CPBIT=-1              ;CONDITIONAL ASSEMBLY PARAMETER FOR I/O DIRECTLY
                        ;TO USER.  IF -1 THE I/O IN DUMP MODE WITH\r
                        ;BIT 29 ON IN INIT WILL DO IO DIRECTLY TO USER\r
                        ;WIUTHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES\r
-\f      EXTERN  JIFSEC\r
 \r
-       INTERN  DTCINT,DTCDDB,DTCINI,DTCDDS\r
+\f      INTERN  DTCINT,DTCDDB,DTCINI,DTCDDS\r
 \r
 DTCDDB:        SIXBIT  /DTA0/\r
        XWD     ^D60*HUNGST,200\r
@@ -60,21 +60,18 @@ DTCDDB:     SIXBIT  /DTA0/
        EXP     DTCDSP\r
        XWD     1107,154403\r
        EXP     0,0\r
-\r
        XWD     PROG,0\r
        XWD     PROG,0\r
        EXP     0,0,0\r
-\r
        EXP     DTCDIR\r
        EXP     0,0,0,0,0\r
-\r
-\r
 DTCDIR:        BLOCK   200\r
 DTCDDS=.-DTCDDB\r
 \r
+\r
        JRST    DTCINI\r
        JRST    THRUTP          ;HUNG DEVICE\r
-DTADSP JRST    UREL\r
+DTCDSP:        JRST    UREL\r
        JRST    UCLS\r
        JRST    UOUT\r
        JRST    UIN\r
@@ -90,6 +87,7 @@ DTADSP        JRST    UREL
        JRST    UTPCLR\r
        POPJ    PDP,            ;MTAPE\r
 \r
+\r
 ;INITIALIZE DTC\r
 DTCINI:        CONO    DTC,0\r
        CONO    DC,0\r
@@ -125,10 +123,10 @@ STOWD4:   IMUL    TAC1,[-177]     ;-NUMBER OF WORDS IF ALL BLOCKS FULL
        TLO     IOS,SINGL       ;JUST READ 1 RECORD\r
        MOVEI   BLK,DIRBLK      ;NO, FIND FIRST MENTION OF BLOCK\r
        PUSHJ   PDP,LSTFRE+1    ;NEAR DIRECTORY\r
-       JUMPN   BLK,LOOKE       ;FOUND IF BLK NOT =0\r
+       JUMPN   BLK,.+3         ;FOUND IF BLK NOT =0\r
 LOOKD: PUSHJ   PDP,BLKSRC      ;FIND FIRST MENTION IN DIRECTORY\r
        JRST    BDDIR           ;NOT THERE - ERROR\r
-LOOKE: PUSHJ   PDP,RDBLUK      ;GO READ IT\r
+       PUSHJ   PDP,READBF      ;GO READ IT\r
        PUSHJ   PDP,WAIT1       ;WAIT TILL IT'S IN\r
        HRLM    AC1,IBLK(DEVDAT) ;SAVE INDEX ON INPUT FILE FOR LATER\r
                        ;TEST ON ENTER - WONT ALLOW ENTER\r
@@ -160,7 +158,6 @@ RENAM1:     TLO     IOS,CHNGDR      ;DIRECTORY HAS CHANGED
 \r
 ;COME HERE TO RENAME TO A REAL NEW NAME\r
 RENAM2:        MOVE    DAT,TAC          ;SAVE LOC OF NAME IN DIRECTORY\r
-\r
        PUSHJ   PDP,DSERCH      ;SEARCH FOR NEW NAME\r
        SKIPA           ;NOT FOUND - GOOD\r
        JRST    RENER2          ;NAME ALREADY EXISTS - ERROR\r
@@ -185,11 +182,11 @@ DSER1:    PUSHJ   PDP,DIRCHK      ;ENSURE DIRECTORY IS IN CORE
        HRRZ    TAC,DLOC(DEVDAT) ;LOCAION OF DIRECTORY\r
        ADD     TAC,[XWD -26,NAMSTR] ;POINT TO START OF NAMES\r
 NMLOOK:        SKIPN   TAC1,@UUO       ;GET NAME\r
-       JRST    TPOPJ           ;NULL ARGUMENT - ERROR RETURN                   \r
+       JRST    TPOPJ           ;NULL ARGUMENT - ERROR RETURN\r
        MOVEM   TAC1,DEVFIL(DEVDAT)     ;STORE FOR RENAME AND SUPERSEDING\r
                                ; SHARED SEGMENTS\r
        CAMN    TAC1,(TAC)      ;TEST FOR MATCH\r
-       AOJA    UUOI,NMFOUN     ;FOUND NAME, CHECK EXTENSION\r
+       AOJA    UUO,NMFOUN      ;FOUND NAME, CHECK EXTENSION\r
        AOBJN   TAC,.-2         ;TRY NEXT NAME\r
        POPJ    PDP,            ;NOT FOUND\r
 NMFOUN:        HLLZ    TAC1,@UUO       ;PICK UP USER'S EXTENSION\r
@@ -263,7 +260,6 @@ DECPTR:     JUMPL   DAT,.+5
        SOJA    DAT,CPOPJ\r
        HRLI    DAT,060500\r
        SOJA    DAT,CPOPJ\r
-\r
 \f;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC\r
 DLETE: MOVEI   TAC1,0          ;SET TO DELETE BLOCKS\r
        PUSHJ   PDP,BLKSRC      ;FIND A BLOCK BELONGING TO FILE\r
@@ -277,7 +273,7 @@ DLETE:      MOVEI   TAC1,0          ;SET TO DELETE BLOCKS
 ENTR:  TRNE    IOS,UDSD        ;NON STANDARD?\r
        JRST    CPOPJ1          ;YES. RETURN\r
        PUSHJ   PDP,DSERCH      ;NO. LOOK FOR MATCH\r
-       JRST    NEWNT           ;THIS IS A NEW ENTRY\r
+       JRST    NEWENT          ;THIS IS A NEW ENTRY\r
 ENTR2: MOVE    TAC1,@UUO       ;PICK UP 2ND WORD (EXTENSSION)\r
        AOS     UUO             ;POINT TO WORD 3\r
        HRR     TAC1,@UUO       ;ADD DATE\r
@@ -298,7 +294,7 @@ ENTRA:      SUBI    UUO,2           ;NO. POINT TO NAME
        HRLM    TAC,OBLK(DEVDAT) ;SAVE INDEX IN DDB\r
 \r
        PUSHJ   PDP,DLETE       ;DELETE ALL BLOCKS BELONGING TO FILE\r
-       AOJE    AC3,FNTRD       ;FIND FIRST FREE BLOCK ON TAPE IF THIS\r
+       AOJE    AC3,ENTRD       ;FIND FIRST FREE BLOCK ON TAPE IF THIS\r
                                ;IS A SAVE FILE (UGETF DONE)\r
        MOVEI   BLK,DIRBLK      ;NO. GET 1ST BLOCK CLOSE TO\r
        TLO     IOS,RVERSE      ;DIRECTORY. GOING IN REVERSE\r
@@ -323,7 +319,7 @@ MARKDR:     PUSHJ   PDP,DRPTR       ;SET POINTER TO BLOCK IN DIR
 ;;SET POINTER TO CORRECT DIRECTORY ENTRY\r
 DRPTR: SUBI    BLK,1           ;SET FOR ILDB OR IDPB\r
        IDIVI   BLK,7           ;COMPUTE WORD, POSITION\r
-       ADD     BLK,OLOC(DEVDAT) ;GET CORRECT ADDRESS\r
+       ADD     BLK,DLOC(DEVDAT) ;GET CORRECT ADDRESS\r
        HRLI    BLK,440500      ;MAKE IT A BYTE POINTER\r
        JUMPE   DAT,CPOPJ       ;CORRECT FOR POSITION IN WORD\r
        IBP     BLK\r
@@ -332,12 +328,12 @@ DRPTR:    SUBI    BLK,1           ;SET FOR ILDB OR IDPB
 \r
 ;HERE FOR NEW FILE NAME ON ENTER\r
 NEWENT:        SUB     TAC,[XWD 26,26];START AT BEGINNING OF DIRECT.\r
-\r
        SKIPN   (TAC)           ;FIND A FREE SLOT\r
        AOJA    UUO,ENTR2       ;RETURN WITH UUO POINTING TO WRD 2\r
        AOBJN   TAC,.-2\r
        POPJ    PDP,            ;NONE AVAILABLE.\r
 \r
+\r
 ;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE\r
 SETWD4:        HLRE    TAC1,@UUO       ;GET -LENGTH\r
        MOVNS   TAC1            ;+LENGTH\r
@@ -372,6 +368,7 @@ GETF:       PUSHJ   PDP,WAIT1       ;WAIT TILL BUFFERES EMPTY
        MOVE    TAC,BLK         ;TELL USER THE BLOCK NUMBER\r
        JRST    STOTAC\r
 \r
+\r
 ;GET NEXT (OR PREVIOUS) FREE BLOCK\r
 USRFRE:        MOVEI   TEM,SPACE       ;BLOCKS "SPACE" APART\r
        LDB     BLK,PIOMOD      ;EXCEPT DUMP AND SAVMOD FILES\r
@@ -397,6 +394,7 @@ USRLST:     SUBI    BLK,(TEM)       ;LOOK FOR FREE BLOCK N BEFORE
 USLSTA:        PUSHJ   PDP,LSTFRE      ;THIS ONE\r
        JRST    CALNXT+1\r
 \r
+\r
 ;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER\r
 NOBLKS:        MOVEI   BLK,TOPBLK+1    ;SET HIGH BLOCK\r
        POPJ    PDP,\r
@@ -444,7 +442,8 @@ UREL:       SETZM   FSTBLK(DEVDAT)  ;ZERO FSTBLK
        PUSHJ   PDP,GETDT       ;WAIT TILL DTC AVAILABLE\r
        MOVEI   BLK,DIRBLK      ;BLOCK NUMBER\r
        PUSHJ   PDP,WRTBLK      ;WRITE UT\r
-       PUSHJ   PDP,WAIT1       ;WAIT TILL IT HAS BEEN WRITTEN\r
+       JRST    WAIT1           ;DONT RETURN TO USER TILL DONE\r
+\r
 \r
 ;GET DEC TAPE CONTROLLER\r
 GETDT: PUSHJ   PDP,GETDCDT     ;GET DATA CONTROL. DECTAPE CONTROL\r
@@ -455,8 +454,9 @@ GETDT:      PUSHJ   PDP,GETDCDT     ;GET DATA CONTROL. DECTAPE CONTROL
        MOVEM   DEVDAT,USEWRD   ;SAVE ACS NEEDED ON INTERRUPT LEVEL\r
        JRST    SETACT          ;LIGHT IOACT AND RETURN\r
 \r
+\r
 ;HERE TO CLOSE A DUMP MODE FILE\r
-CLSDMP:        TLO     IOS,DMPOCLS+IO+DMPMOD ;SET SWITCHES\r
+CLSDMP:        TLO     IOS,CLSDMP              ;SET SWITCHES\r
        PUSHJ   PDP,GETDT       ;GET CONTROL\r
        SETZM   BUF             ;ENSURE LINK, WORDCOUNT=0\r
        JRST    OUFULL          ;GO WRITE THE BLOCK\r
@@ -479,7 +479,6 @@ UIN:        TLZ     IOS,IO
        PUSHJ   PDP,BLKCHK      ;CHECK LEGALITY OF BLOCK NUMBER\r
        TLNN    IOS,DMPMOD      ;DUMP MODE?\r
        CAIE    BLK,DIRBLK      ;TRYING TO READ DIRECTORY?\r
-\r
        JRST    READBF          ;NO. GO READ\r
 \r
 ;READING DIRECTORY - GIVE CORE IMAGE IF IT EXISTS\r
@@ -503,6 +502,7 @@ EOF:        TLO     IOS,IOEND       ;LIGHT EOF BIT
        JRST    STOIOS\r
        JRST    DMPEOF          ;GIVE UP CONTROL IF DUMP-MODE\r
 \r
+\r
 ;ZERO USER'S CORE ON SAVE-MODE INPUT\r
 ZERCOR:        MOVEI   TAC,JOBDDT(PROG) ;ZERO CORE\r
        HRLI    TAC,1(TAC)\r
@@ -529,10 +529,9 @@ UOUT:      TLO     IOS,IO
        HRRZ    BLK,OBLK(DEVDAT)\r
        CAIN    BLK,DIRBLKK     ;CHECK IF WRITING DIRECTORY\r
        JRST    COR2HM          ;YES, WRITE CORE IMAGE\r
-       JUMPE   BLK,FAKAV       ;DONT WRITE IF NO BLOCK GIVEN\r
+       JUMPE   BLK,FAKADV      ;DONT WRITE IF NO BLOCK GIVEN\r
        PUSHJ   PDP,BLKCHK      ;CHECK FOR LEGAL BLOCK\r
 UOUT2: TLNN    IOS,DMPMOD      ;ALREADY HAVE CONTROL IF DUMP-MODE\r
-\r
        PUSHJ   PDP,GETDT       ;GET DEC TAPE CONTROLLER\r
 FILBUF:\r
 DTOCHK:        TLNE    IOS,DMPMOD      ;DUMP MODE?\r
@@ -540,6 +539,8 @@ DTOCHK:     TLNE    IOS,DMPMOD      ;DUMP MODE?
        MOVSI   TAC,@DEVOAD(DEVDAT) ;LOCATION OF BUFFER\r
        ADD     TAC,[XWD 1,BUF];SET TO STORE IN MONITOR BUFFER\r
        BLT     TAC,BUF+177     ;GO BLT IT\r
+       SKIPN   BUF             ;GIVE UP TAPE IF\r
+       JRST    THRUTP          ;NO BUFFER TO OUTPUT\r
        TLZ     IOS,NOLINK\r
 \fOUFULL:       TRNE    IOS,UDSD        ;NON-STANDARD?\r
        JRST    OUTBL2          ;YES, NO FILE-STRUCTURED OPERATIONS\r
@@ -561,6 +562,7 @@ OUTBLK:     HRLM    BLK,BUF          ;SAVE LINK IN 1ST WORD OF BLOCK
 OUTBL2:        HRRZ    BLK,OBLK(DEVDAT)\r
        PUSHJ   PDP,STOIOS\r
 \r
+\r
 WRTBLK:        PUSHJ   PDP,FNDBLK      ;GO SEARCH FOR BLOCK\r
        MOVE    TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE\r
        JRST    RDWRT\r
@@ -577,8 +579,7 @@ COR2HM:     MOVEI   TAC,@DEVOAD(DEVDAT)  ;WHERE IT IS
        TLO     IOS,CHNGDR      ;REMEMBER TO WRITE IT OUT\r
        MOVSI   TAC1,DVDIRI\r
        ORM     TAC1,DEVMOD(DEVDAT) ;DIR. IS NOW IN CORE\r
-FAKADV:        TLZE    IOS,DMPMOD      ;DUMP MODE?\r
-       JRST    THRUTD          ;YES. GIVE UP CONTROL\r
+FAKADV:        TLZN    IOS,DMPMOD      ;DUMP MODE?\r
        PUSHJ   PDP,ADVBFE      ;ADVANCE BUFFERS\r
        JFCL\r
        TLZ     IOS,NOLINK      ;DIRECTORY BLOCK IS NOT LINKED\r
@@ -594,7 +595,7 @@ DMPSET:     TLO     IOS,DMPMOD      ;LIGHT BIT
        JRST    DMPTS1          ;YES. RETURN\r
        IFN CPBIT, <\r
        TRNE    IOS,UDSD        ;NO. NON-STD MODE?\r
-       SOJA    DAT,TDUSER      ;YES. GO ELSEWHERE\r
+       SOJA    DAT,TOUSER      ;YES. GO ELSEWHERE\r
 >\r
 DMPST2:        SOS     UUO             ;NO. SAVE START OF LIST (-1)\r
        MOVEM   UUO,DMPLST(DEVDAT)\r
@@ -603,9 +604,10 @@ DMPST2:    SOS     UUO             ;NO. SAVE START OF LIST (-1)
 DMPTS1:        POP     PDP,TAC\r
        JRST    THRUTD\r
 \r
+\r
        IFN CPBIT, <\r
 ;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY\r
-TOUSRF:        JUMPE   AC2,NOBLK0      ;CANT READ BLK 0 IN NON-STD DUMP  MODE\r
+TOUSER:        JUMPE   AC2,NOBLK0      ;CANT READ BLK 0 IN NON-STD DUMP  MODE\r
        ASH     DAT,-7          ;NUMBER OF WRDS IN LIST /200\r
        AOS     DAT\r
        MOVEM   DAT,BLKCNT      ;SAVE TO UPDATE POSITION\r
@@ -618,6 +620,7 @@ TOUSRF:     JUMPE   AC2,NOBLK0      ;CANT READ BLK 0 IN NON-STD DUMP  MODE
        MOVEM   TAC,DCLOC1      ;IOWD IS EXHAUSTED\r
        HRRZM   PROG,ADRPRG     ;SAVE JUST ADDRESS OF PROG\r
        TLO     IOS,NOBUF       ;INDICATE DIRECTLY TO USER\r
+       XCT     @1(PDP)         ;TURN ON/OFF IO\r
        TLNN    IOS,IO\r
        JRST    CPOPJ1          ;READING - CONTINUE\r
        POP     PDP,TAC         ;WRITING - THIS WILL SAVE LOTS OF TIME\r
@@ -631,7 +634,7 @@ DMPFIL:     MOVSI   TAC1,-177
 >\r
 DMPFLB:        PUSHJ   PDP,NXTCOM      ;GET NEXT COMMAND\r
        JRST    DMPOTH          ;END OF LIST\r
-DMPLFA:        MOVE    TEM,(TAC)       ;GET NEXT WORD\r
+DMPFLA:        MOVE    TEM,(TAC)       ;GET NEXT WORD\r
        MOVEM   TEM,BUF+1(TAC1) ;INTO BUFFER\r
        AOBJP   TAC1,DMPOVR     ;BUFFER FULL IF GOES\r
        AOBJN   TAC,.-3         ;GET NEXT WORD FROM COMMAND\r
@@ -670,14 +673,16 @@ NXTCOM:   SKIPN   DMPLST(DEVDAT)  ;END OF COMMANDS?
 NXTCM1:        HRRM    TAC,DMPLST(DEVDAT) ;STORE GO-TO ADDRESS\r
        MOVE    TAC,@TAC        ;GET COMMAND\r
        JUMPE   TAC,NXTCM2      ;END OF LIST\r
-       JUMPG   TAX,NXTCM1      ;GO-TO WORD\r
+       JUMPG   TAC,NXTCM1      ;GO-TO WORD\r
        ADDI    TAC,(PROG)      ;REAL COMMAND - ADD RELOCATION\r
        AOJA    TAC,CPOPJ1      ;AND RETURN\r
+\r
 ;END OF DUMP-MODE LIST\r
 NXTCM2:        SETZM   SVDWRD(DEVDAT)  ;ZERO POINTERS\r
        SETZM   DMPLST(DEVDAT)\r
        POPJ    PDP,\r
 \r
+\r
 DMPFLC:        SKIPE   TAC,SVDWRD(DEVDAT)      ;IS THERE ANOTHER COMMAND\r
        JRST    DMPFLA          ;YES. GET IT\r
        JRST    DMPTH2          ;NO. THROUGH\r
@@ -715,7 +720,8 @@ IOGO:       IFN CPBIT, <
        CONO    PI,PION\r
        POPJ    PDP,            ;DISMISS INTERRUPT\r
 \r
-;HERE FOR AY DATA WORD WITH TAPE IN REVERSE\r
+\r
+;HERE FOR ANY DATA WORD WITH TAPE IN REVERSE\r
 RVERS: 0\r
 IOWD:  BLKI    DTC,PNTR        ;READ (WRITE) A WORD\r
        JRST    RVTHRU          ;POINTER RAN OUT\r
@@ -731,6 +737,7 @@ DTATHR:     0
        JSR     SHUTDN          ;SHUT DOWN DATA CONTROL\r
        JEN     @DTATHR         ;DISMISS\r
 \r
+\r
 SHUTDN:        0\r
        CONSZ   DC,10000        ;DATA MISSED?\r
        SETOM   ERRFLG          ;YES. SET SWITCH\r
@@ -757,7 +764,6 @@ FNDBL2:     SETZM   ERRFLG          ;RESET DATA MISSED FLAG
        MOVEM   TEM,DCLOC1      ;FOR FORWARD DATA OPERATIONS\r
        CONSZ   DTC,20000       ;IS TAPE ALREADY MOVING/\r
        JRST    FNDBL4          ;YES\r
-\r
        TRO     TAC,323200      ;NO, SET READ BLK NOS., START DELAY\r
        TLNN    IOS,RVERSE      ;MOVE TAPE BACKWARDS?\r
        TRO     TAC,10000       ;YES\r
@@ -770,6 +776,7 @@ FNDBL3:     IFN     CPBIT, <
        MOVEM   IOS,DEVIOS(DEVDAT)      ;RESTORE IOS IN CORE\r
        POPJ    PDP,            ;AND EXIT\r
 \r
+\r
 ;HERE TO INITIATE READ OF A TAPE THAT IS MOVING ALREADY\r
 FNDBL4:        CONSZ   DTC,10000       ;GOING BACKWARDS?\r
        TRO     TAC,10000       ;YES\r
@@ -826,7 +833,7 @@ FND1:       MOVEM   TAC,DCLOC
        CONO    DTC,360000(TAC) ;START DATA FLOW\r
        JRST    SRCHXT          ;AND LEAVE\r
 \r
-IORVS: MOVEI   TAC,10000       ;SET IO FOR REVERSE\r
+IORVRS:        MOVEI   TAC,10000       ;SET IO FOR REVERSE\r
        ORM     TAC,COMAND\r
        MOVEI   TAC,177\r
        ADDM    TAC,PNTR        ;READ FROM TOP OF BUFFER DOWN\r
@@ -847,7 +854,7 @@ DTCIN1:     CONO    DC,0            ;NO. TURN OFF DATA CONTROL
        CONSZ   DTS,1           ;JOB DONE LIT?\r
        CONSZ   DTS,116         ;AND NO ERORS?\r
        JRST    ERRS            ;NO. ERROR\r
-       SKIPF   ERRFLG          ;DATA MISSED?\r
+       SKIPE   ERRFLG          ;DATA MISSED?\r
        JRST    ERRS            ;YES. TOO BAD\r
 \r
 ;DATA WAS READ IN OR WRITTEN OUT FINE\r
@@ -860,13 +867,13 @@ DTCIN2:   TLNE    IOS,DMPMOD      ;DUMP MODE?
        MOVEM   TAC,IBLK(DEVDAT)  ;STORE IN DDB\r
        TLZE    IOS,IOW         ;NO. IN IO WAIT?\r
        PUSHJ   PDP,SETIOD      ;YES. TAKE OUT OF WAIT\r
-       TLZE    IOS,SINGL+RWDIR+DMPCLS ;DIRECTORY OPERATION OR\r
-                                       ;CLOSING DUMP FILE?\r
+       TLZE    IOS,SINGL+RWDIR ;DIRECTORY OPERATION?\r
        JRST    THRUTP          ;YES. LEAVE\r
        TLNE    IOS,IO          ;WRITING?\r
        JRST    OUTHRU          ;YES\r
 \fEXTERN        JBTSTS,PJOBN\r
 \r
+\r
 ;HERE ON END OF AN INPUT BLOCK\r
        HRROI   TAC1,177        ;MASK OUT 1ST-BLK DATA\r
        TRNN    IOS,UDSD        ;UNLESS IN NON-STD\r
@@ -881,9 +888,8 @@ DTCIN2:     TLNE    IOS,DMPMOD      ;DUMP MODE?
        HRRM    BLK,IBLK(DEVDAT) ;SAVE IN DDB\r
        TRNE    IOS,IODTER+IODERR+IOIMPM ;WAS THERE AN INPUT ERROR?\r
        JRST    THRUIN          ;YES. DONT ADVANCE BUFFERS\r
-       PUSHJ   PDP,ADVBUFF     ;GET NEXT BUFFER\r
+       PUSHJ   PDP,ADVBFF      ;GET NEXT BUFFER\r
        JRST    THRUIN          ;EMPTY BUF NOT AVAILABLE\r
-\r
        SKIPE   BLK             ;EXIT  IF EOF OR BLOCK TOO LARGE\r
        CAILE   BLK,TOPBLK      ;THE ERROR WILL BE CAUGHT ON THE\r
        JRST    THRUIN          ;UUO LEVEL NEXT TIME AROUND\r
@@ -891,6 +897,7 @@ DTCIN2:     TLNE    IOS,DMPMOD      ;DUMP MODE?
        SKIPG   DTREQ           ;YES. ANYONE ELSE WANT IT?\r
        JRST    READBC          ;NO. READ NEXT BLOCK\r
 \r
+\r
 THRUIN:        HRRZ    TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN?\r
        JUMPN   TAC,THRUTP      ;YES. DONT CHANGE REVERSE BIT\r
        TLZ     IOS,RVERSE      ;NO. SET IOS BIT TO CORRECT DIRECTION\r
@@ -913,11 +920,10 @@ THRUTD:   PUSHJ   PDP,THRUTA      ;GIVE UP DATA CONTROL
        SOSL    DTREQ           ;GIVE UP DECTAPE CONTROL\r
        SETOM   DTAVAL  \r
        CONO    DC,0            ;SHUT OFF DATA CONTROL\r
-       CONO    PI,DOFF         ;AN TURN OF ITS PI CHANNEL\r
+       CONO    PI,DCOFF                ;AN TURN OF ITS PI CHANNEL\r
        CONO    DTC,0           ;SHUT DOWN DATA CONTROL\r
        HLLZS   DTCINT\r
        POPJ    PDP,            ;AND LEAVE\r
-\r
 \f      EXTERN  CLOCK\r
 \r
 ;HERE ON END OF OUTPUT BLOCK\r
@@ -932,6 +938,16 @@ OUTHRU:    PUSHJ   PDP,ADVBFE      ;GET NEXT BUFFER
        JRST    FILBUF          ;NO. GO WRITE NEXT BLOCK\r
        JRST    THRUTP          ;YES. GIVE UP TAPE\r
 \r
+\r
+;TURN TAPE AROUND AFTER END-ZONE INTERUPT\r
+TURN:  MOVEM   TAC,TEMPA               ;SAVE TAC\r
+       MOVE    TAC,UNIT        ;UNIT AND CHANNEL\r
+       CONSO   DTC,10000               ;IN REVERSE?\r
+       TRO     TAC,10000               ;NO. NO WILL BE\r
+       CONO    DTC,322200(TAC);READ BLOCK NOS IN OPPOSITE DIRECTION\r
+       MOVE    TAC,TEMPA       ;RESTORE TAC\r
+       JEN     @DTCCHL         ;AND EXIT THE INTERRUPT\r
+\r
 TIMINT:        CONSO   DTS,20          ;TIME FLAG INTERRUPT ON?\r
        JRST    SPRIUS          ;NO. THIS IS A SPURIOUS INTERRUPT\r
        EXCH    TAC,TIMREQ      ;ANOTHER TAPE CAN NOT BE\r
@@ -943,6 +959,7 @@ TIMINT:     CONSO   DTS,20          ;TIME FLAG INTERRUPT ON?
        HLLZS   DTCINT\r
        JEN     @DTCCHL         ;AND LEAVE\r
 \r
+\r
 ;HERE WITH AN INTERRUPT WHILE SEARCHING FOR BLOCK NUMBERS\r
 BLKNUM:        CONSZ   DTS,2           ;END ZONE INTERRUPT?\r
        JRST    TURN            ;YES. TURN AROUND\r
@@ -957,7 +974,7 @@ SPRIUS:     CONI    DTC,TEMPA       ;READ DTC STATUS BITS
 \r
 TIMREQ:        XWD     .+1,3   ;E CLOCK TICKS\r
        SOSL    DTREQ   ;ALLOW OTHER JOBS\r
-       SETOM   DTAVAL  ;TO GET DT CONTROL NOW\r
+\f      SETOM   DTAVAL  ;TO GET DT CONTROL NOW\r
        POPJ    PDP,\r
 \f;COME HERE ON END OF DUMP MODE BLOCK\r
 SVDMTH:        IFN CPBIT, <\r
@@ -970,9 +987,9 @@ SVDMTH:     IFN CPBIT, <
        SUB     TAC1,ONEONE     ;SET UP TAC1 WITH COUNT\r
 >\r
        TLNN    IOS,IO\r
-       JRST    SVOMIN          ;INPUT FILE\r
+       JRST    SVDMIN          ;INPUT FILE\r
        HRRZ    BLK,OBLK(DEVDAT) ;OUTPUT FILE, NEXT BLOCK\r
-       JUMPF   BLK,DMPTHA      ;LAST BLOCK\r
+       JUMPE   BLK,DMPTHA      ;LAST BLOCK\r
        IFE     CPBIT, <\r
        TRNE    IOS,UDSD        ;IF NON-STD MODE\r
        AOSA    OBLK(DEVDAT)    ;WRITE CONSECUTIVE BLOCKS\r
@@ -997,6 +1014,7 @@ SVDMIN:    HLRZ    BLK,BUF         ;NEXT BLOCK NUMBER
        HRRM    BLK,IBLK(DEVDAT) ;SAVE IN DDB\r
        JRST    CPOPJ1\r
 \r
+\r
        IFN CPBIT, <\r
 ;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER\r
 USDMTH:        MOVEI   TAC1,IBLK(DEVDAT)\r
@@ -1028,7 +1046,8 @@ DMIFLB:   MOVE    TEM,BUF+1(TAC1) ;NEXT DATA WORD
        JUMPE   BLK,DMPEOF      ;IF EOF - LIGHT BIT\r
 RDNXT: CAIG    BLK,TOPBLK      ;BLOCK LEGAL?\r
        JRST    READBC          ;GO READ BLOCK NUMBER\r
-       TROA    IOS,IOBLKT      ;LIGHT ERROR BIT\r
+       TROA    IOS,IOBKTL      ;LIGHT ERROR BIT\r
+\r
 \r
 ;EOF BEFORE ALL DATA IS IN - DUMP MODE\r
 DMPEOF:        TRO     IOS,IODEND      ;LIGHT EOF BIT\r
@@ -1052,7 +1071,6 @@ ERRS1:    CONSO   DTS,4           ;IF ILLEGAL OP - DONT RETRY
        JRST    FNDBL2          ;NO. TRY AGAIN\r
 \r
 ;PERMANENT ERROR\r
-\r
 PERMER:        CONSZ   DTS,10  \r
        TRO     IOS,IODTER      ;PARITY\r
        CONSO   DTS,100\r
@@ -1070,11 +1088,10 @@ NOBLK0: TRO     IOS,IOIMPM      ;ILLEGAL OP
        JRST    THRUTP          ;NO. RETURN TO USER\r
        PUSHJ   PDP,THRUTP      ;YES. STOP TAPE\r
        MOVSI   TAC,DVDIRIN     ;CLEAR DIRECTORY IN CORE BIT\r
-       ANDCAM  TAC,DEVMOND(DEVDAT)\r
+       ANDCAM  TAC,DEVMOD(DEVDAT)\r
 BDDIR: LDB     ITEM,PJOBN      ;NUMBER OF OFFENDING JOB\r
-       JRST    RADDIR          ;GO PRINT ERROR MESSAGE\r
-\f      INTERN  DTABUF\r
-BFPNTR:        IOWD    200,BUF+1\r
+       JRST    BADDIR          ;GO PRINT ERROR MESSAGE\r
+\fBFPNTR:       IOWD    200,BUF+1\r
 ONEONE:        XWD     1,1\r
 USEWRD:        0\r
 USEPRG:        0\r
@@ -1093,7 +1110,7 @@ BLKCNT:   0
 SVPNTR:        0\r
 USPNTR:        0\r
 ADRPRG:        0\r
-DIRCNT:        0\r
+DIRCTN:        0\r
 >\r
 BUF:   BLOCK   200\r
 DTAEND:        END\r