SUBTTL DTA551 A.WACHS/TW/RCC 01 JUN 69 V012\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,DTCSAV,PIOMOD\r
-\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
;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
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
DTCDSP: JRST UREL\r
JRST UTPCLR\r
POPJ PDP, ;MTAPE\r
\r
+\r
;INITIALIZE DTC\r
DTCINI: CONO DTC,0\r
CONO DC,0\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
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
\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,CLSDMP ;SET SWITCHES\r
PUSHJ PDP,GETDT ;GET CONTROL\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
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
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
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
DMPTS1: POP PDP,TAC\r
JRST THRUTD\r
\r
+\r
IFN CPBIT, <\r
;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY\r
TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE\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
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
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
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
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
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
JRST THRUIN ;YES. DONT ADVANCE BUFFERS\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
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
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
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
JRST READBC ;GO READ BLOCK NUMBER\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 DMPTH2 ;GIVE UP TAPE\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
BUF: BLOCK 200\r
DTAEND: END\r
\f\r
-\0\0\0\0
\ No newline at end of file