X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..HEAD:/src/dskser.mac diff --git a/src/dskser.mac b/src/dskser.mac index 6b6d9d2..0279d9a 100644 --- a/src/dskser.mac +++ b/src/dskser.mac @@ -54,12 +54,11 @@ SATXWD: XWD -NUMSAT,67 ;BLOCKS GO AT THESE ABSOLUTE ADDRESSES ; UNLESS USER SPECIFIES OTHERWISE DURING "ONCE". > IFE FTRC10, < -MDFBLK: 13000 ;THIS BLOCK CONTAINS RETRIEVAL INFO, OF MFD +MFDBLK: 13000 ;THIS BLOCK CONTAINS RETRIEVAL INFO, OF MFD SATXWD: XWD -NUMSAT,13001 ;LH=NUMBER OF SAT BLOCKS. ;RH=FIRST SAT BLOCK NUMBER. >> - -CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM + CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM W8BIT=400000 ;WAIT INDICATION FOR DDB ; BITS IN LH OF IOS @@ -89,8 +88,10 @@ VRGPTR=100000 ;FLAG TO SIGNAL THAT POINTERS HAVE NEVER BEEN WRITTEN RENBIT=20000 ;"RENAMING" INDICATION FOR SETLE ROUTINE WPRO=40000 ;LOOKUP DONE, FILE IS IN WRITE PROTTECT CKSUPR=10000 ;FLAG SET IF READING DUMP FILES IN NON-DUMP MODE - -;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES + + + + ;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES ATPP=0 ;PROJECT,PROGRAMMER NUMBERS ATNAME=1 ;OWNER NAME @@ -122,19 +123,18 @@ XP NUMSAT,16 ;NUMBER OF SAT BLOCKS FOR 5.76 MILLION >> XP WLBIT,400000 ;IF BIT IS ON IN FIRST SATENT ENTRY ;WORD, THE DISK IS WRITE-LOCKED. - -EXTERNAL DSKOFF + EXTERNAL DSKOFF DEFINE NOSCHEDULE < CONO PI,DSKOFF > + EXTERNAL DSKON DEFINE SCHEDULE < CONO PI,DSKON > - -INTERNAL FTCHECK,FTMONP + INTERNAL FTCHECK,FTMONP IFN FTCHECK+FTMONP,< EXTERNAL DDBPTR,DSKCOR,PTRN,MOPTR,MIPTR,RUNUSR,SAVPRG,USRCNT EXTERNAL SATPTR,SAT,SATBK2,DIRSIZ @@ -153,13 +153,12 @@ DDBPTR: Z ;LOCATION OF NEXT DDB TO LOOK AT INTERNAL SATPTR,SAT,SATBK2,REFLAG,DFBUSY,CKSMCT MOPTR: BLOCK 1 ;POINTER TO NEXT TASK TO DO MIPTR: BLOCK 1 ;POINTER TO NEXT FREE QUEUE ENTRY - RUNUSR: BLOCK 1 ;LH=DEVDAT OF USER JOB RUNNING ;RH= UNUSED USRCNT: BLOCK 1 ;COUNT OF WAITING USER JOBS DFBUSY: 0 ;-1 IF DISK CONTROL IN USE, 0 IF FREE FAT: 0 ;POINTER TO FIRST ACCESS TABLE ENTRY -DKSMOT: 0 ;COUNT OF VARIOUS CHECKSUM ERRORS +CKSMCT: 0 ;COUNT OF VARIOUS CHECKSUM ERRORS REFLAG: 0 ;CONTAINS A PPN TO ALLOW LOGIN AFTER REFRESH UXFERS: 0 ;TOTAL USER TRANSFER ATTEMPTED ECOUNT: 0 ;TOTAL HARDWARE ERRORS ON USER TRANSFERS @@ -174,7 +173,7 @@ SATTMP: BLOCK 1 ; ROUTINE TO AVOID PUSH-DOWN LIST OVERFLOW. IFN FTRA10, < EXTERNAL MFDBLK,SATXWD,NUMBLK,SATENT,SENTSZ,SATTOP > -IFE FTRA10,< +IFE FTRA10, < INTERNAL SATENT IFN FTRC10, < @@ -186,7 +185,7 @@ IFE FTRC10, < ;ONE SAT BLOCK ON THE DATA PRODUCTS 270 DISK. > XP SENTSZ,3 ;SIZE OF EACH SATENT ENTRY -IFN FTREC10, < +IFN FTRC10, < DSKXDB=0 ;ON PDP-10 DISK FILE STORAGE BEGINS IN LOGICAL ; BLOCK NO. 0, > @@ -195,31 +194,30 @@ DSKXDB=5400 ;FILE STORAGE BEGINS ON SECOND DISK OF OLD (MOD 270) ; DISK FILE SINCE FIRST DISK IS ALLOCATED ; TO SWAPPING. > - -SATENT: REPEAT NUMSAT,< + SATENT: REPEAT NUMSAT,< XWD DSKXDB,0 ;RH CONTAINS WLBIT AND COUNT OF BLOCK USED BLOCK 1 ;BIT MASK, SINGLE ROTATING BIT BLOCK 1 ;XWD LENGTH OF SAT TABLE POINTER WORD ; IN SAT BLOCK DSKXDB=DSKXDB+NUMBLK> - XP SATTOP,SATENT*SENTSZ*NUMSAT-SENTSZ + XP SATTOP,SATENT+SENTSZ*NUMSAT-SENTSZ + >;END OF FTRA100 CONDITIONAL + SAT: BLOCK 200 ;CURRENT SAT BLOCK - XP SAATM2,SAT-2 ;LOWEST ABS, ADR-1 ALLOWED IN CHANNEL COMMAND + XP SATM2,SAT-2 ;LOWEST ABS, ADR-1 ALLOWED IN CHANNEL COMMAND ; LIST - USED TO KEEP FROM WIPING OUT MONITOR. SATBK2: XWD -200,SAT - - XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE + XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE ;NOT POINTERS. ;THE DUMMY DEVICE DATA BLOCK DSKCOR=10 DSKSIZ=4*DSKCOR ;NUMBER OF WORDS ALLOCATED FOR DDB ;MUST BE A MULTIPLE OF FOR (SEE GETCOR) - INTERN DSKDDB DSKDDB: SIXBIT /DSK/ XWD ^D5*HUNGST,201 @@ -241,7 +239,7 @@ DSKDDB: SIXBIT /DSK/ Z ;C(LH)=ADDRESS OF ACCESS TABLE ENTRY ;C(RH)=ADDRESS OF CURRENT POINTER IN DDB XP DEVCNT,.-DSKDDB ;C(LH)USED DURING LOOKUP,ENTER - Z ;C(LH)==RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES) + Z ;C(LH)=RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES) ;C(RH)=COUNT OF BLOCKS IN FILE XP DEVBLK,.-DSKDDB ;C(LH)=BLOCK NUMBER OF CURRENT POINTER Z ;C(LH)=LOGICAL BLOCK# OF RIB @@ -264,9 +262,7 @@ DSKDDB: SIXBIT /DSK/ XP FPNTR,PTR1+DIRSIZ ;LOC. OF FIRST POINTER TO RET. INFO. XP FPNTR1,FPNTR-1 XP PTRN,DSKSIZ-1 - -;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB - + ;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB INTERNAL LOCORE,CRINIT EXTERNAL DDBTAB @@ -277,18 +273,19 @@ CORIWD: XWD 0,0 ;AOBJN POINTER TO FIRST WORD IN DDBTAB CONTAINING A 0 CRINIT: XWD 0,DDBTAB ;INITIAL AOBJN POINTER FOR CORIWD ; LH SET BY LINKDB MONBUF: BLOCK 200 ;MONITOR BUFFER, USED TO READ RETRIEVAL POINTERS, ETC. - -;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER +> + ;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER NOTINU=0 ;NO SUCH FILE NOTINM=1 ;NO SUCH USER -PHOTF=2 ;PROTECTION FAILURE +PROTF=2 ;PROTECTION FAILURE NORITE=3 ;MORE THAN 1 WRITE TO A FILE RENFAL=4 ;TRIED TO RENAME FILE TO EXISTING NAME OR ENTER ; A NULL FILE NAMES NOFILE=5 ;TRIED TO RENAME WITH NO FILE SELECTED ERRBIT=1 ;BITS GO IN WORD 1 OF THE ENTRY + ;DISK DISPATCH TABLE INTERNAL DSKDSP @@ -329,11 +326,11 @@ ACCIN2: MOVEI TAC,DSKDDB MOVEM TAC,CORBIT ;INITIALIZE FLOATING 1 BIT MOVE TAC,CRINIT MOVEM TAC,CORIWD ;RESET AOBJN WORD - POPJ PDP, -;DSKINI - CALLED AT START, RESTART, 143 RESTART -; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE + +;DSKINI - CALLED AT 140 START, RESTART, 143 RESTART +; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE. INTERNAL DSKINI, SETSAT EXTERNAL DISKUP,DFWUNS @@ -379,8 +376,7 @@ SETSAT: AOSE STARTS ;SKIP FIRST TIEM ONLY JRST SAT01 ;WRITE SAT BLOCK IN CORE JRST DFWUNS ;SCAN ALL SAT BLOCKS STARTS: -1 ;COUNT STARTS, RESTARTS - -;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147, + ;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147, ;AT SAT01 UPON RE-ENTRY OF INITIALIZATION. INTERN DSKSTP,SAT05,JSAT06 @@ -454,8 +450,7 @@ DFENT2: MOVEI TAC1,WTBIT+ATCLO ;BITS FOR ACCESS ENTRRY - FILE CREATION NOSCHEDULE PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING JRST DFENT3 ;NOT THERE - -DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON? + DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON? TRNE DAT,WTBIT JRST DFERR6 ;YES,ERROR PUSHJ PDP,SCNAT2 @@ -472,7 +467,6 @@ DFENT3: TLZE IOS,PRCHG ;PROTECTION FAILURE? HRLZM TAC,DEVBKO(DEVDAT) HRRM TAC,DEVEXT(DEVDAT) ;STORE FIRST RIB# NOSCHEDULE - MOVE DAT,TAC1 ;ACCESS ENTRY BITS PUSHJ PDP,SETAT ;CREATE ACCESS ENTRY. RETURN POINTER IN TAC1 HRLM TAC1,DEVACC(DEVDAT) ;STORE POINTER TO ACCESS ENTRY @@ -505,8 +499,7 @@ DFENT4: TLO TAC1,55000 ;PROTECTION MOVSI TAC,VRGPTR ;SET "VIRGIN POINTER" FLAG (O DFO4A SUBROUTINE IORM TAC,DEVOAD(DEVDAT) ;WILL CREATE A NEW RIB WHEN JUST CALLED JRST ALLOK - -;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY + ;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION TLNE TAC,WPRO @@ -518,9 +511,8 @@ DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION PUSHJ PDP,DFERR6 ;YES, THIS WILL NOT RETURN HERE MOVEM TAC1,TBITS(TAC) ;NO, SET IT SCHEDULE - CONO PI,DSKON - MOVE TAC,@UUO ;SAVE FILE? + MOVE TAC,@UUO ;SAME FILE? CAME TAC,DEVFIL(DEVDAT) JRST DFERR8 ;NO, NAME WRONG ADDI UUO,1 @@ -541,8 +533,8 @@ DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION DFENT7: PUSHJ PDP,SCNAT2 ;FIND ANOTHER JRST DFENT1 ;NO WRITERS, PERMIT THIS ENTER JRST DFERR6 ;MUST BE BEING WRITTEN OR RENAMED - -;LOOKUP UUO + ;LOOKUP UUO + EXTERNAL UDLKC,TPOPJ @@ -571,7 +563,7 @@ DFLUK3: AOS TBITS(TAC) ;INCREMENT RCOUNT TLZE IOS,PRCHG ;PROTECTION CHANGE FAILURE? JRST DFLUK7 ;YES. ERROR RETURN MOVSI DAT,200000 ;READ PROTECTION BIT - PUSH J PDP,PROTEK ;READ PROTECTED? + PUSHJ PDP,PROTEK ;READ PROTECTED? JRST DFERR3 ;NAME WRONG JRST DFLUK7 ;PROTECTION FAILURE @@ -581,8 +573,8 @@ DFLUK3: AOS TBITS(TAC) ;INCREMENT RCOUNT TLOA TAC1,WPRO ;WRITE PROTECTED. SET FLAG TLZ TAC1,WPRO ;WRITE OK--RESET FLAG IORM TAC1,DEVOAD(DEVDAT) - -DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK + + DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK NOSCHEDULE HRRI TAC,@UUO ;DESTINATION IS UUO PARAMETER BLOCK MOVE TAC1,TAC @@ -597,8 +589,7 @@ DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK TLZ DEVDAT,ICLOSB MOVSI TAC,VRGPTR ;POINTERS DO EXIST ON THE DISK SO ANDCAM TAC,DEVOAD(DEVDAT) ;CLEAR THE VIRGIN POINTERS FLAG. - -ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB + ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB HRRM DAT,DEVACC(DEVDAT) ;SET VERTICAL POINTER POINTER MOVEI TAC,1 HRRM TAC,SETCNT(DEVDAT) ;"POISITONED" AT RELATIVE BLOCK 1 OF FILE @@ -617,7 +608,6 @@ IFG CHKCNT,< IORM TAC,DEVOAD(DEVDAT) ;NO. SUPPRESS CHECKSUM > ALLXIT: POP PDP,TAC ;REMEMBER 0(PDP) WASS XWD PROJ,PROG - AOS (PDP) ;RETURN TO CALL+2 JRST CLRBUF ;RELEASE MONITOR BUFFER @@ -646,8 +636,7 @@ ALTMFD: MOVEI TAC,3(UUO) ;IS PROJ, PROG. = 1,1? POPJ PDP, ;YES, RETURN JRST DFERR5 - -;RENAME UUO + ;RENAME UUO EXTERNAL CPOPJ1 EXTERNAL THSDAT @@ -674,6 +663,7 @@ DFRENX: SKIPN DEVFIL(DEVDAT) ;IS THERE AN OLD FILE? DFREN1: AOS TBITS(TAC) ;INCREMENT RCOUNT HRLM TAC,DEVACC(DEVDAT) ;SAVE POINTER TO ACCESS ENTRY SCHEDULE + HRRZ TAC,DEVEXT(DEVDAT) ;CAN THIS FILE BE RENAMED? PUSHJ PDP,SETPTR ;READ IN FIRST SET OF RETRIEVAL POINTERS MOVEI AC1,@UUO ;IS THE PROTECTION TO BE CHANGED ? @@ -692,8 +682,8 @@ DFRN2A: MOVSI DAT,100000 ;CAN THIS BE RE-WRITTEN? JRST DFERR3 ;BAD RETREIVAL INFO JRST DFRN8A ;WRITE PROTECTED TLZ IOS,PRCHG ;ARBITRARY CHANGE OK. - -DFREN2: NOSCHEDULE + + DFREN2: NOSCHEDULE PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING JRST DFRN1B ;NO @@ -708,8 +698,7 @@ DFRN1B: HLRZ TAC,DEVACC(DEVDAT) ;SET RENAME FLAG IN FIRST ENCOUNTERED ACCESS ENT MOVEI AC1,RTBIT ;RENAME BIT ORM AC1,TBITS(TAC) SCHEDULE - - MOVE TAC,@UUO ;GET NEW FILENAME + MOVE TAC,@UUO ;GET NEW FILENAME CAME TAC,DEVFIL(DEVDAT) ;SAVE AS DDB? JRST DFREN3 ;NO ADDI UUO,1 ;YES, SAME EXTENSION? @@ -718,6 +707,7 @@ DFRN1B: HLRZ TAC,DEVACC(DEVDAT) ;SET RENAME FLAG IN FIRST ENCOUNTERED ACCESS ENT TLNE TAC,-1 ;SAME? SOJA UUO,DFREN3 ;NO + ;FILENAME AND EXTENSION ARE IDENTICAL. CHANGE ONLY PROTECTION TLZ IOS,PRCHG ;CLEAR PRTOECTION CHANGE FLAG @@ -761,8 +751,7 @@ DFREN3: TLZE IOS,PRCHG ;IS ONLY PROTECTION CHANGE PERMITTED? SCHEDULE PUSHJ PDP,DFCL21 JRST DFER10 - -;ALTER RETRIEVAL INFORMATION + ;ALTER RETRIEVAL INFORMATION DFREN5: POP PDP,DAT ;BACK UP PDP @@ -794,8 +783,7 @@ DFREN5: POP PDP,DAT ;BACK UP PDP DPB TAC,[POINT 9,@TAC1,8] ;STORE IN RIB PUSHJ PDP,WRI ;RE-WRITE RIB - -;ALTER UFD BLOCK + ;ALTER UFD BLOCK PUSHJ PDP,FINDE ;BRING IN CORRECT BLOCK @@ -814,7 +802,6 @@ DFREN5: POP PDP,DAT ;BACK UP PDP DFRN8A: TLNE IOS,PRCHG ;PROTECTION CHANGE? JRST DFREN2 ;YES - DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY JRST DFERR5 ;AND LEAVE @@ -823,8 +810,7 @@ DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY DFREN9: SCHEDULE PUSHJ PDP,DFCL21 ;TEAKE OUT ACCESS ENTRY JRST DFERR6 - -;DELETE A FILE FROM A UFD + ;DELETE A FILE FROM A UFD DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK @@ -851,8 +837,7 @@ DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK MOVEI TAC1,DTBIT IORM TAC1,TBITS(TAC) ;SET TO DELETE WHEN THROUGH READIN JRST DFCL21 ;CLOSE ACCESS ENTRY AND LEAVE - -;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME + ;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME ;SEARCH THRU MFD AND UFD FOR THE FILE-NAME, ;EXIT TO CALL+1 IF A UFD CANNOT BE FOUND. ;EXIT TO CALL+2 IF THE FILE IS NOT FOUND. @@ -871,7 +856,6 @@ SETLE0: MOVEM IOS,DEVIOS(DEVDAT) TLO UUO,PROG MOVE AC1,@UUO ;PICK UP FILE NAME MOVEM AC1,DEVFIL(DEVDAT) ;STORE FILE NAME AND EXT IN DDB - ADDI UUO,1 HLLZ AC1,@UUO MOVEM AC1,DEVEXT(DEVDAT) @@ -886,8 +870,7 @@ SETLE9: MOVE ITEM,JOB ;TRY CURRENT JOB PP. SUBI UUO,3 ;UUO POINTS TO FILE NAME EXCH DAT,(PDP) ;PUT PP-NUMBER IN PD LIST PUSH PDP,DAT ;PDP POINTS TO CALL+1 - -;SEARCH MFD FOR THE OWNER OF THE FILE + ;SEARCH MFD FOR THE OWNER OF THE FILE MOVE DAT,-1(PDP) ;XWD PROJ,PROG MOVSI AC1,(SIXBIT /UFD/) ;EXTENSION "UFD" @@ -924,8 +907,7 @@ SETLE9: MOVE ITEM,JOB ;TRY CURRENT JOB PP. POP PDP,TAC ;YES POP PDP,TAC JRST DFERR6 - -;CHECK RETRIEVAL INFO FOR ELIGIBILITY + ;CHECK RETRIEVAL INFO FOR ELIGIBILITY ;ENTER WITH C(DAT) = PROTECTION TO CHECK IN BITS 0-2 ;EXIT TO CALL+1 IF NAME OR EXTENSION WRONG ;EXIT TO CALL+2 IF PROTECTION WRONG @@ -944,7 +926,6 @@ PROTEK: MOVEI TAC,PTR1(DEVDAT) ;POINT TO RETRIEVAL INFO AOS (PDP) PROTKX: MOVE AC1,-1(PDP) - PROTKY: MOVE ITEM,JOB XOR AC1,PRJPRG(ITEM) TRNN AC1,-1 ;SAVEM PROGRAMMER? @@ -954,103 +935,102 @@ PROTKY: MOVE ITEM,JOB TLNE AC1,-1 ;NO, SAME PROJECT? ROT DAT,-3 ;NO, ROTATE TO UNIVERAL FIELD -PROT1: TLZ DAT,60000 ;DO NOT TEST OWNER READ OR PROTECT PROTECTION +PROT1: TLZ DAT,60000 ;DO NOT TEST OWNER READ OR PROTECT PROTECTION TDNN DAT,2(TAC) - JRST CPOPJ1 ;PROTECTION O.K. + JRST CPOPJ1 ;PROTECTION O.K. MOVE AC1,PRJPRG(ITEM) - CAMN AC1,DUMPPP ;EQUAL TO DUMPPER PROJECT - ;PROGRAMMER NUMBER? - AOS(PDP) ;YES, ALL FILES AVAILABLE + CAMN AC1,DUMPPP ;EQUAL TO DUMPPER PROJECT + ;PROGRAMMER NUMBER? + AOS(PDP) ;YES, ALL FILES AVAILABLE POPJ PDP, - -;CLOSE UUO + ;CLOSE UUO ;CLOSE AN OUTPUT FILE EXTERNAL PIOMOD,WAIT1,OUT DFCLSO: TLNN DEVDAT,ENTRB ;ENTER DONE YET? - POPJ PDP, ;NO, FORGET IT + POPJ PDP, ;NO, FORGET IT HLRZ TAC,DEVACC(DEVDAT) ;SHOULD WE CLOSE? (POINT TO ACCESS ENTRY) IFN FTRCHK,< - SKIPN TAC ;ACCESS TABLE POINTER EXISTS? - HALT . ;IF NOT, HALT, NO RE-START POSSIBLE. + SKIPN TAC ;ACCESS TABLE POINTER EXISTS? + HALT . ;IF NOT, HALT, NO RE-START POSSIBLE. > MOVE TAC,TBITS(TAC) IFN FTRCHK, < TRNN TAC,ATCLO+RWTBIT ;CREATION OR UPDATE OF FILE IN PROGRESS? - HALT . ;NO, ERROR. CAN'T CONTINUE + HALT . ;NO, ERROR. CAN'T CONTINUE > LDB TAC,PIOMOD - CAIGE TAC,DR ;DUMP MODE? + CAIGE TAC,DR ;DUMP MODE? TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS? - JRST DFCL2 ;YES TO EITHER QUESTION + JRST DFCL2 ;YES TO EITHER QUESTION HLRZ TAC,DEVBUF(DEVDAT) ;NO. GET ADDRESS OF OUTPUT - ; BUFFER HEADER BLOCK. - TLO TAC,PROG ;RELOCATE - SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ? - JRST DFCL2 ;YES, DON'T OUTPUT - AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER + ; BUFFER HEADER BLOCK. + TLO TAC,PROG ;RELOCATE + SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ? + JRST DFCL2 ;YES, DON'T OUTPUT + AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER ADD TAC1,[XWD PROG,1] ;TAC1 POINTS TO WORD COUNT PRECEDING - ; USER DATA BUFFER - HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER - SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER - ; NOT SET UP - SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED - TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ? - HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR - ; COMPUTED WORD COUNT - SKIPN AC1 ;WORD COUNT EQUAL TO 0? - JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK. - PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER - PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH + ; USER DATA BUFFER + HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER + SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER + ; NOT SET UP + SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED + TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ? + HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR + ; COMPUTED WORD COUNT + SKIPN AC1 ;WORD COUNT EQUAL TO 0? + JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK. + PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER + PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH DFCL2: PUSHJ PDP,SETBUF ;CHOOSE A BUFFER AREA FOR RETRIEVAL POINTERS TLO IOS,NMP!NCTRLC ;SET NMP, MUST NOT INTERRUPT POINTER WRITING MOVEM IOS,DEVIOS(DEVDAT) ;DO DFO4A WON'T READ NEW POINTERS IN - PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS + PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS HLRZ AC1,DEVBLK(DEVDAT) XOR AC1,DEVEXT(DEVDAT) TRNE AC1,-1 ;ONLY ONE BLOCK OF POINTERS? - PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER + PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER PUSHJ PDP,SET000 - ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER + ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER MOVN AC1,DEVCNT(DEVDAT) ;PICK UP AND NEGATE SIZE OF FILE - HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB - PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION - -;CLOSE UUO CONTINUED. + HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB + PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION + ;CLOSE UUO CONTINUED. ;THE FILE AND ALL ITS POINTERS HAVE BEEN PUT ON DISK. ;NOW PUT ENTRY IN DIRECTORY. + TLZ DEVDAT,ENTRB HLRZ TAC,DEVACC(DEVDAT) ;PICK UP ACCESS TABLE POINTER MOVE DAT,TBITS(TAC) ;GET STATUS BITS AND READ COUNT - TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE? - JRST DFCLU1 ;YES + TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE? + JRST DFCLU1 ;YES TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS? - JRST DFC16A ;YES - TRNN DAT,ATIND ;IUS NAME ALREADY IN DIRECTORY? - JRST DFCL20 ;NO. INSERT IT + JRST DFC16A ;YES + TRNN DAT,ATIND ;IS NAME ALREADY IN DIRECTORY? + JRST DFCL20 ;NO. INSERT IT MOVEM IOS,DEVIOS(DEVDAT) - PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY. + PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY. MOVE TAC,DEVEXT(DEVDAT) ;CHANGE BLOCK POINTER - EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK + EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK MOVEM TAC,DEVEXT(DEVDAT);SAVE POINTER TO RIB OF OLD VERSION FOR RECLAM - PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT + PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER NOSCHEDULE PUSH PDP,ATPP(TAC) ;SAVE XWD PROJ,PROG - PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY - POP PDP,AC2 ;XWD PROJ,PROG + PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY + POP PDP,AC2 ;XWD PROJ,PROG PUSHJ PDP,SCNAT0 ;SCAN FOR ANY OTHERS READING OLD VERSION JRST DFCL17 ;NONE DFCL16: MOVEI AC1,DTBIT ;DELETE WHEN THRU READING SINCE IT WAS JUST UPDATED IORM AC1,TBITS(TAC) PUSHJ PDP,SCNAT2 ;LOOK FOR MORE - JRST CLRBUF ;NO MORE + JRST CLRBUF ;NO MORE JRST DFCL16 -DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE. - ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE. +DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE. + ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE. DFCL17: SCHEDULE HRRZ TAC,DEVEXT(DEVDAT) ;RIB# OF FILE @@ -1059,56 +1039,53 @@ DFCL17: SCHEDULE DFCL20: PUSHJ PDP,INSDIR ;INSERT THE NAME HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER NOSCHEDULE - PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY - JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE + PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY + JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE DFCLU1: MOVEM DAT,TBITS(TAC) ;STORE STATUS BITS (WITH UPDATE MARKER CLEARED) TLN DEVDAT,LOOKB ;WAS IUNPUT SIDE OF FILE ALSO CLOSED? - POPJ PDP, ;NO, LET THE USER KEEP READING IT + POPJ PDP, ;NO, LET THE USER KEEP READING IT TRNE DAT, RCOUNT ;YES, ANYBODY ELSE STILL READING IT? - JRST DFCLU2 ;YES - TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION? - JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE - PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY + JRST DFCLU2 ;YES + TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION? + JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE + PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY DFCLU2: HRRZS DEVACC(DEVDAT) ;CLEAR POINTER TO ACCESS TABLE - JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT., - - - ;CLOSE UUO CONTINUED. + JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT., + ;CLOSE UUO CONTINUED. ;CLOSE AN INPUT FILE. DFCLSI: TLZN DEVDAT,LOOKB POPJ PDP, DFCL21: HLRZ TAC,DEVACC(DEVDAT) ;POINT TO ACCESS ENTRY - JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED - ; (PROBABLY ^C DURING EARLIER ATTEMPT) + JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED + ; (PROBABLY ^C DURING EARLIER ATTEMPT) MOVE TAC1,TBITS(TAC) ;GET STATUS BITS IFN FTRCHK,< - TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)? + TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)? HALT CPOPJ ;IF SO, SOMEBODY IS VERY CONFUSED. > NOSCHEDULE SOS TAC1,TBITS(TAC) ;DECREMENT RCOUNT TRNE TAC1,RCOUNT+RWTBIT ;ANY MORE READS? OR OUTPUT CLOSE TO DO? - JRST DFCL23 ;YES, LEAVE + JRST DFCL23 ;YES, LEAVE - TRNE TAC1,DTBIT ;TO BE DELETED? - JRST DFC16A ;YES - PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT + TRNE TAC1,DTBIT ;TO BE DELETED? + JRST DFC16A ;YES + PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT DFCL23: SCHEDULE TLZN DEVDAT,INPB ;ANY INPUT UUO' - JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF + JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF PUSHJ PDP,SETBUF ;YES, UPDATE ACCESS DATE AS FOLLOWS: - PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION. + PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION. SUBI TAC1,BLKSIZ-2 ;SET TAC1 TO 2ND WORD OF BLOCK LDB AC1,[POINT 17,@TAC1,35] ;GET PREVIOUS ACCESS DATA. - CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY? - JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT. - MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE. + CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY? + JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT. + MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE. DPB AC1,[POINT 17,@TAC1,35] ; - PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION. - JRST CLRBUF ;CLEAR BUFFER AND EXIT. - -SUBTTL DIRECTORY SEARCHING + PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION. + JRST CLRBUF ;CLEAR BUFFER AND EXIT. + SUBTTL DIRECTORY SEARCHING ;SEARCH DIRECTORY FOR A PARTICULAR ENTRY. ;ENTRY BY: MOVE DAT,NAME ; HLLZ AC1,EXTENSION @@ -1118,74 +1095,73 @@ SUBTTL DIRECTORY SEARCHING ; EXIT2 NAME FOUND, TAC POINTS TO ENTRY DIRSRC: PUSH PDP,AC1 - PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION + PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION PUSHJ PDP,SETPTR ;READ UFD RETRIEVAL POINTERS DRSRC0: HRRZ TAC,DEVACC(DEVDAT) CAILE TAC,PTRN(DEVDAT) ;MORE POINTERS IN CORE? - JRST DRSRC7 ;NO, GET MORE. + JRST DRSRC7 ;NO, GET MORE. HRRZ TAC,(TAC) JUMPE TAC,DRSRC6 ;0 SIGNALS END OF POINTERS AOS DEVACC(DEVDAT) ;NEXT POINTER AOS DEVCNT(DEVDAT) ;COUNT UFD BLOCKS SEARCHED - PUSHJ PDP,MQIN ;READ IN DATA BLOCK - JRST RERA ;ERROR, YOU LOSE. + PUSHJ PDP,MQIN ;READ IN DATA BLOCK + JRST RERA ;ERROR, YOU LOSE. MOVE TAC1,DSKBUF(DEVDAT) ;XWD-L,POINTER HRRZ TAC,TAC1 - TLNN IOS,UBFS ;DUMP MODE? - HRLI TAC,PROG ;NO. RELOCATE. + TLNN IOS,UBFS ;DUMP MODE? + HRLI TAC,PROG ;NO. RELOCATE. HLLZ AC1,-1(PDP) ;SIXBIT/EXT/ -DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED? - JRST DRSRC0 ;YES +DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED? + JRST DRSRC0 ;YES ADDI TAC,1 - CAMN AC3,(PDP) ;NAMES MATCH? - JRST DRSRC8 ;YES + CAMN AC3,(PDP) ;NAMES MATCH? + JRST DRSRC8 ;YES DRSRC4: ADDI TAC,1 HRRZ AC3,TAC CAIE AC3,BLKSIZ(TAC1) ;IS BLOCK ENTIRELY SEARCHED? - JRST DRSR3A ;NO + JRST DRSR3A ;NO JRST DRSRC0 -DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK? +DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK? JRST DRSRC6 ;NO - PUSHJ PDP,GETPTR ;YES, GET SOME + PUSHJ PDP,GETPTR ;YES, GET SOME JRST DRSRC0 -DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH +DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH CAME AC3,AC1 - JRST DRSRC4 ;NO - SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY + JRST DRSRC4 ;NO + SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY - AOS -2(PDP) ;YES, ENTRY IS FOUND + AOS -2(PDP) ;YES, ENTRY IS FOUND MOVSS DEVCNT(DEVDAT) ;SAVE COUNT OF UFD BLOCKS FOR USE AT CLOSE -;EXIT + + ;EXIT DRSRC6: POP PDP,DAT POP PDP,AC1 - POPJ PDP, ;"FILE" NOT FOUND + POPJ PDP, ;"FILE" NOT FOUND ;CHECK PROTECTION ON UFD -DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION +DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION PUSHJ PDP,SETPTR MOVSI DAT,200000 ;SET UP TO TEST READ BIT - TLNE IOS,10 ;IS IT LOOKUP> + TLNE IOS,10 ;IS IT LOOKUP? ROT DAT,-1 ;NO,TEST WRITE PROTECTION MOVEI TAC,PTR1(DEVDAT) - HRRZ AC1,-3(PDP) ;XWD PROJ,PROG + HRRZ AC1,-3(PDP) ;XWD PROJ,PROG TLZ IOS,PRCHG PUSHJ PDP,PROTKY - TLO IOS,PRCHG ;FLAG PROTECTION CHANGE + TLO IOS,PRCHG ;FLAG PROTECTION CHANGE PUSH PDP,DEVFIL(DEVDAT) ;PUSH FILENAME TO MAKE PDL LOOK LIKE DIRSRC JRST DRSRC0 - - -;FIND A UFD ENTRY, IT MUST BE THERE. + ;FIND A UFD ENTRY, IT MUST BE THERE. EXTERNAL AUREQ,AUWAIT -FINDE: AOSE AUREQ +FINDE: AOSE AUREQ PUSHJ PDP,AUWAIT TLO IOS,AUFLG HLRZ TAC,SETCNT(DEVDAT) ;SET TAC TO UFD POINTERS @@ -1196,31 +1172,30 @@ FINDE1: MOVSM TAC,DEVBLK(DEVDAT);READ A POINTER BLOCK PUSHJ PDP,RRIA CAILE DAT,BLKSIZ-2 ;POINTER IN THIS BLOCK? JRST FINDE2 ;NO, GET NEXT ONE - SUBI DAT,1 ;YES, BRING THEM IN + SUBI DAT,1 ;YES, BRING THEM IN HRRM DAT,DEVBLK(DEVDAT) ;SET INDEX INTO RIB PUSHJ PDP,DFIN4 ;COPY POINTERS INTO DDB HRRZ TAC,PTR1(DEVDAT) ;GET RETRIEVAL POINTER FOR UFD BLOCK - PUSHJ PDP,MQIN ;READ THE UFD BLOCK - JRST RERA ;ERROR - PUSHJ PDP,SET000 ;FIND THE ENTRY + JRST RERA ;ERROR + PUSHJ PDP,SET000 ;FIND THE ENTRY HLLZ AC1,DEVEXT(DEVDAT) ;GET EXTENSION FROM DDB -SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD +SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD ADDI TAC1,1 CAME TAC,DEVFIL(DEVDAT) ;SAME? AOJA TAC1,SRCU1 ;NAMES DO NOT MATCH HLLZ TAC,@TAC1 ;GET EXTENSION FROM UFD CAME TAC,AC1 ;SAME? AOJA TAC1,SRCU1 ;EXTENSIONS DO NOT MATCH - POPJ PDP, ;FOUND IT + POPJ PDP, ;FOUND IT + -FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK +FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK HLRZ TAC,@TAC1 SUBI DAT,BLKSIZ-2 ;BACK UP DAT JRST FINDE1 - -;INSERT AN ENTRY IN A DIRECTORY. + ;INSERT AN ENTRY IN A DIRECTORY. EXTERNAL AUREQ,AUWAIT,AUAVAL @@ -1229,7 +1204,7 @@ INSDIR: AOSE AUREQ TLO IOS,AUFLG SETZM DEVCNT(DEVDAT) ;CLEAR BEFORE COUNTING BLOCK OF UFD HLRZ TAC,SETCNT(DEVDAT) ;BLOCK# OF UFD RIB - PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,. + PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,. SOS DEVACC(DEVDAT) ;SYNC INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER, @@ -1238,12 +1213,12 @@ INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER, CAILE TAC,PTRN(DEVDAT) ;ANY MORE IN CORE? JRST INSD10 ;NO, GET SOME MORE -INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER +INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER JUMPE TAC,INSD5 ;0 SIGNALS END OF POINTERS - PUSHJ PDP,MQIN ;READ UFD BLOCK + PUSHJ PDP,MQIN ;READ UFD BLOCK JRST RERA ;ERROR. - PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 + PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 SKIPE @TAC1 ;IS IT ZERO? JRST INSD1 ;NO, BLOCK FULL. @@ -1251,33 +1226,31 @@ INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER PUSHJ PDP,INSD3 ;INSERT ENTRY. JRST WUFD ;WRITE BLOCK AND LEAVE - -;INSERT THE ENTRY. + ;INSERT THE ENTRY. INSD3: HRRZ AC1,DSKBUF(DEVDAT) INSD3B: CAIN AC1,(TAC1) ;BEGINNING OF BLOCK? - JRST INSD3A ;YES + JRST INSD3A ;YES SUBI TAC1,2 SKIPN @TAC1 ;SEARCH UFD BLOCK BACKWARDS ; FOR LAST NON-ZERO FILENAME. JRST INSD3B - ADDI TAC1,2 ;MOVE IN NAME. + ADDI TAC1,2 ;MOVE IN NAME. INSD3A: MOVE TAC,DEVFIL(DEVDAT) MOVEM TAC,@TAC1 - ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER. + ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER. MOVE TAC,DEVEXT(DEVDAT) IFN FTRCHK,< TRNN TAC,-1 ;POINTER TO BLOCK 0 - HALT .+1 ;FOR RETRIEVAL INFO - ; CONTINUE-GET BAD INFO MESSAGE + HALT .+1 ;FOR RETRIEVAL INFO + ; CONTINUE-GET BAD INFO MESSAGE > MOVEM TAC,@TAC1 POPJ PDP, - -;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY + ;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY ;POINTER BLOCK, ADD POINTER IF POSSIBLE. IF NOT POSSIBLE. ;CREATE NEW POINTER BLOCK AND PUT THE POINTER IN IT. @@ -1327,8 +1300,7 @@ INSD7A: MOVE TAC,SETCNT(DEVDAT) ;GET POINT SAVED ABOVE TLZ IOS,AUFLG MOVEM IOS,DEVIOS(DEVDAT) POPJ PDP, - -;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER. + ;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER. ;INSERT NEW ONE, AND WRITE BLOCK OUT. INSD8: SKIPN @TAC1 @@ -1347,13 +1319,10 @@ INSD10: TLNE IOS,NMP ;ANY MORE ON DISC? INSD11: TRNN IOS,IOIMPM JRST WERA ;IT WAS NOT, YOU LOSE. - PUSHJ PDP,WLERA ;GET ANOTHER BLOCK HRRM TAC,SETCNT(DEVDAT) JRST INSD5A - - -;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT. + ;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT. ;IF WRITE-LOCK ERROR, TRY ANOTHER BLOCK. FINALLY, IF POINTERS WERE ;ALTERED, WRITE THEM OUT. @@ -1381,7 +1350,7 @@ WUFD1: PUSHJ PDP,MQOUT ;WRITE UFD BLOCK JRST WUFD3 ;WRITE ERROR MOVE TAC,DEVOAD(DEVDAT) TLO IOS,NMP ;SET NMP - MOVEM IOS,DEVIOS(DEVDAT) ;SO DFO4A WON'T READ POINTERS + MOVEM IOS,DEVIOS(DEVDAT) ;SO WON'T READ POINTERS TLN TAC,PNTDIF ;WERE POINTERS CHANGED? PUSHJ PDP,DFO4A ;YES, WRITE THEM OUT. SOSL AUREQ ;RELEASE UFD RESOURCE @@ -1401,8 +1370,7 @@ WUFD3: MOVE TAC1,DSKCNT(DEVDAT);WAS ERROR WRITE-LOCK? MOVE TAC1,DEVACC(DEVDAT) HRRM TAC,(TAC1) JRST WUFD1 - -SUBTTL ACCESS TABLE PROCESSING + SUBTTL ACCESS TABLE PROCESSING ;SCAN ACCESS TABLE. ;EXIT TO CALL+1 WITH TAC SET TO THE LAST ENTRY IF NOT THERE. ;EXIT TO CALL+2 WITH TAC SET TO CORRECT ENTRY IF THERE. @@ -1428,18 +1396,19 @@ SCNAT1: CAME AC2,ATPP(TAC) ;PROJ,-PROG. THE SAME? ;CONTINUE SCAN FROM CURRENT ENTRY + SCNAT2: HRRZ DAT,ATLINK(TAC) ;ANY MORE ENTRIES? JUMPE DAT,CPOPJ ;NO MOVE TAC,DAT ;YES, GO TO THE NEXT ONE JRST SCNAT1 -;CLEAR AN ACCESS ENTRY. + ;CLEAR AN ACCESS ENTRY. ;IT IS ASSUMED THAT NO SCHEDULING WILL TAKE PLACE. ;ENTER WITH TAC POINTING TO THE ENTRY TO WIPE OUT. + CLRAT: IFN FTRCHK,< SKIPN TAC ;ATTEMPT TO CLEAR NON EXISTENT ACCESS TABLE IS AN ERROR - HALT SCNHLT ;CONTINUE WILL POPJ AND EXIT. > HRRZS DEVACC(DEVDAT) ;CLEAR ACCESS TABLE POINTER IN DEVICE DATA BLOCK @@ -1461,7 +1430,8 @@ CLRAT1: MOVE AC1,AC2 ;PICKUP THE NEXT ACCESS TABLE HRRM AC2,ATLINK(AC1) ;LINK AROUND IT JRST CLRCOR ;CLEAR THE CORE -;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK. + + ;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK. ;BUILD UP THE ENTRY ;UPON ENTRY, DAT SHOULD CONTAIN TEST BITS TO SET @@ -1479,8 +1449,7 @@ SETAT: PUSHJ PDP,GETFCR ;TAC1 POINTS TO 4 WORD BLOCK HRRZM TAC1,FAT ;POINT FAT TO THIS NEW ENTRY SETHLT: POPJ PDP, ;HALT PC HERE IF END OF TABLE WITHOUT FINDING ; ENTRY TO BE CLEARED - -SUBTTL DUMP INPUT/OUTPUT + SUBTTL DUMP INPUT/OUTPUT ;DUMP MODE OUTPUT EXTERNAL COMCHK,ADRERR,SAVDDL @@ -1511,7 +1480,7 @@ DFDO1A: PUSHJ PDP,SATGET ;AQUIRE A NON-FULL SAT BLOCK MOVMS ITEM ADDI ITEM,BLKSIZ-1 ;MAKE E.G. 129 WORDS USE 2 DISK BLOCK ASH ITEM,-BLKP2 ;NUMBER OF BLOCK REQUIRED FOR THIS WRITE -DFDO2A: HRRZ AC1,SATPTR + DFD02A: HRRZ AC1,SATPTR MOVE AC2,SATBK2 DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS) JRST DFDO6 ;NOT AVAILABLE @@ -1529,15 +1498,13 @@ DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS) MOVN TAC,ITEM LSH TAC,BLKP2 HLRES TAC1 - CAML TAC,TAC1 HRLM TAC,DSKBUF(DEVDAT) ;ONLY A PARTIAL WRITE HLRE TAC1,DSKBUF(DEVDAT) MOVMS TAC1 PUSHJ PDP,UPDEVC ;UPDATE SIZE OF FILE ADDM ITEM,SETCNT(DEVDAT) ;NON UPDATE RELATIVE BLOCK# WITHIN THE FILE - - MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT + MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT TLZN TAC1,BLKSIZ-1 ;AN EVEN NUMBER OF DISK BLOCKS TO BE WRITTEN? JRST DFDO2G ;YES, DON'T WORRY ABOUT PARTIAL BLOCK ;HANDLING PROBLEMS @@ -1558,6 +1525,8 @@ DFDO2C: ADD AC1,[XWD BLKSIZ,BLKSIZ] ;SET UP ADDRESS, WORD COUNT, AND LOGICAL JUMPL AC1,DFDO2C ;OF THIS DUMP MODE OUTPUT REQUEST. SUB AC1,[XWD BLKSIZ,BLKSIZ] HLL AC2,AC1 ;SAVE LH + ADDI AC1,(PROG) ;RELOCATE USER'S ADDRESS + HLL AC1,AC2 ;IN CASE OF OVERFLOW INTO LH(2 SEG SAVE) DFDO2D: MOVE AC2,(AC1) ;MOVE DATA FROM END OF USER'S MOVEM AC2,(TAC1) ;OUTPUT AREA DT MONITOR BUFFER AOBJP TAC1,. @@ -1588,6 +1557,7 @@ DFDO2B: POP PDP,ITEM ;RESTORE COUNT ;TOSS OUT A SERIES OF CONSECUTIVE POINTERS HRRZ AC2,DEVACC(DEVDAT) ;GET RETRIEVAL POINTER POINTER + DFDO3A: MOVE AC1,@AC2 ;IS POINTER ALREADY THERE? ADDI AC2,1 TRNE AC1,-1 @@ -1606,7 +1576,6 @@ DFDO3B: AOS DAT,(PDP) ;PUT A POINTER IN CORE MOVE TAC,-1(PDP) PUSHJ PDP,SAVDDL ;ADJUST ADR IN CASE OF HIGH SEG SAVE PUSHJ PDP,CHKSUM - HRLM TAC1,-1(AC2) > @@ -1622,8 +1591,7 @@ DFDO3C: MOVE TAC1,[XWD BLKSIZ,BLKSIZ];INCREMENT IOWD JRST DFDO1 ;NOT FINISHED, GET NEXT SET POP PDP,TAC ;BACK UP PDP AOJA UUO,DFDO0 ;GO BAK FOR MORE - -;WRITE POINTERS ONTO DISK + ;WRITE POINTERS ONTO DISK DFDO4: HRLM ITEM,(PDP) ;SAVE COUNT OF BLOCKS TO WRITE PUSHJ PDP,SETBUF ;FIND SOME 200 WORD AREA @@ -1664,8 +1632,7 @@ DFDO9: HRLM ITEM,(PDP) ;SAVE BLOCK COUNT WITH BLOCK# POP PDP,AC2 ;RESTORE POINTER INTO RETRIEVAL INFO HLRZ ITEM,(PDP) ;RESTORE COUNT OF BLOCKS TO WRITE THIS ITERATION JRST DFDO3B - -;DUMP MODE INPUT. + ;DUMP MODE INPUT. EXTERNAL COMCHK,ADRERR @@ -1703,9 +1670,7 @@ DFDI0A: ADDI TAC,1 ;FROM XWD -L,FIRST-ADDRESS ADDM TAC,-2(PDP) AOS DEVACC(DEVDAT) ;NEXT POINTER AOS SETCNT(DEVDAT) ;NEXT RELATIVE BLOCK - - -DFDI1: SKIPGE -2(PDP) ;MORE TO GO? + DFDI1: SKIPGE -2(PDP) ;MORE TO GO? JRST DFDI2 ;YES DFDI1A: MOVE TAC1,-1(PDP) ;NO, PROCESS THE FIRST BLOCK @@ -1733,8 +1698,7 @@ DFDI1B: SUB PDP,[XWD 2,2] ;BACK UP PDP, REMOVE XWD AND IOWD DFDI1C: MOVE IOS,[XWD IOEND,IODEND] ;NO MORE INPUT ORB IOS,DEVIOS(DEVDAT) POPJ PDP, - -;DUMP INPUT CONTINUED, + ;DUMP INPUT CONTINUED, ;FIND A SERIES OF CONSECUTIVE BLOCKS TO READ AT ONCE DFDI2: HRRZ AC2,DEVACC(DEVDAT) ;GET NEXT POINTER @@ -1753,7 +1717,6 @@ DFDI3: ADDI TAC,BLKSIZ ;ANY MORE TO READ? CAIG AC2,PTRN(DEVDAT) SKIPN AC3,@AC2 ;END-FILE JRST DFDI4 ;YES - CAIN TAC1,-1(AC3) ;STILL CONSECUTIVE? AOJA TAC1,DFDI3 ;YES, LOOP @@ -1771,13 +1734,12 @@ DFDI6: HRRZ TAC1,DEVACC(DEVDAT) MOVS TAC1,@TAC HRLM TAC,(PDP) HRR TAC1,-3(PDP) - MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT + MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT MOVE TAC,(TAC) ;GET FIRST LOGICAL BLOCK# MOVEM TAC1,DSKBUF(DEVDAT) ;STORE CONTROLLING IOWD PUSHJ PDP,MQIN ;REQUEST THE INPUT JFCL ;ERRORS IGNORED - -;DUMP INPUT CONTINUED. + ;DUMP INPUT CONTINUED. ;IF THERE IS CHECKSUMMING. CHECK IT, ELSE INCREMENT IOWD ;AND LOOP. @@ -1825,8 +1787,7 @@ DFDI10: MOVEI AC2,PTR1(DEVDAT) ;NO MORE POINTERS ON DISK HRRM AC2,DEVACC(DEVDAT) SETZM @AC2 POPJ PDP, - -SUBTTL USETO/USETI + SUBTTL USETO/USETI ;SETD AND SETI UUOS EXTERNAL WAIT1 @@ -1876,8 +1837,7 @@ DFSET1: PUSHJ PDP,RRI ;READ THEM IN MOVNS TAC ADDM TAC,SETCNT(DEVDAT) JRST DFSETC - -;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON + ;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON ;DISC, THEN CORE IS FULL, AND THE POINTER IS IN CORE, OTHERWISE ;A CHECK IS MADE TO INSURE THAT THE END FILE IS AFTER THE DESIRED ;POINTER. @@ -1913,7 +1873,7 @@ DFSET6: SUBI TAC1,PTR1(DEVDAT) PUSHJ PDP,DFO4A ;NO, WRITE THEM OUT HRRZ TAC,DEVEXT(DEVDAT) ;GET BLOCK# OF FIRST RIB PUSHJ PDP,SETPTR ;READ FIRST RIB -DFSETB: MOVEI TAC,1 ;RESET SETCNT + DFSETB: MOVEI TAC,1 ;RESET SETCNT HRRM TAC,SETCNT(DEVDAT) ;"POSITIONED" AT RELATIVE BLOCK 1 DFSETC: HRRZ TAC,DSKBUF(DEVDAT) ;LSET TAC TO FIRST POINTER @@ -1932,7 +1892,6 @@ DFSETD: HRRZ AC1,SETCNT(DEVDAT) HRRZ AC2,TAC1 ADD AC2,AC1 CAIL AC2,(UUO) - JRST DFSET7 ;YES ADDI AC2,1 ;NO. GET NEXT BLOCK HRRM AC2,SETCNT(DEVDAT) @@ -1962,13 +1921,13 @@ DFSET8: ADDI TAC1,1 MOVEM IOS,DEVIOS(DEVDAT) PUSHJ PDP,DFO6A ;CLEAR POINTERS JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE - -SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING + SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING ;INPUT UUO ;* INDICATES INTERRUPT LEVEL EXTERNAL ADVBFF + DFIN: TLNN DEVDAT,LOOKB ;FILE OPEN? JRST DFERR2 ;NO, UNDEFINED FILE TLZ IOS,IO ;SET INPUT INDICATOR @@ -1994,6 +1953,7 @@ DFIN1E: TLO IOS,LIR ;*EMPTY FILE MOVEM IOS,DEVIOS(DEVDAT) ;* POPJ PDP, ;* + DFIN1B: TLNE IOS,NMP ;*ANY MORE POINTERS ON DISK? TLO IOS,LIR ;*NO, THIS IS THE LAST READ JRST DFIN1A ;* @@ -2003,8 +1963,7 @@ DFIN2: MOVEM IOS,DEVIOS(DEVDAT) PUSHJ PDP,GETPTR ;READ RIB COPY POINTERS INTO DDB HRRZ TAC1,DEVACC(DEVDAT) JRST DFIN1D - -;NEED NEW POINTER FROM DISK + ;NEED NEW POINTER FROM DISK GETPTR: MOVE AC2,DEVOAD(DEVDAT) ;POINTERS DIFFER? TLNE AC2,PNTDIF @@ -2023,7 +1982,6 @@ GTPTR1: PUSHJ PDP,SET000 ;SET TAC1 TO FIRST WORD OF RIB MOVEI AC1,PTRN(DEVDAT) ;DDB END CHECK DFIN5: CAML AC3,TAC1 ;POINTER BLOCK EMPTY? - JRST DFIN7 ;YES, GET SOME MORE MOVE TAC,@AC3 ;GET RETRIEVAL POINTER @@ -2045,8 +2003,7 @@ DFIN6A: MOVEM IOS,DEVIOS(DEVDAT) MOVSI AC1,PNTDIF ;CLEAR "POINTER DIFFER" ANDCAM AC1,DEVOAD(DEVDAT) ;SINCE DDB IS COPY OF RETRIEVAL DATA. POPJ PDP, - -DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH + DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH JUMPE TAC,DFIN8 ;DONE IF LINK=0 MOVSM TAC,DEVBLK(DEVDAT) ;SET BLOCK#, WORD INDE FOR NEXT PACKET PUSH PDP,AC2 @@ -2067,8 +2024,7 @@ DFINX: PUSHJ PDP,ADVBFF ;*ANY MORE EMPTY BUFFERS? POPJ PDP, ;* JRST DFIN1 ;*NO,FILL NEXT ONE - -;OUTPUT UUO + ;OUTPUT UUO EXTERNAL WSYNC,ADVBFE @@ -2087,7 +2043,6 @@ DFOUT1: HRRZ DAT,DEVACC(DEVDAT) ;*GET POINTER LOC MOVSI TAC1,PNTDIF ;* ORM TAC1,DEVOAD(DEVDAT) ;* > - HRRZ TAC,@DAT ;*ALREADY HAVE A POINTER? JUMPN TAC,DFOT3A ;*YES IF JUMP CAIE DAT,PTRN(DEVDAT) ;*NO, CLEAR NEXT ONE? @@ -2109,10 +2064,9 @@ DFOUT1: HRRZ DAT,DEVACC(DEVDAT) ;*GET POINTER LOC ORM TAC1,DEVOAD(DEVDAT) MOVEM TAC,@DAT> -DFOT3A: CAIE DAT,PRTN(DEVDAT) ;*LIST FULL? +DFOT3A: CAIE DAT,PTRN(DEVDAT) ;*LIST FULL? JRST QOUT ;*NO, WRITE AND LEAVE - -;OUTPUT UUO CONTINUED. + ;OUTPUT UUO CONTINUED. ;WRITE OUT POINTER LIST. PUSHJ PDP,SETBFO ;CHOOSE AN OUTPUT BUFFER TO READ RIB INTO @@ -2155,8 +2109,7 @@ DFO6A: MOVEI TAC,PTR1(DEVDAT) MOVE TAC,DEVBLK(DEVDAT) MOVEM TAC,DEVBKO(DEVDAT) ;SAE BLOCK#,WORD INDEX OF CURRENT POINTER PACKET POPJ PDP, - -DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT + DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT PUSHJ PDP,SET177 ;SET TAC1 TO WORD 128 SETZM @TAC1 ;CLEAR BLOCK# WORD AOS (PDP) ;ALWAYS SKIP RETURN @@ -2175,7 +2128,6 @@ NEWRIB: PUSH PDP,AC3 ;CREATE A NEW RETRIEVAL BLOCK MOVSM TAC,DEVBLK(DEVDAT) ;STORE BLOCK#, INDEX FOR NEW BLOCK PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 AGAIN HRLM TAC,@TAC1 ;LH LINKS TO NEW BLOCK - MOVE TAC,AC3 ;BLOCK# OF CURRENT BLOCK PUSHJ PDP,WRIA ;WRITE THE BLOCK OUT @@ -2199,8 +2151,7 @@ DFOUT9: EXCH TAC,DEVBLK(DEVDAT) ;SAVE NEW BLOCK# INDEX. GET OLD BLOCK# INDEC PUSHJ PDP,WRIA ;WRITE THIS BLOCK OF POINTERS OUT PUSHJ PDP,RRI ;READ NEXT BLOCK OF POINTERS IN JRST DFO8A - -;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER + ;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER EXTERN MJOBN @@ -2222,8 +2173,7 @@ DFOUTX: PUSHJ PDP,ADVBFE ;*ANY MORE TO DO? POP PDP,AC2 ;* POP PDP,AC1 ;* POPJ PDP, ;* - -SUBTTL READ/WRITE RETRIEVAL POINTERS + SUBTTL READ/WRITE RETRIEVAL POINTERS ;INPUT RETRIEVAL BLOCK. RRIB: SKIPA TAC,DEVEXT(DEVDAT) ;READ FIRST RETRIEVAL BLOCK @@ -2264,8 +2214,7 @@ SET176: HRRZ TAC1,DSKBUF(DEVDAT) SET000: HRRZ TAC1,DSKBUF(DEVDAT) JRST S177A - - + ;PUT POINTER INFO IN DDB ;ENTER WITH TAC CONTAINING THE BLOCK NUMBER OF THE POINTERS. @@ -2284,6 +2233,7 @@ SETPTR: HRLZM TAC,DEVBLK(DEVDAT) ;XWD RIB#, 0...0 INDEX ;ENTER WITH TAC POINTING TO FIRST RETRIEVAL BLOCK OF THE FILE ; TO BE DELETED. + RECLAM: PUSHJ PDP,SETBUF ;FIND SPACE IN USER AREA PUSHJ PDP,RECLM5 ;GET FIRST POINTER BLOCK @@ -2297,6 +2247,7 @@ RECLM2: CAML DAT,TAC1 ;MORE POINTERS IN BLOCK? POP PDP,TAC1 AOJA DAT,RECLM2 ;GO BACK FOR MORE + RECLM4: HLRZ TAC,@TAC1 ;PICK UP POINTER TO NEXT BLOCK JUMPE TAC,RECLM6 ;NO MORE, GO HOME. RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK. @@ -2311,8 +2262,7 @@ RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK. RECLM6: POP PDP,TAC JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE - -;RELEASE UUO. + ;RELEASE UUO. EXTERNAL DAREQ,DAAVAL @@ -2329,8 +2279,7 @@ DFREL: TLO DEVDAT,DSKRLB ;MARK RELEASE (VIA RESET UUO) IN PROGRESS. PUSHJ PDP,DOWNDA ;RESET DAREQ INTERLOCK DFREL1: TLZ DEVDAT,DSKRLB ;CLEAR RELEASE MARKER. JRST WAIT1 - -SUBTTL DISK SPACE ALLOCATION + SUBTTL DISK SPACE ALLOCATION ;DFGETF: GET A FREE DISK BLOCK ;CALL: PUSHJ PDP,DFGETF ; ... RETURNS WITH TAC:=LOGICAL BLOCK# @@ -2362,15 +2311,16 @@ DFGTF2: MOVEI TAC,NUMBIT ;BITS/SAT BLOCK HRRM TAC,@SATPTR ;MARK SAT ENTRY FULL JRST DFGTF1 + ;UPDA - TURN ON THE DISK ALLOCATION INTERLOCK (DAREQ) ; - A CALL TO UPDA MUST PRECEDE SAT BLOCK MANIPULATIONS + UPDA: AOSE DAREQ ;INCREMENT COUNT OF USERS REQUESTING DISK ALLOCATION PUSHJ PDP,DAWAIT ;WAIT UNTIL JOB REACHES TOP OF QUEUE TLO IOS,DAFLG MOVEM IOS,DEVIOS(DEVDAT) ;MAKE THIS JOB AS USING SAT BLOCK POPJ PDP, - -;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT. + ;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT. ; CONSIDER DISK FULL WHEN FEW BLOCKS REMAIN FREE UNLESS THE USER ; IS LOGGING IN OR USING A NON-SHARABLE RESOURCE. @@ -2389,12 +2339,12 @@ SATGT1: HRRZ TAC, 0(TAC1) ;GET WLBIT + BLOCKS USED PUSHJ PDP,SATCNT ;NO. COUNT # FREE ADDI TAC1,SENTSZ ;NEXT SAT ENTRY CAIL AC1,JOBN ;ENOUGH SPACE ACCUMULATED? - JRST SATGT2 ;YES - READ A SAT BLOCK CAIGE TAC1,SATTOP ;END OF ENTRIES? JRST SATGT1 ;NO. CONTINUE JUMPE AC1,DSKFUL ;IF NONE FOUND DISK IS REALLY FULL + ;THERE ARE JOBN OR FEWER DISK BLOCKS AVAILABLE. ;GIVE THEM OUT ONLY IN HARDSHIP CASES LDB TAC,PJOBN @@ -2403,8 +2353,7 @@ SATGT1: HRRZ TAC, 0(TAC1) ;GET WLBIT + BLOCKS USED TLNE IOS,UBFS+AUFLG ;DOES USER HAVE MONITOR BUFFER OR IS HE ALTERING UFD? JRST SATGT2 ;YES TO EITHER. GIVE HIM A BLOCK ANYWAY. DSKFUL: TLNE IOS,UBFS+AUFLG - JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD - + JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD PUSHJ PDP,DOWNDA ;RESET ALLOCATION INTERLOCK PUSHJ PDP,HNGSTP ;PRINT "DSK OK?" PUSHJ PDP,UPDA ;IF USER TYPE "CONT" WE TRY AGAIN @@ -2418,8 +2367,7 @@ SATCNT: CAIE TAC,NUMBIT ;IS ENTRY FULL? ADDI AC1,NUMBIT ;MAXIMUM NUMBER SUB AC1,TAC ;LESS NUMBER USED POPJ PDP, - -;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE + ;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE ;CALL TAC:=LOGICAL BLOCK L ; PUSHJ PDP,SETFRE ; ... RETURN @@ -2458,8 +2406,7 @@ SETFR2: SUB TAC,AC1 ;FROM BIT# (IN RANGE 0 TO NUMBLK-1) SOS @SATPTR ;DECREMENT BLOCKS USED SETOM SATCHG ;SAT BLOCK IN CORE NOT = DISK COPY JRST DOWNDA ;REMOVE ALLOCATION INTERLOCK AND EXIT. - -;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID + ;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID ; A PDL OVRFLW PROBLEM. IT CAN DO SO BECAUSE IT IS NOT RE-ENTRANT, I.E., ONLY ; ONE USER AT A TIME MAY PASS THROUGH HERE BECAUSE OF THE DAREQ INTERLOCK. @@ -2487,6 +2434,7 @@ SATW1: MOVSI IOS,NORELB ;RESET BIT ANDCAB IOS,DEVIOS(DEVDAT) POPJ PDP, + ;SET UP TAC AND TAC1 FOR READ OR WRITE OF SAT BLOCK SATBLK: MOVE TAC,SATPTR @@ -2496,14 +2444,13 @@ SATBLK: MOVE TAC,SATPTR MOVE TAC1,SATBK2 MOVEM TAC1,DSKBUF(DEVDAT) POPJ PDP, - -SUBTTL "FREE" CORE ALLOCATION + SUBTTL "FREE" CORE ALLOCATION ;CLEAR OUT DDB AT RELEASE TIME INTERNAL CLRDDB CLRDDB: MOVEI TAC,DSKDDB ;POINT TO PROTOTYPE DDB -CLRDB1: MOVE TAC1,TAC ;COPY LINK TO TAC1 +CLDDB1: MOVE TAC1,TAC ;COPY LINK TO TAC1 HLRZ TAC,DEVSER(TAC1) ;GET LINK TO NEXT DDB JUMPE TAC,CPOPJ ;0 MEANS END CAIE TAC,(DEVDAT) ;OWNED BY CURRENT USER? @@ -2545,8 +2492,7 @@ SETDD0: MOVEI ITEM,DSKCOR ;GET SOME FREE CORE SETDD1: POP PDP,TAC1 POP PDP,ITEM POPJ PDP, - -;SET TAC1 TO SOME AREA FOR BUFFER. + ;SET TAC1 TO SOME AREA FOR BUFFER. ;GET BUFFER SPACE FROM USER INPUT OR OUTPUT RING IF AVAILABLE ;ASSIGN FROM MONITOR CORE AS A LAST RESORT. ;SET DSKBUF(DEVDAT) TO POINT TO BUFFER. @@ -2584,11 +2530,10 @@ SETBF5: HRLI TAC1,NBLKSZ SETBF6: AOSE MQREQ PUSHJ PDP,MQWAIT - TLO IUOS,UBFU ;BUFFER IN MONITOR CORE + TLO IOS,UBFU ;BUFFER IN MONITOR CORE MOVEI TAC1, MONBUF ;TAC1 POINTS TO MONITOR BUFFER JRST SETBF5 - -;CLEAR THE BUFFER IN FREE STORAGE IF THERE. + ;CLEAR THE BUFFER IN FREE STORAGE IF THERE. EXTERNAL BUFCLR,JOBFF,IADRCK CLRBUF: SCHEDULE @@ -2621,8 +2566,7 @@ CLRBF1: MOVEM IOS,DEVIOS(DEVDAT) SUBI TAC,2 ;SET TAC TO 2ND BUFFER WORD SOS (PDP) ;BUFCLR WILL SKIP RETURN JRST BUFCLR ;CLEAR THE BUFFER - -;FIND THE FIRST ZERO IN A SET OF WORDS + ;FIND THE FIRST ZERO IN A SET OF WORDS ;ENTER WITH LH OF TAC SET TO NEGATIVE OF NUMBER OF WORDS. ; RH OF TAC CONTAINING ADDRESS OF FIRST WORD. ;CALL: PUSHJ PDP,GETZER @@ -2644,7 +2588,7 @@ GETZ2: AOBJP TAC,CPOPJ CAMN DAT,(TAC) JRST GETZ2 -GETZ3: TONE TAC1,(TAC) +GETZ3: TDNE TAC1,(TAC) JRST GETZ1 JRST CPOPJ @@ -2669,9 +2613,7 @@ RESID1: TLO TAC1,32000 FAD TAC1,[0] LSH TAC1,-33 POPJ PDP, - - -;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1 + ;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1 ;IT IS ASSUMED THAT THE CLOCK IS OFF. INTERN GETFCR @@ -2687,8 +2629,7 @@ GTCOR1: MOVEI AC1,LOCORE ;POINT TO THREE WORD FREE CORE ENTRY SUBI TAC1,4 ;SYNCHRNIZE ADD TAC1,LOCORE ;FORM CORE ADDRESS POPJ PDP, - -INTERNAL GETBIT + INTERNAL GETBIT ;SEARCH THROUGH A TABLE TO FIND A SERIES OF ZERO-BITS. @@ -2707,7 +2648,6 @@ GETBIT: PUSH PDP,[-1] ;INITIALIZE LARGEST HOLD FOUND SO FAR MOVEM TAC1,1(AC1) ;SAVE THE SPOT MOVEM TAC,2(AC1) PUSH PDP,TAC - PUSH PDP,TAC1 GTBIT1: AOS DAT ;INCREMENT SIZE OF HOLD BY 1 (GETZER LEFT DAT=-1) @@ -2741,6 +2681,7 @@ GTBIT3: ORM TAC1,(TAC) GTBIT4: POP PDP,TAC1 POP PDP,TAC AOS -2(PDP) + HRRZS TAC SUBI TAC,-1(AC2) PUSHJ PDP,RESIDU @@ -2754,8 +2695,7 @@ GTBIT6: POP PDP,TAC POP PDP,TAC1 AOS -1(PDP) ;SIZE OF LARGEST HOLD MUST BE ADJUSTED JRST GTBIT5 - -;FREE A FOUR WORD SECTION OF CORE. + ;FREE A FOUR WORD SECTION OF CORE. ;ENTER WITH ADDRESS IN TAC INTERNAL CLCOR1 @@ -2808,8 +2748,7 @@ CLRB5: POP PDP,TAC1 CLRB2: MOVEM TAC1,1(AC1) CLRB3: MOVEM TAC,2(AC1) POPJ PDP, - -SUBTTL QUEUEING AND INTERRUPT PROCESSING + SUBTTL QUEUEING AND INTERRUPT PROCESSING ;PUT A REQUEST IN THE USER QUEUE. ;ENTER AT QIN FOR INPUT. QOUT FOR OUTPUT. ;CALLED AT BOTH INTERRUPT AND UUO LEVELS @@ -2838,9 +2777,7 @@ QOUT: MOVEI TAC1,DEVOAD-DEVIAD(DEVDAT) ;* QIOEND: SCHEDULE ;* POPJ PDP, ;* - - -;PUT A REQUEST IN THE MONITOR QUEUE. + ;PUT A REQUEST IN THE MONITOR QUEUE. ;ENTER AT MQIN FOR INPUT, MQOUT FOR OUTPUT. ;ENTER WITH C(TAC1 0-17) = -SIZE OF BLOCK ; C(TAC1 18-35) = CORE ADDRESS @@ -2859,7 +2796,6 @@ MQOUT: HRLZ TAC1,DEVDAT ; LOSS ON THE DISK > HRLI TAC,TRIES - MOVSM TAC,DSKCNT(DEVDAT);STASH AWAY BLOCK #, ERROR COUNT. PUSHJ PDP,SETACT ;SET IOACT NOSCHEDULE @@ -2883,8 +2819,7 @@ MQOUT: HRLZ TAC1,DEVDAT TRNN AC1,IODERR!IODTER!IOIMPM AOS (PDP) ;NO, SKIP RETURN POPJ PDP, - -;* + ;* ;* EVERYTHING FROM HERE THRU SETDUN CALLED AT INTERRUPT LEVEL ;* ;ROUTINE CALLED BY INTERRUPT IN DISK. @@ -2898,9 +2833,10 @@ EXTERNAL MQREQ,MQAVAL,DFRED,DFWRT EXTERNAL JBTADR EXTERNAL MQTOP,MQUEUE + DFINT: IFN FTSWAP,< - EXTERNAL SQREQ,SERA,SOGO,SWPINT + EXTERNAL SQREQ,SERA,SQGO,SWPINT MOVE TAC,SERA ;*WAS THAT A SWAPPING JOB? TLNE TAC,200000 ;* JRST SWPINT ;*YES @@ -2929,7 +2865,7 @@ DFINTA: AOS DEVACC(DEVDAT) ;INCREMENT POINTER TO RETRIEVAL POINTER MOVEI TAC1,BLKSIZ HRRM TAC1,@TAC - IFG CHKCNT,< + IFG CHKCNT,< MOVE TAC,DEVOAD(DEVDAT) TLNE TAC,CKSUPR JRST DINT0B @@ -2948,7 +2884,6 @@ DINT0B: SKIPA DFINT1: PUSHJ PDP,DFOUTX ;CHECK FOR MORE OUTPUT SETZM RUNUSR - JRST DFINT4 DINT1A: HRRZ TAC,DEVACC(DEVDAT) ;WRITE-LOCK FOUND, SET WLBIT @@ -2973,13 +2908,13 @@ DFINT3: HRRM IOS,DSKCNT(DEVDAT) ;SAVE ANY ERRORS CAIL TAC,MQTOP MOVEI TAC,MQUEUE MOVEM TAC,MOPTR ;FALL THROUGH TO DFINT4 - + ;DETERMINE NEXT TRANSFER TO MAKE ACCORDING TO PRIOROTY ; 1) SWAPPING 2) MQ I/O 3) BUFFERED MODE I/O DFINT4: MOVEM IOS,DEVIOS(DEVDAT) ;CLEAR IOACT DINT4A: IFN FTSWAP,< SKIPE SQREQ ;SWAPPING JOB WAITING? - JRST SOGO ;YES,START IT + JRST SQGO ;YES,START IT > INTERNAL DINT4B @@ -2990,7 +2925,7 @@ DINT4B: SKIPE @MOPTR ;MONITOR JOB WAITING? JRST FINDV ;YES. SETZM DFBUSY ;NO. TURN OFF BUSY FLAG POPJ PDP, ;EXIT INTERRUPT - + ;FIND A WAITING USER FINDV: HRRZ DEVDAT,DDBPTR @@ -3036,8 +2971,7 @@ USRGO: MOVSM DEVDAT,RUNUSR ;SAVE DEVDAT FOR USE AT DFINT USRGO3: HRRI TAC1,@DEVOAD(DEVDAT) ;GET ADDRESS OF OUTPUT BUFFER AOJA TAC1,DFWRT ;FORM IOWD AND WRITE - - + ;START UP A MONITOR READ OR WRITE MONGO: MOVS ITEM,@MOPTR ;XWD CORE ADDRESS, SAVED DEVDAT @@ -3074,8 +3008,7 @@ SETDUN: ;* TLZE IOS,IOW ;* JRST SETIOD ;* POPJ PDP, ;* - -SUBTTL ERRORS, SUBROUTINES. + SUBTTL ERRORS, SUBROUTINES. ;ERROR ROUTINES CALLED FROM UUO LEVEL EXTERN EXCALP,ERRPTU,TPOPJ @@ -3127,16 +3060,15 @@ DFER11: MOVEI TAC,NOFILE DFER12: MOVEI TAC,0 PUSH PDP,TAC ;ADD SOMETHING TO BE REMOVED (SINCE SETLE NOT CALLED) JRST DFERRY - -WERA: MOVSI IOS,NORELB + WERA: MOVSI IOS,NORELB ANDCAB IOS,DEVIOS(DEVDAT) ERRORS + RERA: MOVSI IOS,NORELB ANDCAB IOS,DEVIOS(DEVDAT) ERRORS - -;CALLED AT BOTH INTERUPT AND UUO LEVELS + ;CALLED AT BOTH INTERUPT AND UUO LEVELS ;COMPUTE CHECK-SUM ;ENTER WITH C(TAC 18-35) SET TO BUFFER ADDRESS ;RETURN WITH C(TAC1)SET TO ONES COMPLEMENT SUM IN RH. @@ -3189,8 +3121,7 @@ CHKSM2: AOBJN TAC,CHKSM1 ;LOOP UNTIL DONE ADDI TAC1,1 ;YES BRING IT AROUND POPJ PDP, > - -;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE, + ;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE, ; OTHERWISE NEGATIVE BLOCK COUNT). ; ENTER WITH SIZE OF CURRENT BLOCK IN TAC1 UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS @@ -3201,8 +3132,7 @@ UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS HRRZ TAC1,DEVCNT(DEVDAT) ;*PICK UP PREVIOUS MAXIMUM FILE SIZE OF COMPARISON. TRNE TAC1,400000 ;*PREVIOUS MAXIMUM SIZE GREATER THAN 2 EXP 17 WORDS? JRST UPDVC2 ;*YES, THEN COMPARE AND SAVE NEGATIVE BLOCK COUNTS - TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED - + TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED ;* 2EXP17 WORDS? TRNE TAC,40000 ;* JRST UPDVC1 ;*YES, GO SAVE NEGATIVE BLOCK COUNT. @@ -3225,8 +3155,8 @@ UPDVC2: ADDI TAC,BLKSIZ-1 ;*CONVERT POSITIVE WORD COUNT TO NEGATIVE HRRM TAC,DEVCNT(DEVDAT) ;*STORE NEW MAXIMUM FILES SIZE ONLY IF PREVIOUS ;* MAXIMUM EXEEDED. POPJ PDP, ;* + ;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE. -;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE. WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER. PUSHJ PDP,SETFRE ;FREE THE BLOCK @@ -3235,7 +3165,8 @@ WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER. ;SET WRITE-LOCK INDICATION IN A SAT ENTRY. ;ENTER WITH A BLOCK NUMBER IN TAC. -SETWL: MOVEI TAC1,SETENT ;* + +SETWL: MOVEI TAC1,SATENT ;* JRST .+2 ;* SETWL1: ADDI TAC1,SENTSZ ;* HLRZ ITEM,@TAC1 ;*IS THE BLOCK IN THIS SAT ENTRY? @@ -3245,6 +3176,4 @@ SETWL1: ADDI TAC1,SENTSZ ;* MOVEI ITEM,WLBIT ;* ORM ITEM,@TAC1 ;* POPJ PDP, ;* - -DSKSR: END - + DSKSR: END