TITLE SALVATION TS==0 ;NZ RUN IN TS FOR DEBUGGING ZR=0 A=1 B=2 C=3 D=4 N=5 I=6 Q=7 H=10 TT=11 T=12 W=13 U=14 J=15 K=16 P=17 MEMSIZ==1000000 SA==100*2000 NLPT==464 ;FILE SYSTEM PARAMETERS ;PHYSICAL CHARACTERISTICS NCYLS==200. ;# CYLINDERS NORMALLY USED XCYLS==3 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC. NHEDS==20. ;# TRACKS/CYLINDER NSECS==2 ;# BLKS/TRK NCBLKS==NHEDS*NSECS ;# BLKS/CYL NBLKS==NCYLS*NHEDS*NSECS ;TOTAL # REG BLKS XBLKS==XCYLS*NHEDS*NSECS ;# XTRA BLKS ;EXTRA 4 WORDS IN BLOCK XWBWC==0 ;RANDOM #S XWBLK==1700,, ;BP TO BLK # FLD XWAWC==171200,, ;BP TO ACTIVE WD CNT XWSYSN==1 ;SYSTEM NAME XWFN1==2 ;FILE NAME XWFN2==3 ;" ;MFD INFO MFDBLK==NBLKS/2-1 ;LOC ON DISK ;RANDOM INFO MDNUM==0 ;ASCENDING DIR NUM MDNAMP==1 ;PNTR TO ORG OF NAME AREA MDYEAR==2 ;CURRENT YEAR MPDOFF==3 ;DE-CORIOLIS CLOCK OFFSET MDCHK==5 ;THIS WORD MUST BE M.F.D. (FOR CHECKING) LMIBLK==6 ;TOTAL STG USED BY HACKS LIKE THIS ;USER NAME BLKS FROM C(MDNAMP) TO END LMNBLK==2 ;# WDS/BLK MNUNAM==0 ;6BIT USER NAME ;TUT INFO TUTBLK==MFDBLK-1 ;LOC ON DISK TUTBYT==4 ;SIZE OF BYTES TUTLK==1_-1 ;HIGHEST CODE MEANS LOCKED OUT QTUTP==1777 ;ALLOC PNTR ADV BY CYLS QPKNUM==1776 ;PACK # QPKID==1775 ;PACK ID QSWAPA==1774 ;SWAPPING ALLOCATION LTIBLK==4 ;STG FOR RANDOM INFO ^ ;UFD INFO NUDSL==200. ;# UFDS SPACE RESERVED ;RANDOM INFO UDESCP==0 ;FS PNTR TO DESC AREA UDNAMP==1 ;PNTR TO ORG OF NAME AREA UDNAME==2 ;USER NAME (FOR CHECKING) UDDESC==11. ;FIRST LOC AVAIL FOR DESC ;UFD DESCRIPTORS UDTKMX==12. ;HIGHEST "TAKE N" CODE UDWPH==31. ;PLACE HOLDER ON WRITE (OR NULL FILE) NXLBYT==2 ;# ADDITIONAL BYTES FOR LOAD ADDR ;NAME AREA DATA LUNBLK==5 ;WDS/NAME BLK UNFN1==0 ;FIRST FN UNFN2==1 ;SECOND FN UNRNDM==2 ;ALL KINDS OF RANDOM INFO UNDSCP==1500,, ;PNTR TO DESC UNPKN==150500,, ;PACK # UNLINK==1 ;LINK BIT UNWRIT==4 ;OPEN FOR WRITING UNMARK==10 ;GC MARK BIT UNCDEL==20 ;DEL WHEN CLOSED UNPDEL==40 ;DEL FROM UNMOUNTED PACK DELBTS==UNCDEL+UNPDEL ;DELETED -- IGNORE UNIGFL==DELBTS+UNWRIT ;BITS TO IGNORE FILE UNDBLK==301300,, ;BLK # DESC BLK (0 => NONE) UNDUMP==400000 ;HAS BEEN DUMPED UNDATE==3 ;DATE ETC. UNYMD==1200,, ;COMPACTED TIME OF CREATION UNREFT==121000,, ;DAYS SINCE CREATION LAST REF IF1 [ IFG NUDSL*LMNBLK+LMIBLK-2000,[PRINTX /MFD LOSES /] IFG NBLKS/<36./TUTBYT>+LTIBLK-2000,[PRINTX /TUT LOSES /] ] .INSRT SYSENG;DSK > DEFINE QCOPY A,B DCOPY A(-B_2&37774)!TERMIN NUNITS==3 IFN TS,[ NUNITS==3 TYIC==1 TYOC==2 LPTC==3 QIN==4 ] DEFINE CONC A,B A!B!TERMIN DEFINE STRA C/ MOVE A,[440600,,[SIXBIT "C!!"]] TERMIN DEFINE TYP B/ PUSH P,A STRA B PUSHJ P,STYP POP P,A TERMIN DEFINE LPR B/ PUSH P,A STRA B PUSHJ P,SLPT POP P,A TERMIN IFE TS,[ LOC SA JRST GOGO COPY: JSR INIT PUSHJ P,CRR TYP COPY BLOCK FROM UNIT # PUSHJ P,NTYI JRST COPY CAIL A,NUNITS JRST COPY MOVEM A,FROM MOVE I,A PUSHJ P,RESET CP1: PUSHJ P,CRR TYP BLOCK # PUSHJ P,OTYI CAIL A,NBLKS+XBLKS JRST CP1 MOVEM A,FMBLK' CP2: PUSHJ P,CRR TYP ONTO UNIT # PUSHJ P,NTYI JRST CP2 CAIL A,NUNITS JRST CP2 MOVEM A,TOU MOVE I,A PUSHJ P,RESET PUSHJ P,CRR CP3: TYP BLOCK # PUSHJ P,OTYI CAIL A,NBLKS+XBLKS JRST CP3 MOVEM A,TOBLK' MOVEI A,TUT MOVE J,FMBLK MOVE I,FROM PUSHJ P,READ JUMPL T,CPERR JUMPL TT,CPERR MOVEI A,TUT MOVE J,TOBLK PUSHJ P,WRITT JRST DDT ] OTYI: CLEARB A,B OTY1: ADD B,A LSH B,3 PUSHJ P,NTYI JRST .+2 JRST OTY1 LSH B,-3 MOVE A,B POPJ P, CPERR: TYP READ ERROR PUSHJ P,CRR JRST DDT DUP1: PUSHJ P,CRR PUSHJ P,STYP PUSHJ P,NTYI JRST DUP1 CAIL A,NUNITS JRST DUP1 MOVE I,A PUSHJ P,RESET DUP2: MOVEM A,FROM TO: PUSHJ P,CRR TYP ONTO DRIVE # PUSHJ P,NTYI JRST TO CAIL A,NUNITS JRST TO MOVE I,A PUSHJ P,RESET MOVEM A,TOU PUSHJ P,CRR POPJ P, IFE TS,[ DUP: JSR INIT STRA DUPLICATE DISK FROM DRIVE # PUSHJ P,DUP1 MOVE I,FROM DPB I,[DUNFLD CYLRIR] MOVE A,PKNUM(I) MOVE I,TOU DPB I,[DUNFLD CYLRIW] CAME A,PKNUM(I) JRST DUPLUZ MOVEI J,NCYLS+XCYLS-1 MOVEI A,CYLBUF DLUP: MOVE I,FROM PUSHJ P,READCY MOVE I,TOU PUSHJ P,WRITCY SOJGE J,DLUP MOVEI T,CYLRIR PUSHJ P,RW0 JRST DDT DUPLUZ: TYP PACK # DFRS PUSHJ P,CRR JRST DDT READCY: SKIPA T,[DREADC+DUNENB] WRITCY: MOVSI T,(DWRITC+DUNENB) DPB I,[DUNFLD T] DPB J,[DCYL T] CYL1: SKIPLE TT,PKNUM(I) JRST CYL2 PUSH P,T PUSHJ P,RESET POP P,T JRST CYL1 CYL2: CAIL J,NCYLS MOVEI TT,0 DPB TT,[DPKID T] MOVEM T,CYLCOM DPB A,[DCCA CYLCOM+2] MOVEI T,CYLCOM RW0: HRRM T,DGO JRST RW1 CYLCOM: 0 DALU+DLDBWC+DLLB -2004*NCBLKS(3) DCOPY . DHLT CYLRIR: DREAD+DUNENB DCOPY CYLBUF(-LRIBLK_2&37774) CYLRIW: DWRITE+DUNENB DCOPY CYLBUF(-LRIBLK_2&37774) DHLT ] MAGOP: AOSE ITAPE JRST MTR1 HRROI A,MAGHD PUSHJ P,MREAD MOVE A,MAGHD TRNE A,-1 JRST MBDTHD CAMGE A,[-LTHBLK,,] JRST MBDTHD ADD A,[1,,THBLK+1] PUSHJ P,MREAD TYP TAPE # HLRZ A,THTPN PUSHJ P,DPT PUSHJ P,CRR MTR1: HRROI A,MAGHD PUSHJ P,MREAD MOVE A,MAGHD TRNE A,-1 JRST MBADHD CAMGE A,[-LMHBLK,,0] JRST MBADHD ADD A,[1,,MHBLK+1] PUSHJ P,MREAD JRST POPJ1 MBADHD: LPR BAD HEADER PUSHJ P,LCRR PUSHJ P,IGFIL JRST MTR1 MBDTHD: TYP BAD TAPE HEADER JRST DDT TRAN: PUSHJ P,REW TRAN1: SETOM PRINTF JSR INIT PUSHJ P,CRR MOVEI I,0 TRAN2: SKIPGE QACT(I) PUSHJ P,RESET CAIGE I,NUNITS-1 AOJA I,TRAN2 PUSHJ P,DUP2 IFE TS,[ MOVEI A,TUT MOVEI J,TUTBLK PUSHJ P,READT MOVEI A,D1 MOVEI J,MFDBLK PUSHJ P,READT TNAML: PUSHJ P,MAGOP JRST TMDON MOVE A,MHSNM PUSHJ P,SIXLPT PUSHJ P,LSPAC MOVE A,MHFN1 PUSHJ P,SIXLPT PUSHJ P,LSPAC MOVE A,MHFN2 PUSHJ P,SIXLPT PUSHJ P,LSPAC CLEARM FERRS MOVE B,MHSNM MOVE A,D1+MDNAMP SETZM IBLK TMLKP: CAIL A,2000 JRST TNEWU SKIPN C,D1+MNUNAM(A) JRST TMLKZ CAMN B,C JRST TOLDU TMLKL: ADDI A,LMNBLK JRST TMLKP TMLKZ: MOVEM A,IBLK JRST TMLKL TOLDU: MOVEI J,2*NUDSL-2000(A) LSH J,-1 MOVEM J,UFDTA MOVEI A,DUSRD IFN TS, .VALUE PUSHJ P,READT CAME B,DUSRD+UDNAME JRST 4,. JRST TOLDUR TNEWU: MOVE A,[DUSRD,,DUSRD+1] SETZM DUSRD BLT A,DUSRD+1777 MOVEM B,DUSRD+UDNAME MOVEI A,2000 MOVEM A,DUSRD+UDNAMP SKIPE A,IBLK JRST .+3 MOVNI A,LMNBLK ADDB A,D1+MDNAMP MOVEM B,D1+MNUNAM(A) MOVEI J,2*NUDSL-2000(A) LSH J,-1 MOVEM J,UFDTA TOLDUR: MOVE B,MHFN1 MOVE C,MHFN2 MOVE A,DUSRD+UDNAMP SETZM IBLK TULKP: CAIL A,2000 JRST TNEWF MOVSI T,UNCDEL TDNE T,DUSRD+UNRNDM(A) JRST TULKD SKIPN T,DUSRD+UNFN1(A) JRST TULKZ CAME B,T JRST TULKL CAMN C,DUSRD+UNFN2(A) JRST TOLDF TULKL: ADDI A,LUNBLK JRST TULKP TULKZ: SKIPN DUSRD+UNFN2(A) TULKD: MOVEM A,IBLK JRST TULKL TOLDF: LPR EXISTS PUSHJ P,LCRR PUSHJ P,IGFIL JRST TNAML IGFIL: MOVE A,[-2000,,FDBUF] PUSHJ P,MREAD SKIPN EOUF JRST IGFIL CLEARM EOUF POPJ P, TNEWF: SKIPE A,IBLK JRST TNEWCK MOVNI A,LUNBLK ADDB A,DUSRD+UDNAMP TNEWCR: MOVE T,DUSRD+UDESCP IDIVI T,6 CAIL T,-UDDESC(A) JRST 4,. MOVEM B,DUSRD+UNFN1(A) MOVEM C,DUSRD+UNFN2(A) MOVEM B,WXWDS+XWFN1 MOVEM C,WXWDS+XWFN2 MOVE B,DUSRD+UDNAME MOVEM B,WXWDS+XWSYSN SETZM WXWDS+XWBWC MOVE B,DUSRD+UDESCP DPB B,[UNDSCP DUSRD+UNRNDM(A)] MOVE B,MHDATE MOVEM B,DUSRD+UNDATE(A) MOVE B,TUT+QPKNUM DPB B,[UNPKN DUSRD+UNRNDM(A)] SETZM CBYT' SETZM OBLKS' SETZM IBLK' SETZM LBLK' TBLKL: TBLKL1: MOVE A,[-2000,,FDBUF] PUSHJ P,MREAD JUMPE T,TBLKL2 DPB T,[XWAWC WXWDS+XWBWC] MOVE T,LBLK DPB T,[XWBLK WXWDS+XWBWC] AOS IBLK PUSHJ P,WRBLK TBLKL2: SKIPN EOUF JRST TBLKL SETZM EOUF JRST TBDON TNEWCK: SKIPN DUSRD+UNFN1(A) SKIPE DUSRD+UNFN2(A) JRST 4,. JRST TNEWCR TBDON: PUSHJ P,EBYT MOVEI J,UDWPH SKIPN LBLK PUSHJ P,BYDEP MOVEI J,0 PUSHJ P,BYDEP JRST TMDON READC: JUMPL T,[JRST 4,.] POPJ P, READFN: SKIPA I,FROM READT: MOVE I,TOU PUSHJ P,READ JUMPL TT,[JRST 4,.] JRST READC WRBLK: MOVE J,TUT+QTUTP AOS TUT+QTUTP MOVE A,J CAIL J,NBLKS JRST WRLUZ SETZM TUTLUZ IDIVI A,36./TUTBYT ADD A,QTTBL(B) LDB B,A JUMPN B,WRBLK MOVEI B,1 DPB B,A MOVEI A,FDBUF MOVEM J,LBLK PUSHJ P,WRITT SUB J,OBLKS ADDM J,OBLKS CAIN J,1 JRST WRBC PUSHJ P,EBYT CAIG J,UDWPH-UDTKMX JRST WRBS MOVE J,OBLKS LSHC J,-NXLBYT*6 MOVEI U,NXLBYT+1 ADDI J,UDWPH+1 WRBL: PUSHJ P,BYDEP LSHC J,6 SOJG U,WRBL POPJ P, WRLUZ: SETCMB J,TUTLUZ' JUMPE J,[JRST 4,.] MOVE J,TUT+QSWAPA MOVEM J,TUT+QTUTP JRST WRBLK WRBS: ADDI J,UDTKMX-1 BYDEP: MOVE T,DUSRD+UDESCP AOS DUSRD+UDESCP IDIVI T,6 ADDI T,UDDESC CAML T,DUSRD+UDNAMP JRST 4,. ADDI T,DUSRD HLL T,QBTBL(W) DPB J,T POPJ P, WRBC: AOS J,CBYT CAIGE J,UDTKMX POPJ P, EBYT: PUSH P,J SKIPN J,CBYT JRST POPJJ PUSHJ P,BYDEP SETZM CBYT POPJJ: POP P,J POPJ P, TMDON: MOVE A,TUT+QTUTP IDIVI A,NCBLKS IMULI A,NCBLKS MOVEM A,TUT+QTUTP MOVEI J,TUTBLK MOVEI A,TUT PUSHJ P,WRITT MOVEI I,0 TMDON2: SKIPL QACT(I) JRST TMDON1 MOVEI J,MFDBLK MOVEI A,D1 PUSHJ P,WRITE MOVE J,[WXWDS,,WXWDS+1] SETZM WXWDS BLT J,WXWDS+3 MOVE J,UFDTA MOVEI A,DUSRD PUSHJ P,WRITE TMDON1: CAIGE I,NUNITS-1 AOJA I,TMDON2 SKIPN FERRS LPR OK PUSHJ P,LCRR JRST TNAML IFE TS,[ UCOP: JSR INIT STRA COPY DIRS FROM DRIVE # PUSHJ P,DUP1 MOVEI A,D0 MOVEI J,MFDBLK PUSHJ P,READFN PUSHJ P,WRITT MOVEI Q,2000 UCOPL: SUBI Q,LMNBLK CAMGE Q,D0+MDNAMP JRST DDT SKIPN B,D0(Q) JRST UCOPL MOVEI J,2*NUDSL-2000(Q) LSH J,-1 MOVEI A,USRD PUSHJ P,READFN CAME B,USRD+UDNAME JRST 4,. PUSHJ P,WRITT JRST UCOPL ] ZAP: JSR INIT PUSHJ P,ZAP1 TYP INIT PACK ON DRIVE # PUSHJ P,NTYI JRST ZAP CAIL A,NUNITS JRST ZAP PUSHJ P,CRR MOVEM A,TOU MOVE I,A PUSHJ P,RESET MOVE A,[WXWDS-1,,WXWDS] BLT A,WXWDS+3 MOVSI J,-NBLKS-XBLKS MOVEI A,MFD ZAPL: PUSHJ P,WRITE JUMPL T,ZAPLUZ AOBJN J,ZAPL MOVE A,PKNUM(I) MOVEM A,TUT+QPKNUM DATAO DC0,[DJMP DZAP] CONSZ DC0,DSSACT JUMPA .-1 CONSO DC0,DSSERR JRST MARK69 ZAPLUZ: TYP LOSE PUSHJ P,CRR JRST DDT ZAP1: CONO DC0,DCCSET+DCDENB MOVE A,[MFD,,MFD+1] SETZM MFD BLT A,MFD+1777 PUSHJ P,TUTINI PUSHJ P,CRR POPJ P, DZAP: DWRITE DCSKIP (-LRIBLK_2&37774) DHLT MARK: JSR INIT PUSHJ P,ZAP1 TYP FORMAT PACK ON DRIVE # PUSHJ P,NTYI JRST MARK CAIL A,NUNITS JRST MARK PUSHJ P,CRR CONO DC1,(A) MOVEM A,TOU MOVE I,A PUSHJ P,RESET CONSO DC1,DFUNSF\DOFFL JRST MARK1 TYP DRIVE OK? CRDDT: PUSHJ P,CRR JRST DDT MARK1: MOVE A,[DSPC+DSCWIM+DSWIDX+DSWNUL] MOVEM A,CYLBUF MOVEI D,CYLBUF+1 PUSHJ P,RDLAT JUMPE A,.-1 MARK1A: PUSHJ P,RDLAT JUMPE A,MARK1B MOVE B,A JRST MARK1A MARK1B: IMULI B,1000 IDIVI B,36. AOJ B, MOVEM B,MAXT' PUSHJ P,STOBLK MOVE J,MAXT IDIVI J,NSECS CAIL K,NSECS/2 AOJ J, SUBI J,3+3+7+3011 MOVEI Q,NSECS MARK1C: MOVEI B,(D) HRLI B,HBLK ADDI D,3 BLT B,-1(D) MOVNI B,-NSECS(Q) IMULI B,3 ADDI B,DHEDR HRRM B,-2(D) MOVEI B,103. MOVE A,[QCOPY EZERS,15.,] PUSHJ P,STBLK SOJLE Q,MARK1D MOVE B,J PUSHJ P,STOBLK JRST MARK1C MARK1D: MOVE A,[QCOPY EONES,3,] MOVEM A,(D) AOJ D, MOVSI A,(DOPR+DOHXFR) MOVEM A,(D) MOVEM D,RIWP' ADDI D,2 MOVE B,J SUBI B,3+3+7+LRIBLK*3/2+3 LSH B,-1 SUBI B,3*3 PUSHJ P,STOBLK MOVEI B,(D) HRLI B,WRTRI ADDI D,5 BLT B,-1(D) MOVSI A,(DJMP) ADDI A,(D) MOVE B,RIWP MOVEM A,1(B) MOVEI B,(D) MOVEM B,ENDP' AOS ENDP HRLI B,RCBLK ADDI D,5 BLT B,-1(D) MOVEI B,-3(D) HRRM B,-2(D) TYP PACK NO = PUSHJ P,OTYI PUSHJ P,CRR MOVE I,TOU MOVEM A,PKNUM(I) MOVEM A,TUT+QPKNUM MOVE I,[440300,,RIHEDR] PUSHJ P,ENCI MOVEI I,RIHED0 PUSHJ P,HCOMP MOVEI J,/NSECS-1 MOVEM J,TRKN' MARK2: MOVEI K,5 MOVEM K,NTRYS' SETZM DHED0 CAIL J,NBLKS/NSECS JRST MARK2C MOVE A,TUT+QPKNUM DPB A,[DPKID DHED0] DPB A,[DPKID @ENDP] JUMPN J,MARK2C MOVE B,RIWP MOVE A,[QCOPY EONES,3,] MOVEM A,(B) MOVEM A,1(B) MARK2C: IDIVI J,NHEDS IRP A,,[CYLBUF,@ENDP,DHED0] DPB J,[DCYL A] DPB K,[DSURF A] TERMIN MOVEI W,0 DPB W,[DHNXAD DHED1] MOVEI W,1 CAIN K,NHEDS-1 MOVEI W,2 CAIE J,NCYLS-1 CAIN J,NCYLS+XCYLS-1 TRO W,1 MOVE I,[440300,,DHEDR] PUSHJ P,ENCI MOVEI I,DHED0 MOVEI Q,NSECS MARK2B: CAIN Q,1 DPB W,[DHNXAD DHED1] PUSHJ P,HCOMP AOS DHED0 SOJG Q,MARK2B MARK2A: CONO DC0,DCCSET\DCDENB DATAO DC0,[DJMP CYLBUF] MOVE A,[DWLUP,,14] BLT A,16 JRST 14 MARK2D: CONSO DC0,DSSERR JRST MARK4 CONSZ DC1,DCPERR\DNXM\DDOBSY JRST MARK3A CONSZ DC1,DPROT JRST MARK3B CONSZ DC1,DOFFL\DFUNSF JRST MARK3C CONSO DC1,DWTHER\DCKSER\DOVRRN\DRCER\DRLNER JRST MARK3D MTROV: SOSLE NTRYS JRST MARK2A CONSZ DC1,DOVRRN JRST MARK3A TYP DISK BAD JRST CRDDT DWLUP: CONSZ DC0,DSSACT JRST 14 JRST MARK2D MARK3A: TYP MACHINE LOSSAGE JRST CRDDT MARK3B: TYP NOT WRT ENABLED JRST CRDDT MARK3C: TYP DRIVE LOSSAGE JRST CRDDT MARK3D: TYP CONTROLLER LOSSAGE JRST CRDDT MARK4: SOSL J,TRKN JRST MARK2 MARK69: TYP PACK ID = PUSHJ P,6TYI PUSHJ P,CRR MOVEM B,TUT+QPKID TYP SWAPPING ALLOC = PUSHJ P,OTYI PUSHJ P,CRR MOVEM A,TUT+QSWAPA MOVEI A,2000 MOVEM A,MFD+MDNAMP MOVEI A,MFD MOVEI J,MFDBLK PUSHJ P,WRITT MOVEI A,TUTLK MOVE B,[440000+TUTBYT_6,,TUT] MOVEI C,NUDSL IDPB A,B SOJG C,.-1 MOVE D,[-LSBTAB,,SBTAB] MARK5: MOVE B,(D) IDIVI B,36./TUTBYT ADD B,QTTBL(C) DPB A,B AOBJN D,MARK5 MOVE A,TUT+QSWAPA CAIGE A,NUDSL MOVEI A,NUDSL IDIVI A,NCBLKS IMULI A,NCBLKS MOVEM A,TUT+QTUTP MOVEI A,TUT MOVEI J,TUTBLK PUSHJ P,WRITT JRST DDT HCOMP: SETOM HPAR' MOVEI J,(I) HRLI J,-2 HCOMP1: MOVEI B,14. MOVE A,(J) XORM A,HPAR LSH A,-2 SOJG B,.-2 AOBJN J,HCOMP1 MOVE B,(I) PUSHJ P,ENCH MOVE B,HPAR ANDI B,3 LSH B,20. XORB B,1(I) PUSHJ P,ENCH MOVSI B,770000 HCOMP2: TDNN B,DSKBP POPJ P, PUSHJ P,ENCDO JRST HCOMP2 ENCO: SKIPA A,C1 ENCZ: MOVEI A,0 ENC: ANDI A,1 HRRZ T,ENCS' JRST @ENCT(T) ENCT: ENC1 ENC2 ENC1 ENCZ2 ENCDO: SKIPA A,[3] ENCDZ: MOVEI A,0 ENCD: ANDI A,3 HRRZ T,ENCS JRST @ENCDT(T) ENCDT: ENC2A [JRST 4,.] ENCZ2A [JRST 4,.] ENC1: HRLM A,ENCS ENC1A: AOS ENCS POPJ P, ENC2: ROT A,-1 HLR A,ENCS ROT A,2 JRST ENC2B ENC2A: LSH A,1 AOS ENCS ENC2B: JUMPE A,ENC1A C1: TRO A,1 IDPB A,DSKBP' ENC3: SETZM ENCS POPJ P, ENCZ2: ROT A,-1 HLR A,ENCS JRST .+2 ENCZ2A: ROT A,-1 ASH A,2 TRO A,2 IDPB A,DSKBP ROT A,2 TRO A,5 IDPB A,DSKBP JRST ENC3 ENCH: LSH B,36.-28. SKIPA C,[14.] ENCW: MOVEI C,18. LSHC A,2 PUSHJ P,ENCD SOJG C,.-2 POPJ P, ENCI: MOVEM I,DSKBP SETZM ENCS POPJ P, RDLAT: CONI DC1,A LDB A,[DSLAT A] RDLAT2: MOVEM A,T CONI DC1,A LDB A,[DSLAT A] CAME A,T JRST RDLAT2 POPJ P, STBLK: MOVEM A,(D) SOJE B,[AOJA D,CPOPJ] HRLI D,1(D) ADDI B,1(D) MOVS D,D EXCH B,D BLT B,-1(D) POPJ P, STOBLK: MOVE A,[QCOPY EONES,LOBLK,] IDIVI B,LOBLK JUMPE B,STOBL3 JUMPE C,STOBL2 CAIL C,3 JRST STOBL2 SOJ B, ADDI C,LOBLK STOBL2: PUSHJ P,STBLK STOBL3: CAIGE C,3 MOVEI C,3 MOVNI C,(C) DPB C,[DCWC A] MOVEM A,(D) AOJA D,CPOPJ 6TYI: MOVE C,[440600,,B] MOVEI B,0 6TYL: PUSHJ P,TYI SUBI A,40 JUMPLE A,CPOPJ TLNE C,770000 IDPB A,C JRST 6TYL HBLK: QCOPY PREAMB,3 QCOPY .,3 QCOPY POSTMB,7 WRTRI: QCOPY PREAMB,3 QCOPY RIHEDR,3 QCOPY POSTMB,7 QCOPY EZERS, QCOPY EONES,3 RCBLK: DALU+DLCC+DLLB -401*NSECS(3) DRCC QCOPY ZERS,4 DJMP+DAOJNC . DHLT LOBLK==60 DHED0: 0 DHED1: -2004&37777 DHEDR: BLOCK 3*NSECS RIHED0: 0 RIHED1: -LRIBLK&37777 RIHEDR: BLOCK 3 EZERS: REPEAT LRIBLK*3/2+3,252525252525 EONES: REPEAT LOBLK+3,-1 PREAMB: -1 -26 655326553265 POSTMB: REPEAT 6,-1 -3 ZERS: BLOCK 4 CONSTA MFDR: MOVEI P,PDL PUSHJ P,CRR ;RECONSTRUCT MFR BY GETTING NAMES FROM UFD'S TYP RECONSTRUCT MFD FROM UNIT # PUSHJ P,NTYI JRST MFDR MOVE I,A PUSHJ P,MFDINN SETOM IMNFLG MOVEI J,0 MFDR1: MOVEI A,TUT PUSHJ P,READ JUMPL T,MFDRL JUMPL TT,MFDRL MOVE B,TUT ;LOOK LIKE LEGIT UFD? TLNE B,-1 JRST MRUFDL ;SHOULD BE F.S. PNTR CAIL B,<2000.-11.>*6 JRST MRUFDL MOVE B,TUT+1 SKIPE TUT+2 TLNE B,-1 JRST MRUFDL ;PNTR TO BEG OF NAME AREA MOVEI B,(J) LSH B,1 ADDI B,2000-LMNBLK*NUDSL MOVE C,TUT+2 ;USER NAME MOVEM C,MFD(B) AOSN IMNFLG MOVEM B,MFD+1 JRST MRUFDW MFDRL: JRST 4,.+1 MRUFDL: JFCL MRUFDW: CAIGE J,NUDSL-1 AOJA J,MFDR1 TYP WRITE? PUSHJ P,TYI CAIE A,"Y JRST DDT MFDWR: MOVEI A,MFD MOVEI J,MFDBLK PUSHJ P,WRITE JRST DDT IMNFLG: 0 MFDINN: CLEARM MFD MOVE A,[MFD,,MFD+1] BLT A,MFD+1777 MOVE A,[SIXBIT /M.F.D./] MOVEM A,MFD+MDCHK POPJ P, IFN TS,POPBAJ: POP P,B POPAJ: POP P,A IFN TS,[RESET:] POPJ P, IFE TS,[ GOGO: SETOM GOGOX' JRST .+2 CHKR: SETZM GOGOX JSR INIT SETOM PRINTF PUSHJ P,CRR TYP SALVATION MOVE A,[.FNAM2] PUSHJ P,T6B PUSHJ P,CRR PUSHJ P,LFORM LPR SALVATION MOVE A,[.FNAM2] PUSHJ P,SIXLPT PUSHJ P,LCRR MOVEI A,NUNITS-1 CLEARM QACT(A) SOJGE A,.-1 SKIPN GOGOX JRST CFIN11 REPEAT NUNITS,SETOM QACT+.RPCNT JRST CFIN1 CFIN11: TYP ACTIVE UNITS ARE: CFIN2: PUSHJ P,NTYI JRST CFIN1 CAIG A,NUNITS SETOM QACT(A) JRST CFIN2 CFIN1: PUSHJ P,CRR MOVEI U,NUNITS-1 SKIPGE QACT(U) PUSHJ P,DUINIT SOJGE U,.-2 SKIPN GOGOX JRST CFIN3 MOVEI A,0 JRST CFIN7 CFIN3: TYP USE MFD FROM UNIT: PUSHJ P,NTYI JRST CFIN8 CAIG A,NUNITS SKIPL QACT(A) JRST CFIN3 JRST CFIN7 CFIN8: MOVEI A,0 MOVEI U,NUNITS-1 CFIN5: SKIPL QACT(U) JRST CFIN4 MOVE I,QMDRO(U) MOVE B,MDNUM(I) CAML A,B JRST CFIN4 MOVE C,U MOVE A,B CFIN4: SOJGE U,CFIN5 MOVE A,C ADDI A,"0 PUSHJ P,TYO SKIPA U,C CFIN7: MOVE U,A MOVEM U,MDSK MOVS A,QMDRO(U) HRRI A,MFD BLT A,MFD+2000-1 SETOM GUDFMD ;USE USR DIRS FROM MASTER DSK CLEARM PRINTF ;NO PRINT CLEARM CKFLSW ;NO CHECK BLOCKS SKIPN GOGOX JRST CFIN10 SETOM GUDFMD JRST CFIN9 CFIN10: SETZM UDPSW PUSHJ P,CRR TYP CHECK FILES FOR CLOBBERED BLOCKS? PUSHJ P,TYI CAIE A,"Y JRST CFIN12 PUSHJ P,CRR TYP UPDATE POINTERS? PUSHJ P,TYI CAIN A,"Y SETOM UDPSW' SETOM CKFLSW CFIN12: PUSHJ P,CRR TYP GET USR DIRS FROM MASTER DSK? PUSHJ P,TYI CLEARM GUDFMD CAIN A,"Y SETOM GUDFMD PUSHJ P,CRR TYP PRINT ALL DIRS? PUSHJ P,TYI CAIN A,"Y SETOM PRINTF CFIN9: MOVE A,[440700,,PBUF] MOVEM A,PBUFP CLEARM BNDFC ;BLOCK # DFRS CNT CLEARM LOSTC SKIPN GOGOX JRST TUTF JRST TUTF4 DUINIT: TYP UNIT # MOVE A,U PUSHJ P,DPT PUSHJ P,TSPAC MOVE I,U PUSHJ P,RESET MOVE A,QMDRO(U) MOVE I,U MOVEI J,MFDBLK PUSHJ P,READ JUMPL T,DUINI1 MOVE A,QTUTO(U) MOVEI J,TUTBLK PUSHJ P,READ JUMPL T,DUINI3 TYP ID IS MOVE I,QTUTO(U) MOVE A,QPKID(I) PUSHJ P,T6B PUSHJ P,TSPAC MOVE A,QPKNUM(I) TYP DISK # PUSHJ P,DPT PUSHJ P,CRR POPJ P, DUINI1: TYP MFD PARITY ERRORS PUSHJ P,CRR JRST DDT DUINI3: TYP TUT PARITY ERRORS PUSHJ P,CRR JRST DDT TUTF1: CAIE A,"A JRST TUTF TUTF4: SETOM ALLDSK CLEARB A,DRNO TUTF3: SKIPGE QACT(A) JRST TUTF2 AOS A,DRNO CAIGE A,NUNITS JRST TUTF3 JRST DDT TUTF: CLEARM ALLDSK PUSHJ P,CRR TYP TUT FOR DRIVE # (A FOR ALL) PUSHJ P,NTYI JRST TUTF1 CAIGE A,NUNITS SKIPL QACT(A) JRST TUTF TUTF2: CLEARM TBLKTD ;TOTAL USER BLOCKS THIS DISK (ALL USERS) CLEARM TBLKAD ;TOTAL USER BLOCKS ALL DISKS ALL USERS MOVEM A,TUTU MOVE A,QTUTO(A) MOVE A,QPKNUM(A) MOVEM A,TUTI PUSHJ P,LFORM LPR TUT FOR DISK # ADDI A,"0 PUSHJ P,LPTR PUSHJ P,LCRR PUSHJ P,CRR PUSHJ P,TUTINI MOVE Q,MFD+MDNAMP ADDI Q,MFD CLEARM USRCNT MFDLUP: CAIL Q,MFD+2000 JRST MFDFIN SKIPE A,MNUNAM(Q) PUSHJ P,USRLUP SKIPN LFILES PUSHJ P,DELUSR ADDI Q,LMNBLK JRST MFDLUP ] TUTINI: CLEARM TUT MOVE A,[TUT,,TUT+1] BLT A,TUT+1777 MOVEI A,TUTLK MOVEI B,NUDSL MOVE D,[440000+TUTBYT_6,,TUT] TUTI1: IDPB A,D ;MARK OUT USER DIR AREA SOJG B,TUTI1 MOVSI D,-LSBTAB TUTI2: MOVE A,SBTAB(D) IDIVI A,36./TUTBYT ADD A,QTTBL(B) MOVEI B,TUTLK DPB B,A ;MARK OUT BLOCK AOBJN D,TUTI2 POPJ P, IFE TS,[ DELUSR: SKIPN MNUNAM(Q) POPJ P, SOS USRCNT CLEARM MNUNAM(Q) LPR NO FILES, USER DIRECTORY DELETED JRST LCRR USRLUP: MOVE K,[440700,,PBUF] MOVEM K,PBUFP' AOS USRCNT PUSHJ P,LFORM CLEARM UFDLOS CLEARM LFILES CLEARM LBLOCKS CLEARM TLBLOCKS PUSH P,Q LPR USER: PUSHJ P,LTAB MOVEM A,USRNAM' PUSHJ P,SIXLPT PUSHJ P,LTAB LPR BLOCK: PUSHJ P,LTAB MOVE J,Q SUBI J,MFD SUBI J,2000-2*NUDSL LSH J,-1 MOVE A,J MOVEM A,DBLK ;SAVE DIRECTORY BLOCK PUSHJ P,LOCT PUSHJ P,LCRR PUSHJ P,LCRR MOVEI A,USRD MOVE I,TUTU SKIPGE GUDFMD MOVE I,MDSK ;USE UFDS FROM MASTER DISK TCHK4: PUSHJ P,READ JUMPL T,TCHK2 TCHK6: JUMPL TT,TCHK3 TCHK8: MOVE Q,USRD+UDNAME CAME Q,USRNAM JRST TCHK5 TCHK1: MOVE Q,[USRD,,DUSRD] BLT Q,DUSRD+1777 ;DUPLICATE USER DIRECTORY MOVEI Q,2000-5+USRD MOVEI J,USRD ADD J,UDNAMP(J) PUSH P,J DIRL1: CAMGE Q,J JRST USRFIN PUSH P,Q SKIPE A,UNFN1(Q) JRST .+3 SKIPN UNFN2(Q) JRST DIRLUP AOS LFILES PUSHJ P,LTAB PUSHJ P,SIXLPT PUSHJ P,LSPAC MOVE A,UNFN2(Q) PUSHJ P,SIXLPT PUSHJ P,LSPAC LDB C,[UNPKN UNRNDM(Q)] LPR DIR CHAR ADR: PUSHJ P,LTAB LDB A,[UNDSCP UNRNDM(Q)] PUSHJ P,LOCT CAML A,USRD JRST BADA1 IDIVI A,6 ADDI A,USRD+UDDESC HLL A,QBTBLI(B) TLNE A,400000 SUB A,[440000,,1] MOVEI ZR,0 LDB B,A JUMPE B,BADA4 LPR ******* FILE NOT PRECEEDED BY ZERO ****** BADA4: MOVE N,A MOVEI J,0 ILDB B,A JUMPE B,BADA2 BADA3: MOVE TT,UNRNDM(Q) TLNE TT,UNLINK JRST LINK1 CAME C,TUTI JRST OTLUP ;ON OTHER DISK SETZM LSTBLK' TRLUP: MOVE TT,N ADDI TT,DUSRD-USRD IDPB ZR,TT ILDB B,N PUSHJ P,LCRR PUSHJ P,LTAB PUSHJ P,LTAB MOVE A,B PUSHJ P,LOCT JUMPE B,LINK CAIN B,UDWPH JRST TRLUP CAIL B,UDWPH JRST LOAD CAILE B,UDTKMX JRST SKIPF TLUP: AOS Q TLUP1: MOVE A,Q PUSHJ P,LSPAC PUSHJ P,LOCT SKIPGE CKFLSW JRST CKFL1 CKFL2: MOVEM Q,LSTBLK ILDB C,J SKIPE C JRST LOST LOSTR: CAIGE C,TUTLK-1 AOS C DPB C,J AOS LBLOCKS SOJG B,TLUP JRST TRLUP BADA1: LPR ******* BAD CHR ADR ******* JRST LINK BADA2: LPR ******** POINTS TO 0 ********* JRST BADA3 CKFL1: PUSH P,J PUSH P,Q PUSH P,B PUSH P,ZR PUSH P,N MOVE I,TUTU MOVE J,A MOVEI A,FDBUF PUSHJ P,READ JUMPL T,CHKFL4 CHKFL5: JUMPGE TT,CKFL3 LPR *** BLK # DFRS **** AOS BNDFC SETOM UFDLOS CKFL3: MOVE A,RXWDS+XWSYSN CAME A,USRNAM JRST CKFL4 CKFL5: LDB A,[XWBLK RXWDS] CAME A,LSTBLK JRST CKFL6 CKFL7: SKIPL UDPSW JRST CKFL8 SETZM WXWDS LDB A,[XWAWC RXWDS] DPB A,[XWAWC WXWDS] MOVE A,LSTBLK DPB A,[XWBLK WXWDS] MOVE A,USRNAM MOVEM A,WXWDS+XWSYSN MOVE Q,-5(P) MOVE A,UNFN1(Q) MOVEM A,WXWDS+XWFN1 MOVE A,UNFN2(Q) MOVEM A,WXWDS+XWFN2 MOVEI A,FDBUF PUSHJ P,WRITE MOVE T,[WXWDS-1,,WXWDS] BLT T,WXWDS+3 CKFL8: POP P,N POP P,ZR POP P,B POP P,Q POP P,J JRST CKFL2 CHKFL4: LPR *** BAD BLOCK PARITY *** JRST CHKFL5 CKFL4: LPR *** USER NAME DIFFERS *** SETOM UFDLOS JRST CKFL5 CKFL6: LPR *** CHAIN POINTER DIFFERS *** SETOM UFDLOS JRST CKFL7 TCHK2: PUSH P,TT TYP USER DIR PARITY ERROR PUSHJ P,CRR MOVE A,USRNAM PUSHJ P,T6B PUSHJ P,TSPAC TYP PROCEED? PUSHJ P,TYI POP P,TT CAIN A,"Y JRST TCHK6 PUSHJ P,CRR TCHK7: TYP TRY UFD FROM UNIT # PUSHJ P,NTYI JRST DDT PUSHJ P,CRR CAIL A,NUNITS JRST TCHK7 SKIPL QACT(A) JRST TCHK7 MOVE I,A MOVEI A,USRD JRST TCHK4 TCHK3: TYP USER DIR BLK # DFRS PUSHJ P,CRR MOVE A,USRNAM PUSHJ P,T6B PUSHJ P,TSPAC TYP PROCEED? PUSHJ P,TYI PUSHJ P,CRR CAIN A,"Y JRST TCHK8 JRST TCHK7 TCHK5: TYP USER NAME IN DIR DIFFERS PUSHJ P,CRR MOVE A,USRNAM PUSHJ P,T6B PUSHJ P,TSPAC MOVE A,Q PUSHJ P,T6B PUSHJ P,CRR TYP PROCEED? PUSHJ P,TYI PUSHJ P,CRR CAIN A,"Y JRST TCHK1 JRST TCHK7 LINK1: PUSHJ P,LSPAC LPR LINK ;FOLLOWED BY SPACE MOVE TT,N ADDI TT,2000 PUSHJ P,LTYPE PUSHJ P,LTYPE PUSHJ P,LTYPE ILDB B,N JUMPE B,LINK LPR *** NOT FOLLOWED BY 0 *** JRST LINK LTYPE: MOVEI C,6 LTYPE2: IDPB ZR,TT ILDB A,N ADDI A,40 CAIN A,": JRST LTYPE4 CAIN A,"; JRST LTYPE1 LTYPE3: PUSHJ P,LPTR SOJG C,LTYPE2 LTYPE1: JRST LSPAC LTYPE4: ILDB A,N IDPB ZR,TT JRST LTYPE3 LOAD: MOVEI J,-UDWPH-1(B) MOVEI K,NXLBYT LOAD1: MOVE TT,N ADDI TT,DUSRD-USRD IDPB ZR,TT ILDB B,N PUSHJ P,LSPAC MOVE A,B PUSHJ P,LOCT LSH J,6 ADD J,B SOJG K,LOAD1 MOVE Q,J IDIVI J,36./TUTBYT ADD J,QTTBLI(K) MOVEI B,1 JRST TLUP1 OTLUP: ILDB B,N MOVE TT,N ADDI TT,DUSRD-USRD DPB ZR,TT JUMPE B,LINK CAIN B,UDWPH JRST OTLUP CAILE B,UDTKMX JRST OTLUP1 ADDM B,TLBLOCKS JRST OTLUP OTLUP1: AOS TLBLOCKS CAIG B,UDWPH JRST OTLUP MOVEI K,NXLBYT OTLUP2: ILDB B,N MOVE TT,N ADDI TT,DUSRD-USRD DPB ZR,TT SOJG K,OTLUP2 JRST OTLUP SKIPF: SUBI B,UDTKMX IBP J AOS Q SOJG B,.-2 MOVEI B,1 JRST TLUP LINK: PUSHJ P,LCRR DIRLUP: POP P,Q MOVE J,(P) SUBI Q,LUNBLK JRST DIRL1 USRFIN: CLEARM GARBF CLEARB ZR,J MOVE Q,[440600,,DUSRD+UDDESC] GARB2: CAML J,USRD JRST USRFN2 GARB4: ILDB B,Q JUMPN B,GARB1 GARB3: AOJA J,GARB2 USRFN2: TLNE Q,770000 JRST GARB4 MOVEI Q,-DUSRD+1(Q) GARB6: CAML Q,DUSRD+1 JRST GARB5 SKIPN DUSRD(Q) AOJA Q,GARB6 LPR ******** GARBAGE IN FREE AREA ******** MOVE A,Q PUSHJ P,LOCT PUSHJ P,LSPAC MOVE A,DUSRD(Q) ANDCAM A,USRD(Q) PUSHJ P,LOCT PUSHJ P,LCRR CLEARM DUSRD(Q) SETOM GARBF AOJA Q,GARB6 GARB5: SKIPL UFDLOS JRST URFN2 LPR ******* THIS DIRECTORY WAS A LOSER ******** URFN2: SKIPN GARBF JRST USRFN4 LPR ******* EXTRA GARBAGE IN UFD ******* PUSHJ P,LCRR USRFN4: LPR USER FILES PUSHJ P,LSPAC MOVE A,LFILES PUSHJ P,LOCT PUSHJ P,LSPAC LPR USER BLOCKS THIS DISK PUSHJ P,LSPAC MOVE A,LBLOCKS ADDM A,TBLKTD PUSHJ P,LOCT PUSHJ P,LSPAC LPR TOTAL ALL DISKS PUSHJ P,LSPAC MOVE A,LBLOCKS ADD A,TLBLOCKS ADDM A,TBLKAD PUSHJ P,LOCT PUSHJ P,LCRR SKIPGE UFDLOS JRST USRFN6 SKIPN GARBF JRST USRFN3 USRFN6: TYP BAD: MOVE A,USRNAM PUSHJ P,T6B PUSHJ P,TSPAC MOVE A,DBLK PUSHJ P,DPT PUSHJ P,CRR SKIPN PRINTF' JRST PDIR USRFN5: TYP DIR REFRESHED PUSHJ P,CRR TYP WRITE? PUSHJ P,TYI PUSHJ P,CRR CAIE A,"Y JRST USRFN3 MOVEI A,USRD MOVE I,TUTU SKIPGE GUDFMD MOVE I,MDSK ;UFD CAME FROM MDSK MOVE J,DBLK PUSHJ P,WRITE ;WRITE BACK UFD USRFN3: POP P,J POP P,Q POPJ P, PDIR: MOVE B,[440700,,PBUF] PDIR1: ILDB A,B PUSHJ P,LPTR1 CAMN B,PBUFP JRST USRFN5 JRST PDIR1 GARB1: SETOM GARBF LPR CHAR ADR PUSHJ P,LSPAC MOVE A,J PUSHJ P,LOCT PUSHJ P,LTAB MOVE A,B PUSHJ P,LOCT PUSHJ P,LCRR MOVE TT,Q SUBI TT,DUSRD-USRD DPB ZR,TT JRST GARB3 MFDFIN: MOVNI A,1 EXCH A,PRINTF MOVEM A,OPNTF' PUSHJ P,LFORM LPR Y FILE COUNT MOVE A,LOSTC PUSHJ P,LOCT PUSHJ P,LTAB LPR BLK # DFRS COUNT MOVE A,BNDFC PUSHJ P,LOCT PUSHJ P,LTAB LPR USER COUNT MOVE A,USRCNT PUSHJ P,LOCT PUSHJ P,LCRR MOVEI TT,0 ;CHECK NEW TUT AGAINST OLD AND PRINT DIFFERENCES MOVE Q,QTTBLI MOVE J,Q SUBI J,TUT MOVE B,TUTU ADD J,QTUTO(B) TUTC1: ILDB C,Q ILDB D,J CAME C,D JRST TUTDF1 TUTC2: CAIGE TT,NBLKS-1 AOJA TT,TUTC1 LPR TOTAL USER BLOCKS THIS DISK MOVE A,TBLKTD PUSHJ P,LDPT PUSHJ P,LCRR LPR TOTAL USER BLOCKS ALL DISKS MOVE A,TBLKAD PUSHJ P,LDPT PUSHJ P,LFORM PUSHJ P,LCRR PUSHJ P,CRR TYP DISK REFRESHED MOVE J,TUTU MOVE Q,QTUTO(J) IRP AA,,[QTUTP,QPKNUM,QPKID,QSWAPA] MOVE A,AA(Q) MOVEM A,TUT+AA TERMIN PUSHJ P,CRR TYP WRITE? PUSHJ P,TYI CAIE A,"Y JRST TUTC3 MOVEI A,TUT MOVEI J,TUTBLK MOVE I,TUTU PUSHJ P,WRITE MOVEI A,MFD MOVEI J,MFDBLK PUSHJ P,WRITE TUTC3: SKIPL ALLDSK JRST DDT MOVE A,OPNTF MOVEM A,PRINTF AOS A,DRNO JRST TUTF3 LOST: AOS LOSTC LPR ***** SETOM UFDLOS JRST LOSTR TUTDF1: MOVE A,TT PUSHJ P,LOCT PUSHJ P,LSPAC MOVE A,D PUSHJ P,LOCT MOVEI A,"_ PUSHJ P,LPTR MOVE A,C PUSHJ P,LOCT PUSHJ P,LCRR JRST TUTC2 LOCT: PUSH P,A PUSH P,B LSHC A,-35. LSH B,-1 DIVI A,8 PUSH P,B SKIPE A PUSHJ P,LOCT POP P,A ADDI A,"0 PUSHJ P,LPTR POPBAJ: POP P,B POP P,A POPJ P, ] INIT: 0 CONO 675550 CONO PI,710000 MOVEI P,PDL SETZM ENCS IFE TS,[ SKIPN NOLPT CONO NLPT,100 ;SET DONE ] IFN TS,[ .OPEN TYIC,[SIXBIT / $TTY/] .VALUE .OPEN TYOC,[SIXBIT / !TTY/] .VALUE SETZM LPTO' .CORE _-10.+1 .VALUE ] JRST @INIT LDPT: IDIVI A,10. HRLM B,(P) SKIPE A PUSHJ P,LDPT HLRZ A,(P) ADDI A,"0 ;DROPS IN LPTR: SKIPN PRINTF' JRST STORE LPTR1: CAIN A,12 POPJ P, SKIPE NOLPT' JRST TYLPT IFE TS,[ PUSH P,A LSH A,1 IOR A,[-1,,777400] CONSO NLPT,100 JRST .-1 DATAO NLPT,A POP P,A ]IFN TS,[ SKIPE LPTO JRST LPTR2 .OPEN LPTC,[SIXBIT / !LPT/] POPJ P, SETOM LPTO LPTR2: .IOT LPTC,A CAIN A,15 .IOT LPTC,[12] ] POPJ P, TYLPT: CAIN A,14 POPJ P, PUSHJ P,TYO CAIE A,15 POPJ P, PUSH P,A MOVEI A,12 PUSHJ P,TYO JRST POPAJ STORE: IDPB A,PBUFP' POPJ P, T6B: PUSH P,B PUSH P,C MOVE C,A MOVE B,[440600,,C] T6B1: ILDB A,B JUMPE A,T6B2 ADDI A,40 PUSHJ P,TYO TLNE B,770000 JRST T6B1 T6B2: MOVE A,C POP P,C POPBJ: POP P,B POPJ P, SIXLPT: PUSH P,B PUSH P,C MOVE C,A MOVE B,[440600,,C] SLX1: ILDB A,B PUSHJ P,LPTRS TLNE B,770000 JRST SLX1 MOVE A,C POP P,C POP P,B POPJ P, LPTRS: ADDI A,40 JRST LPTR STYP: PUSH P,B MOVE B,A ST1: ILDB A,B CAIN A,'! JRST POPBJ ADDI A,40 PUSHJ P,TYO JRST ST1 SLPT: PUSH P,B MOVE B,A SL1: ILDB A,B CAIN A,'! JRST POPBJ PUSHJ P,LPTRS JRST SL1 LTAB: PUSHJ P,LSPAC PUSHJ P,LSPAC PUSHJ P,LSPAC JRST LSPAC LCRR: PUSH P,A MOVEI A,15 PUSHJ P,LPTR JRST POPAJ LSPAC: PUSH P,A MOVEI A,40 L1: PUSHJ P,LPTR POP P,A POPJ P, LFORM: PUSH P,A MOVEI A,14 PUSHJ P,LPTR JRST POPAJ DPT: PUSH P,A PUSH P,B IDIVI A,8 PUSH P,B SKIPE A PUSHJ P,DPT POP P,A ADDI A,"0 PUSHJ P,TYO JRST POPBAJ MTC==340 ;MAG TAPE CHANNEL FOR FUNCTIONS MTS==344 ;MAG TAPE CHANNEL FOR STOPPING AND STATUS ;SHIFTS FOR FIELDS IN CONO MTC, UNITNO==15. PARITY==14. FUNC==9. DENSTY==6. 800BPI==2 MAGCOM=5_+1_+800BPI_ ;FUNCTIONS NOOP1=0_+MAGCOM ;CLEAR INTERRUPT FLAGS NOOP2=10_+MAGCOM ;INTERRUPT WHEN TRANSPORT IDLE REWIND=1_+MAGCOM ;REWIND REED=2_+MAGCOM ;READ SPACR=7_+MAGCOM ;SPACE REVERSE ;FLAGS JOBDON==100 DATREQ==1 EOFF==10000 EOTF==4000 REW: CLEARM EOFCNT CLEARM MAGBFP CLEARM SHORTL CONO MTC,NOOP1 ;CLEAR INTERRRUPT FLAGS CONO MTC,REWIND ;INITIATE REWIND CONSO MTS,JOBDON ;WAIT FOR REWIND TO BEGIN JRST .-1 CONO MTC,NOOP2 ;SET JOB DONE WHEN TRANSPORT IDLE CONSO MTS,JOBDON ;WAIT FOR JOB DONE JRST .-1 SETOM ITAPE POPJ P, ;REWIND DONE ITAPE: 0 MREAD: MOVEI T,0 PUSH P,B MREAD7: SKIPGE B,MAGBFP JRST MREAD5 SKIPN EOFLG JRST MREAD1 SETZM EOFLG SETOM EOUF JRST POPBJ MREAD1: MOVEI B,10. MOVEM B,MTRYS MERR2: MOVE B,[-2000,,MAGBUF] MOVEM B,MAGBFP CONO MTC,NOOP1 ;CLEAR FLAGS CONO MTC,REED MREAD2: CONSO MTS,DATREQ+EOFF+JOBDON+EOTF ;WAIT FOR NEXT DATA REQUEST JRST .-1 MOVEI C,20. SOJG C,. CONI MTS,C TRNE C,EOTF JRST MREOT TRNN C,JOBDON JRST MREAD3 TRNN C,EOFF JRST MREAD6 AOS EOFCNT SETOM EOFLG CLEARM SHORTL JRST MREAD9 MREAD6: SETOM SHORTL MREAD9: HLLZS B MOVNS B ADDM B,MAGBFP JRST MREAD4 MREAD3: TRNN C,DATREQ JRST MREAD2 DATAI MTC,(B) SKIPE SHORTL JRST 4,. AOBJN B,MREAD2 MREAD4: CONO MTS,1 CONSO MTS,JOBDON JRST .-1 CONSZ MTS,440000 ;X HUNG + ILL OP JRST 4,MERR MREAD8: CONSO MTS,20600 JRST MREAD7 MERR: SOSG MTRYS JRST MERR1 CONO MTC,NOOP1 CONO MTC,SPACR CONSO MTS,DATREQ JRST .-1 DATAO MTC, CONO MTS,1 CONSO MTS,JOBDON JRST .-1 JRST MERR2 MERR1: AOS FERRS ;IGNORE ERR JRST MREAD7 MREAD5: HLRE C,B CAMG B,A HLRE C,A HRLZS B HRR B,A MOVNS C HRLS C ADDI C,-1(A) BLT B,(C) HLRS C ADD A,C ADDM C,MAGBFP ADDI T,(C) JUMPGE A,POPBJ JRST MREAD7 MREOT: LPR EOT PUSHJ P,CRR JRST DDT CRR: PUSH P,A PUSHJ P,CRR1 POP P,A POPJ P, DDT: TYP DDT IFE TS, JRST MEMSIZ-4000 IFN TS, .VALUE 69 CRR1: MOVEI A,15 PUSHJ P,TYO SKIPA A,[12] TSPAC: MOVEI A,40 TYO: IFE TS,[ CONSZ TTY,20 JRST .-1 DATAO TTY,A ]IFN TS, .IOT TYOC,A POPJ P, NTYI: PUSHJ P,TYI CAIL A,"0 CAILE A,"9 POPJ P, SUBI A,"0 POPJ1: AOS (P) POPJ P, IFN TS,[ TYI: .IOT TYIC,A JRST TYO READ: MOVEM J,63 SETZB T,TT POPJ P, WRITT: MOVE I,TOU WRITE: POPJ P, ]IFE TS,[ TYI: CONSO TTY,40 JRST .-1 DATAI TTY,A ANDI A,177 JRST TYO CPOPJ: POPJ P, THBLK: -LTHBLK,,0 THTPN: 0 ;TAPE #,,REEL # IN THIS DUMP THDATE: 0 ;TAPE CREATION DATE THTYPE: 0 ;0=>RANDOM >0 => FULL <0 => INCR LTHBLK==.-THBLK MHBLK: -LMHBLK,,0 ;FILE HEADER BLOCK MHSNM: 0 ;SYS NAME MHFN1: 0 ;FN1 MHFN2: 0 ;FN2 MHPKN: 0 ;PACK # MHDATE: 0 ;CREATION DATE LMHBLK==.-MHBLK MAGHD: 0 EOTFLG: 0 EOFCNT: 0 EOUF: 0 SHORTL: 0 MTRYS: 0 MAGBFP: 0 EOFLG: 0 RESET: CONO DC0,DCCSET+DCDENB DPB I,[DUNFLD DRST] DATAO DC0,DRST CONSO DC0,DSSATT JRST .-1 CONO DC0,DCCSET+DCDENB DATAO DC0,[DJMP GPKID] CONSZ DC0,DSSACT JRST .-1 LDB T,[DPKID RPKID] MOVEM T,PKNUM(I) POPJ P, PKNUM: BLOCK NUNITS DRST: DSPC+DSRCAL+DSWINF+DUNENB GPKID: DSPC+DSCRHD+DSWNUL+616300 DCOPY RPKID(37774) DHLT RPKID: 0 WRITT: MOVE I,TOU WRITE: HRRZM J,LBLK SKIPA T,[DWR] READ: MOVEI T,DRD HRRM T,DGO DPB I,[DUNFLD (T)] DPB A,[DCCA 1(T)] DPB A,[DCCA 4(T)] HRRZ TT,J CAIL TT,NBLKS+XBLKS JRST 4,. IDIVI TT,NSECS DPB T,[DSECT @DGO] IDIVI TT,NHEDS DPB T,[DSURF @DGO] DPB TT,[DCYL @DGO] MOVE T,PKNUM(I) CAIL TT,NCYLS MOVEI T,0 DPB T,[DPKID @DGO] HRRZ TT,DGO MOVE T,(TT) TLZ T,340000 ;CHANGE TO READ COMPARE MOVEM T,3(TT) RW1: MOVEI T,30. RW2: CONO DC0,DCCSET\DCDENB DATAO DC0,DGO CONSZ DC0,DSSACT JRST .-1 CONSZ DC0,DSSERR SOJGE T,RW2 SKIPGE T AOS FERRS POPJ P, DGO: DJMP . DRD: DREAD+DUNENB DCOPY .(-2000_2&37774) DCOPY RXWDS(-4_2&37774) DRC DCCOMP .(-2000_2&37774) DCCOMP RXWDS (-4_2&37774) DHLT RXWDS: BLOCK 4 DWR: DWRITE+DUNENB DCOPY .(-2000_2&37774) DCOPY WXWDS(-4_2&37774) DRC DCCOMP .(-2000_2&37774) DCCOMP WXWDS(-4_2&37774) DHLT 0 ;FOR BLT WXWDS: BLOCK 4 ] CONSTA VARIAB SBIT: 1 2 4 10 FROM: 0 TOU: 0 SBTAB: MFDBLK ;SPECIAL RESERVED BLKS TUTBLK LSBTAB==.-SBTAB BNDFC: 0 ;COUNT OF BLOCKS WHOSE #'S DIFFER CKFLSW: 0 ;-1 VERIFY THAT BLOCKS THAT MAKE UP FILE ARE IN RIGHT PLACE ;IE XTRAWD HAS RIGHT THING WHEN BLOCK READ PDL: BLOCK 200 POS: BLOCK NUNITS LOSTC: 0 TUTU: 0 TUTI: 0 QBTBLI: 440600,, QBTBL: 360600,, 300600,, 220600,, 140600,, 60600,, 600,, QTTBLI: REPEAT 36./TUTBYT+1, 440000+TUTBYT_6-TUTBYT_12.*.RPCNT,,TUT QTTBL=QTTBLI+1 ALLDSK: 0 DRNO: 0 GUDFMD: 0 ;-1 GET UFDS FROM MASTER DSK CLNSSW: 0 GARBF: 0 DBLK: 0 LFILES: 0 ;FILES LOSER HAS LBLOCKS: 0 ;BLOCKS LOSER USES THIS DISK TLBLOCKS: 0 ;TOTAL ON ALL DISKS TBLKTD: 0 ;TOTAL BLOCKS THIS DISK ALL USERS TBLKAD: 0 ;TOTAL BLOCKS ALL DISKS ALL USERS UFDLOS: 0 ;-1 IF DIR HAS CLOBBERED BLOCKS USRCNT: 0 ;COUNT OF DISK USERS QACT: BLOCK NUNITS MDSK: 0 UFDTA: 0 ;TRACK ADR OF UFD FERRS: 0 ;ERRS MADE IN XFER OF FILE IRP A,,[MDR,TUT]B,,[D,T] Q!A!O: REPEAT NUNITS,CONC B,\.RPCNT,î TERMIN PAT: PATCH: BLOCK 100 IFE TS,LOC <.+1777>&776000 MAGBUF: BLOCK 2000 CYLBUF: FDBUF: BLOCK 2000 USRD: BLOCK 2000 DUSRD: BLOCK 2000 ;MUST FOLLOW USRD IRPC A,,DT REPEAT NUNITS,CONC A,\.RPCNT,: BLOCK 2000 TERMIN TUT: BLOCK 2000 MFD: BLOCK 2000 PBUF: BLOCK 2000 IFE TS,IFL .-CYLBUF-NCBLKS*2004,LOC CYLBUF+NCBLKS*2004 THEEND:END CHKR