TITLE SALVAGER - MB 3/12/73 ZR=0 ;FREQUENTLY A SOURCE OF ZEROES 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 NLPT=464 MEMSIZ=1000000 .MLLIT==1 .INSRT FSDEFS > .INSRT DSK > NUNITS==4 NOUNTS==3 ODSKS==1 MDIRTK==0 ;OLD DIRECTORY TRACK NUMBER 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 LOC 60 ICWA: .+2 0 0 0 LOC 200000 ;SO IT CAN BE LOADED WITH THE SYSTEM JRST GOGO ;START WITH ALL DEFAULT OPTIONS ; FOLLOWING MOVED TO HERE TO AVOID ASSEMBLY ERROR SBTAB: MFDBLK ;SPECIAL RESERVED BLKS TUTBLK LSBTAB==.-SBTAB 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 COPYB: 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, DUP: JSR INIT STRA DUPLICATE DISK FROM DRIVE # PUSHJ P,DUP1 MOVE I,FROM DPB I,[DUNFLD CYLRIR] MOVE I,TOU DPB I,[DUNFLD CYLRIW] MOVEI J,NCYLS+XCYLS-1 MOVEI A,CYLBUF DLUP: MOVE I,FROM PUSHJ P,READCY MOVE I,TOU PUSHJ P,WRITCY SOJGE J,DLUP JRST DDT READCY: SKIPA T,[CYLRIR] WRITCY: MOVEI T,CYLRIW MOVEM T,DGO DPB I,[DUNFLD (T)] DPB J,[DCYL (T)] MOVNI T,NCBLKS*2000 HRLM T,@ICWA JRST RW0 CYLRIR: DREADC+ICWA CYLRIW: DWRITC+ICWA TRAN: JSR INIT PUSHJ P,CRR PUSHJ P,CRR TYP TRANSLATE FILES FROM DRIVE # PUSHJ P,NTYI JRST TRAN+1 CAIL A,NOUNTS JRST TRAN+1 MOVE I,A PUSHJ P,ORESET PUSHJ P,DUP2 MOVEI A,TUT MOVEI J,TUTBLK PUSHJ P,READT MOVEI A,D1 MOVEI J,MFDBLK PUSHJ P,READT MOVEI A,D0 MOVEI J,MDIRTK PUSHJ P,READF MOVEI Q,1777 TNAML: SUBI Q,2 CAMGE Q,D0+4 JRST TMDON SKIPN B,D0(Q) JRST TNAML HRROI J,-1777(Q) MOVNS J LSH J,-1 MOVEI A,USRD PUSHJ P,READF CAME B,USRD+2 JRST 4,. 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: PUSH P,A MOVEI J,2*NUDSL-2000(A) LSH J,-1 MOVEI A,DUSRD 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) PUSH P,A TOLDUR: PUSH P,Q MOVEI Q,2000 TDIRL: SUBI Q,5 CAMGE Q,USRD+1 JRST TDDON SKIPE B,USRD(Q) JRST .+3 SKIPN USRD+1(Q) JRST TDIRL MOVSI T,64 LDB C,[150500,,USRD+2(Q)] TDNN T,USRD+2(Q) CAME C,D0+3 JRST TDIRL MOVE C,USRD+1(Q) 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: TYP FILE ALREADY ON OUTPUT DRIVE JRST CRDDT 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,. MOVE N,USRD+2(Q) HLLZM N,DUSRD+UNRNDM(A) TLNE N,1 TLO A,400000 MOVE B,DUSRD+UDESCP DPB B,[UNDSCP DUSRD+UNRNDM(A)] MOVE B,USRD+3(Q) MOVEM B,DUSRD+UNDATE(A) MOVE B,TUT+QPKNUM DPB B,[UNPKN DUSRD+UNRNDM(A)] ANDI N,17777 IDIVI N,6 ADDI N,USRD+11. HLL N,QBTBLI(I) JUMPL A,TLINK SETZM CBYT' SETZM OBLKS' SETZM IBLK' SETZM LBLK' TBLKL: ILDB H,N JUMPE H,TBDON CAILE H,12. JRST TBNT TBLKL1: PUSHJ P,READB AOS IBLK PUSHJ P,WRBLK SOJG H,TBLKL1 JRST TBLKL TNEWCK: SKIPN DUSRD+UNFN1(A) SKIPE DUSRD+UNFN2(A) JRST 4,. JRST TNEWCR TBNT: TRNN H,40 JRST TBNL DPB H,[60500,,IBLK] ILDB H,N DPB H,[600,,IBLK] TBLKL2: MOVEI H,1 JRST TBLKL1 TBNL: CAIN H,31. JRST TBLKL SUBI H,12. ADDM H,IBLK JRST TBLKL2 TBDON: PUSHJ P,EBYT MOVEI J,UDWPH SKIPN LBLK PUSHJ P,BYDEP MOVEI J,0 PUSHJ P,BYDEP JRST TDIRL TLINKQ: ILDB J,N PUSHJ P,BYDEP TLINK: ILDB J,N PUSHJ P,BYDEP CAIN J,': JRST TLINKQ JUMPN J,TLINK JRST TDIRL READB: SKIPN J,IBLK JRST 4,. MOVEI A,FDBUF READF: MOVE I,FROM PUSHJ P,OREAD 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 MOVEM A,WRLU3 MOVEI A,FDBUF 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 WRLU2: MOVEI A,TUTLK DPB A,WRLU3 JRST WRBLK WRLU3: 0 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, TDDON: POP P,Q POP P,J SUBI J,2000-2*NUDSL LSH J,-1 MOVEI A,DUSRD PUSHJ P,WRITT JRST TNAML TMDON: MOVEI J,MFDBLK MOVEI A,D1 PUSHJ P,WRITT MOVE A,TUT+QTUTP IDIVI A,NCBLKS IMULI A,NCBLKS MOVEM A,TUT+QTUTP MOVEI J,TUTBLK MOVEI A,TUT PUSHJ P,WRITT JRST DDT TCTBL: D0,,D1+MDNUM D0+2,,TUT+QPKID D0+3,,TUT+QPKNUM D0+6,,D1+MDYEAR D0+7,,D1+MPDOFF D0+8,,TUT+QSWAPA LTCTBL==.-TCTBL 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+1 CAIL A,NUNITS JRST ZAP+1 PUSHJ P,CRR MOVEM A,TOU MOVE I,A PUSHJ P,RESET MOVSI J,-NUDSL MOVEI A,MFD ZAPL: PUSHJ P,WRITE JUMPL T,ZAPLUZ AOBJN J,ZAPL JRST ZAP2 ZAPLUZ: TYP LOSE PUSHJ P,CRR JRST DDT ZAP1: MOVE A,[MFD,,MFD+1] SETZM MFD BLT A,MFD+1777 PUSHJ P,TUTINI PUSHJ P,CRR POPJ P, ZAP2: TYP PACK ID = PUSHJ P,6TYI PUSHJ P,CRR MOVEM B,TUT+QPKID TYP PACK # = PUSHJ P,OTYI MOVEM A,TUT+QPKNUM PUSHJ P,CRR TYP SWAPPING ALLOC = PUSHJ P,OTYI PUSHJ P,CRR MOVEM A,TUT+QSWAPA ADDI A,NUDSL+LSBTAB ;SYSTEM BLOCS SET ASIDE CAIGE A,NBLKS JRST ZAP4 CONC TYP SWAP MAX IS ,\NBLKS-NUDSL-LSBTAB PUSHJ P,CRR ZAP4: MOVEI A,2000 MOVEM A,MFD+MDNAMP MOVEI A,MFD MOVEI J,MFDBLK PUSHJ P,WRITT MOVE A,TUT+QSWAPA ;SET CYLINDER POINTER FOR FREE TUT SEARCH 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 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 ORESET: PUSH P,I MOVE TT,I IDIVI TT,3 MOVE I,TT PUSHJ P,RESET POP P,I POPJ P, GOGO: SETOM GOGOX' SKIPA CHKR: SETZM GOGOX JSR INIT SETOM PRINTF PUSHJ P,LPTUP SETOM LPTSW' PUSHJ P,LFORM PUSHJ P,CRR TYP SALVAGER MOVE A,[.FNAM2] PUSHJ P,T6B PUSHJ P,CRR 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 CAIGE 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 CLEARM GUDFMD CLEARM PRINTF CLEARM CKFLSW 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 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 SKIPN QACT(U) ;SKIP IF NOT ZEROED BY ERROR IN RESET POPJ P, MOVE A,QMDRO(U) MOVE I,U MOVEI J,MFDBLK PUSHJ P,READ JUMPL T,DUINI1 JUMPL TT,DUINI2 MOVE A,QTUTO(U) MOVEI J,TUTBLK PUSHJ P,READ JUMPL T,DUINI3 JUMPL TT,DUINI4 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 DUINI2: TYP MFD BLK # DFRS PUSHJ P,CRR JRST DDT DUINI3: TYP TUT PARITY ERRORS PUSHJ P,CRR JRST DDT DUINI4: TYP TUT BLK # DFRS 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 CRDDT 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, DELUSR: SKIPN MNUNAM(Q) POPJ P, SOS USRCNT MOVE A,MNUNAM(Q) PUSHJ P,T6B TYP NO FILES, USER DIRECTORY DELETED SETZM MNUNAM(Q) JRST CRR 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 SETOM UFDLOS 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 ADRSET' 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 SKIPE ADRSET JRST TLUP2 SETOM UFDLOS LPR ****** BLOCK ADDRESS NOT SET ****** PUSHJ P,LCRR JRST CKFL2 TLUP2: PUSHJ P,LSPAC PUSHJ P,LOCT CAIGE A,NBLKS JRST TLUP3 SETOM UFDLOS LPR ****** BLOCK ADDRESS OFF DISK ****** PUSHJ P,LCRR JRST CKFL2 TLUP3: CAIGE A,NUDSL JRST TLUP4 MOVSI C,-LSBTAB CAMN A,SBTAB(C) JRST TLUP4 AOBJN C,.-2 JRST TLUP5 TLUP4: SETOM UFDLOS LPR ****** BLOCK IN RESERVED AREA ****** JRST CKFL2 TLUP5: 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: SETOM UFDLOS LPR ******* BAD CHR ADR ******* JRST LINK BADA2: SETOM UFDLOS 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,CKFL7 LPR *** BLK # DFRS **** AOS BNDFC SETOM UFDLOS CKFL7: SKIPL UDPSW JRST CKFL8 MOVEI A,FDBUF PUSHJ P,WRITE CKFL8: POP P,N POP P,ZR POP P,B POP P,Q POP P,J JRST CKFL2 CHKFL4: LPR *** BAD BLOCK PARITY *** SETOM UFDLOS JRST CHKFL5 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 SETOM UFDLOS 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 SETOM ADRSET 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) MOVSI A,UNMARK ANDCAM A,UNRNDM(Q) ;CLEAR GC MARK BIT IF ON 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 SKIPE GARBF SKIPE CLNSSW JRST USRFN3 TYP DIR REFRESHED PUSHJ P,CRR TYP WRITE? PUSHJ P,TYI PUSHJ P,CRR CAIE A,"Y JRST USRFN3 USRFN7: 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: SKIPGE UFDLOS JRST USRFN6 SKIPN GARBF JRST USRFN5 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: 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 SETZM TUT1.0' SETZM TUTN.1' 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 SKIPN A,TUT1.0 JRST TUTC4 LPR NUMBER OF BLOCKS 1_0 PUSHJ P,LDPT PUSHJ P,LCRR TUTC4: SKIPN A,TUTN.1 JRST TUTC5 LPR NUMBER OF BLOCKS N_1 PUSHJ P,LDPT PUSHJ P,LCRR TUTC5: 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,LCRR 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 ;C/ NEW Q/NEW BYTE POINTER ;D/OLD J/OLD BYTE POINTER TUTDF1: SKIPN GOGOX JRST TUTDF2 JUMPN C,TUTDF3 CAIE D,1 AOS TUT1.0 JRST TUTC2 TUTDF3: CAIE C,1 JRST TUTDF2 JUMPE D,TUTDF2 AOS TUTN.1 JRST TUTC2 TUTDF2: 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 LPTSW DATAI DSK,A TLNE A,1 ;WRITE HEADER SWITCH JRST @INIT TYP *** WARNING - WRITE HEADERS ENABLED PUSHJ P,CRR 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 JRST LPTLPT 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 ;SUBROUTINE TO SEE IF LPT IS THERE LPTUP: SETZM NOLPT SETOM LPTBFC MOVE A, [<.BYTE 7 ? 15 ? 15 ? 15 ? 15 ? 15>] MOVEM A, LPTBUF CONO NLPT,200 CONO NLPT,1000 DATAO NLPT,[23*2] ;MOTOR ON MOVEI A,200000 LPTUP1: SOJLE A,LPTUP2 CONSO NLPT,100 ;IS IT ON? JRST LPTUP1 CONO NLPT,200 CONO NLPT,100 ;SET OUTPUT DONE POPJ P, LPTUP2: SETOM NOLPT ;HERE IF NO CHARS COME IN TYP LPT DOWN (Y OR N) PUSHJ P,TYI CAIN A,"Y POPJ P, CAIN A,"N JRST LPTUP JRST LPTUP2 ; call with ascii char in A ; saves and restores all AC's LPTLPT: SKIPGE NOLPT ;SKIP IF LPT KNOWN TO BE UP POPJ P, ;ELSE IGNORE PUSH P,A ;SAVE CHAR ON STACK ANDI A,177 ;MASK TO 7 BIT ASCII CAIGE A,40 ;SKIP IF NOT CTL CHAR CAIN A,14 ;SKIP IF NOT FF JRST LPTOP ;PRINT LITERALLY FF, GRAPHICS CAIN A,15 ;SKIP IF NOT CR JRST LPCR ;JUMP TO CR ROUT CAIN A,12 ;SKIP IF NOT LF JRST LPLF ;JUMP TO LF ROUT LPTOP: PUSHJ P,LPTO ;TAB & CONTROLS DONE BY HARDWARE POP P,A POPJ P, LPCR: PUSHJ P,LPTO ;PUT OUT CR SETOM LPCRLF ;MARK LF AFTER CR MOVEI A,12 ;LF JRST LPTOP ;OUTPUT IT LPLF: AOSE LPCRLF ;SKI IF THIS LF AFTER CR JRST LPTOP ;ELSE PUT IT OUT JRST POPAJ LPTO: PUSH P, B SOSLE LPTBFC ;MORE TO GO JRST LPTO1 ;YES MOVEI B, 5 ;NO, NEW WORD MOVEM B, LPTBFC MOVE B, [440700,,LPTBUF] MOVEM B, LPTBFP MOVEI B,-1 ;TIMEOUT FOR DEAD LPT CONSO NLPT,100 SOJG B, .-1 DATAO NLPT,LPTBUF LPTO1: IDPB A, LPTBFP ;BUFFER 5 AT A TIME POP P, B POPJ P, LPTBUF: -1 ;5 CHAR LPT BUFFER LPTBFC: 5 ;COUNT OF CHARS LEFT IN BUF LPTBFP: @. ;BYTE POINTER INTO LPT BUFFER LPCRLF: 0 ;# CHARS AFTER LAST CR, -1 IF TO IGNORE LF LPTFIN: MOVE A, [<.BYTE 7 ? 15 ? 14 ? 15 ? 15 ? 15>] MOVEI B, 15 LPTFN0: SOSG LPTBFC JRST LPTFN1 IDPB B, LPTBFP JRST LPTFN0 LPTFN1: DATAO NLPT, LPTBUF DATAO NLPT, A POPJ P, 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: PUSH P,A MOVEI A,11 JRST LCR1 LCRR: SETOM LFRMSW' PUSH P,A MOVEI A,15 LCR1: PUSHJ P,LPTR POPAJ: POP P,A POPJ P, LSPAC: PUSH P,A MOVEI A,40 L1: PUSHJ P,LPTR POP P,A POPJ P, LFORM: AOSE LFRMSW POPJ P, PUSH P,A MOVEI A,14 JRST LCR1 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 CRR: PUSH P,A PUSHJ P,CRR1 POP P,A POPJ P, DDT: TYP DDT PUSHJ P, LPTFIN ;FINISH LPT BUFFER JRST MEMSIZ-4000 CRR1: MOVEI A,15 PUSHJ P,TYO SKIPA A,[12] TSPAC: MOVEI A,40 TYO: PUSH P,B PUSH P,A IMULI A,200401 AND A,[11111111] MUL A,[11111111] POP P,A TLNE B,10 TRO A,200 POP P,B CONSZ TTY,20 JRST .-1 DATAO TTY,A TRZ A,200 CAIE A,11 JRST .+4 CONSZ TTY,20 JRST .-1 DATAO TTY,[177] SKIPN NOLPT SKIPN LPTSW POPJ P, JRST LPTLPT NTYI: PUSHJ P,TYI CAIL A,"0 CAILE A,"9 POPJ P, SUBI A,"0 POPJ1: AOS (P) POPJ P, TYI: CONSO TTY,40 JRST .-1 DATAI TTY,A ANDI A,177 CAIN A,^Z JRST CRDDT CAIGE A,"A+40 JRST TYO CAIG A,"Z+40 SUBI A,40 JRST TYO OREAD: PUSH P,J PUSH P,I MOVE TT,I IDIVI TT,3 MOVE I,TT IMULI T,2000. ADD J,T PUSHJ P,READ POP P,I POP P,J POPJ P, OWRITT: MOVE I,TOU OWRITE: PUSH P,J PUSH P,I MOVE I,TT IDIVI TT,3 MOVE I,TT IMULI T,2000. ADD J,T PUSHJ P,WRITE POP P,I POP P,J CPOPJ: POPJ P, RESET: CONSZ DSK,BUSY JRST .-1 DATAO DSK,[DEASEC 776] DPB I,[DUNFLD DRST] DATAO DSK,DRST RESET0: DATAI DSK,T TLNE T,20 JRST RESET1 LPR OFF LINE PUSHJ P,LCRR JRST RESET9 RESET1: TLNN T,4 JRST RESET2 LPR NO SUCH DRIVE PUSHJ P,LCRR JRST RESET9 RESET2: TRNN T,776 JRST RESET0 DATAO DSK,[DEASEC 776] POPJ P, RESET9: SETZM QACT(I) POPJ P, DRST: DRCALC SEEK: MOVEI TT,10. MOVEM TT,SEEKC' SEEK1: CONSZ DSK,BUSY JRST .-1 DATAO DSK,[DEASEC 776] MOVE TT,@DGO TLZ TT,700000 TLO TT,(DSEEKC) DATAO 4,TT DATAO DSK,TT DATAI DSK,TT TRNN TT,776 JRST .-2 DATAO DSK,[DEASEC 776] TLNE TT,(ONCYL) POPJ P, SOSL TT,SEEKC JRST SEEK2 POP P,(P) POPJ P, SEEK2: PUSH P,I PUSH P,T LDB I,[DUNFLD @DGO] PUSHJ P,RESET POP P,T POP P,I JRST SEEK1 WRITT: MOVE I,TOU WRITE: HRRZM J,LBLK SKIPA T,[DWR] READ: MOVEI T,DRD HRRM T,DGO DPB I,[DUNFLD (T)] MOVNI TT,2000 HRLM TT,@ICWA HRRZ TT,J CAIL TT,NBLKS+XBLKS JRST 4,. IMULI TT,SECBLK IDIVI TT,NSECS DPB T,[DSECT @DGO] IDIVI TT,NHEDS DPB T,[DSURF @DGO] DPB TT,[DCYL @DGO] RW0: SUBI A,1 HRRM A,@ICWA ADDI A,1 SETZM ICWA+1 PUSHJ P,SEEK RW1: MOVEI T,30. RW2: MOVEI TT,0 CONO DSK,DCLEAR DATAO 4,@DGO DATAO DSK,@DGO CONSO DSK,DONE JRST .-1 CONSO DSK,ALLER POPJ P, CONI DSK,TT TLNE TT,12 JRST RWPAR TRNE TT,HRDER JRST RWHRD TRNE TT,PROER JRST RWPRO TRNE TT,WRTER JRST RWWRT TRNE TT,SRCER SKIPA TT,[-1] SOJGE T,RW2 POPJ P, DGO: . DRD: DREADC+ICWA DWR: DWRITC+ICWA FROM: 0 TOU: 0 RWHRD: TYP FATAL HARDWARE ERROR JRST CRDDT RWPAR: TYP CHANNEL PARITY ERROR JRST CRDDT RWPRO: TYP DISK ROUTINE ERROR JRST CRDDT RWWRT: TYP DISK WRITE PROTECTED CRDDT: PUSHJ P,CRR JRST DDT CONSTA VARIAB 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 IRP A,,[MDR,TUT]B,,[D,T] Q!A!O: REPEAT NUNITS,CONC B,\.RPCNT,î TERMIN PAT: PATCH: BLOCK 100 LOC <.+1777>&776000 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 ;PRINT BUFFER IFL .-CYLBUF-NCBLKS*2004,LOC CYLBUF+NCBLKS*2004 THEEND:END