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
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
CPBIT=-1 ;CONDITIONAL ASSEMBLY PARAMETER FOR I/O DIRECTLY\r
;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
+ ;WITHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES\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
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
JRST UTPCLR\r
POPJ PDP, ;MTAPE\r
\r
+\r
;INITIALIZE DTC\r
DTCINI: CONO DTC,0\r
CONO DC,0\r
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
\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
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
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
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
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
- POPJ PDP,USLSTA\r
+ PUSHJ PDP,USLSTA\r
CAILE BLK,TOPBLK ;BLOCK LEGAL?\r
POPJ PDP, ;NO. ERROR RETURN\r
ENTRC: MOVEM BLK,FSTBLK(DEVDAT) ;SAVE AS 1ST BLOCK\r
;;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
\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
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
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
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
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
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
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
JRST UOUT2 ;YES\r
PUSHJ PDP,DIRCHK ;NO. MAKE SURE DIRECTORY IS IN CORE\r
HRRZ BLK,OBLK(DEVDAT)\r
- CAIN BLK,DIRBLKK ;CHECK IF WRITING DIRECTORY\r
+ CAIN BLK,DIRBLK ;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
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
HLRE BLK,BUF ;IS IT?\r
JUMPL BLK,LSTBLK ;YES, - LAST BLOCK OF FILE\r
JUMPN BLK,OUTBLK ;IF NON-0 - YES\r
- TLNE IOS,DMPCLS ;NO. LAST BLOCK OF A DUMPO FILE?\r
+ TLZE IOS,DMPCLS ;NO. LAST BLOCK OF A DUMPO FILE?\r
JRST OUTBLK ;YES. LINK MUST STAY 0\r
OUCOMP: PUSHJ PDP,USRFRE ;COMPUTE NEXT BLOCK\r
TLO IOS,NOLINK ;THIS BLOCK NOT LINKED\r
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
+ MOVE TAC1,[BLKO DC,700] ;HERE WE ARE - GO WRITE\r
JRST RDWRT\r
\f;WRITE LAST BLOCK\r
LSTBLK: MOVEI BLK,0 ;LINK=0\r
MOVEI TAC1,177(TAC)\r
BLT TAC,(TAC1)\r
TLO IOS,CHNGDR ;REMEMBER TO WRITE IT OUT\r
- MOVSI TAC1,DVDIRI\r
+ MOVSI TAC1,400000\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\r
PUSHJ PDP,ADVBFE ;ADVANCE BUFFERS\r
JFCL\r
TLZ IOS,NOLINK ;DIRECTORY BLOCK IS NOT LINKED\r
HRLI UUO,PROG\r
PUSHJ PDP,COMCHK ;CHECK VALIDITY OF LIST\r
JRST SVADER ;NG. GIVE ADRESS ERROR\r
- SKIPL TAC,@UUO ;OK. NULL LIST?\r
+ SKIPN TAC,@UUO ;OK. NULL LIST?\r
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
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
MOVEM UUO,SVPNTR\r
ADDI TAC,(PROG) ;RELOCATE ADDRESS OF 1ST IOWD\r
MOVEM TAC,PNTR ;AND SAVE IT\r
- MOVE TAC,[JSP DMPADV] ;SET UP LOC FOR WHEN\r
+ MOVE TAC,[JSR DMPADV] ;SET UP LOC FOR WHEN\r
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
>\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
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
PUSHJ PDP,GETDT ;GET DT CONTROL\r
\r
READBC: PUSHJ PDP,FNDBLK ;SEARCH FOR RIGHT BLOCK\r
- MOVE TAC1,[BLKI DTC,300] ;FOUND IT - START READING\r
+ MOVE TAC1,[BLKI DC,300] ;FOUND IT - START READING\r
\r
;HERE WITH BLK=BLOCK NUMBER, TAC1=FUNCTION, START SEARCH\r
RDWRT: PUSH PDP,TAC\r
OR TAC1,UNIT ;UNIT AND PI CHAN\r
MOVEM TAC1,COMAND ;SAVE COMMAND FOR READ OR WRITE\r
POP PDP,TAC ;RESTORE SEARCH COMMAND\r
- CONO DC,DCIN ;SET DATA CONTROL TO REAF\r
+ CONO DC,DCIN ;SET DATA CONTROL TO READ\r
CONO PI,DCON ;TURN ON DC PI CHANNEL\r
- HLRI TAC,37\r
+ HRLI TAC,37\r
CONO PI,PIOFF\r
CONO DTC,(TAC) ;START TAPE MOVING\r
HLRM TAC,DTCINT\r
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
+IOWD: BLKI DC,PNTR ;READ (WRITE) A WORD\r
JRST RVTHRU ;POINTER RAN OUT\r
SOS PNTR ;POINTER HAS TO BACK UP\r
SOS PNTR\r
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
CONSO DTC,400 ;READING?\r
- CONO DC,0 ;YES. TERN OFF DC\r
+ CONO DC,0 ;YES. TURN OFF DC\r
CONO PI,DCOFF ;TURN OFF DC PI\r
JRST @SHUTDN\r
\f;COME HERE TO START READING BLOCK NUMBERS\r
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
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
\f;INTERRUPT HERE TO READ A BLOCK NUMBER\r
SRCH: 0 \r
MOVEM TAC,TEMP ;SAVE TAC\r
- DATAI DTC,TAC ;NO. READ A BLOCK NUMBER\r
+ DATAI DC,TAC ;NO. READ A BLOCK NUMBER\r
SUB TAC,BLOCK ;;PRESENT BLOCK - TARGET BLOCK\r
IFN CPBIT, <\r
SKIPE DIRCTN ;IF DIRECT IO\r
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
\f;INTERRUPT HERE FOR FLAG CHANNEL\r
DTCINT: CONSO DTS,37 ;INTERRUPT FOR DECTAPE?\r
JRST . ;NO, GO AWAY\r
- CONSZ DTS,40000 ;YES. JOB DONE ENABLED?\r
+ CONSO DTC,40000 ;YES. JOB DONE ENABLED?\r
JRST BLKNUM ;NO. READING BLOCK NUMBERS\r
CONSZ DTC,4000 ;YES. TIME FLAG ENABLED?\r
JRST TIMINT ;YES. CHECK IF THIS IS A TIME INTERRUPT\r
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
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
MOVEI TAC1,177(TAC)\r
BLT TAC,(TAC1) ;TRANSFER IT\r
HLRZ BLK,BUF ;NEXT BLOCK TO READ\r
- TRNE IOS,UDSD ;IF NON-STD\r
- AOSA BLK,IBLK(DEVDAT);READ SEQUENTIAL BLOCKS\r
+ TRNE IOS,UDSD\r
+ AOSA BLK,IBLK(DEVDAT) ;READ SEQUENTIAL BLOCKS\r
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
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
- CONSZ DTC,100000\r
+ CONSZ DTC,10000\r
TLO IOS,RVERSE\r
\f;HERE WHEN TAPE IS DONE\r
-THRUTP: CONSO DTC,200000 ;ON INTERRUPT LEVEL?\r
+THRUTP: CONSO DTC,20000 ;ON INTERRUPT LEVEL?\r
JRST THRUTD ;NO. TAPE IS NOT MOVING\r
MOVE TAC,UNIT ;SET TO STOP TAPE\r
CONSZ DTC,10000 ;GOING REVERSE?\r
TRO TAC,10000 ;YES\r
CONO DTC,245000(TAC) ;STOP TAPE, WITH TIME FLAG INTERRUPT ON\r
;ENABLE JOB DONE AS A FLAG FOR DTCINT\r
-THRUTA: SOSL DTREQ ;GIVE UP DATA CONTROL (DECTAPE CONTROL\r
- SETOM DTAVAL ;WILL BE GIVEN UP AT NEXT INTERRUPT\r
+THRUTA: SOSL DCREQ ;GIVE UP DATA CONTROL (DECTAPE CONTROL\r
+ SETOM DCAVAL ;WILL BE GIVEN UP AT NEXT INTERRUPT\r
TLZ IOS,DMPMOD+NOBUF ;RESET DUMP-MODE BIT\r
JRST CLRACT ;RESET IOACT AND RETURN\r
\r
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
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
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
\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
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
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
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
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
TLZN IOS,RWDIR+SINGL ;DIRECTORY OPERATION?\r
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
-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
+ MOVSI TAC,400000 ;CLEAR DIRECTORY IN CORE BIT\r
+ ANDCAM TAC,DEVMOD(DEVDAT)\r
+BDDIR: LDB BLK,PJOBN ;NUMBER OF OFFENDING JOB\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
ERRFLG: 0\r
IFN CPBIT, <\r
BLKCNT: 0\r
-SVPNTR: 0\r
USPNTR: 0\r
+SVPNTR: 0\r
ADRPRG: 0\r
-DIRCNT: 0\r
+DIRCTN: 0\r
>\r
BUF: BLOCK 200\r
DTAEND: END\r