1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-02 12:19:14 +00:00
Files
PDP-10.its/src/mlsys/msalv.14
2018-02-19 19:45:21 +01:00

1462 lines
21 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
.INSRT MFSDFS >
.INSRT MDSK >
NUNITS==2
IFN TS,[
NUNITS==2
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
ZZ=.
LOC 60
ICWA: .+2
0
0
XICWA: -4,,RXWDS
-174,,0 ;SKIP OVER REST OF SECTOR (OR WRITE GARBAGE ...)
0
LOC ZZ
IFE TS,[
LOC SA ;SO IT CAN BE LOADED WITH THE SYSTEM
JRST GOGO ;START WITH ALL DEFAULT OPTIONS
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 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*2200
HRLM T,@ICWA
JRST RW0
CYLRIR: DREADC+ICWA
CYLRIW: DWRITC+ICWA
]
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
]
READFN: SKIPA I,FROM
READT: MOVE I,TO
PUSHJ P,READ
JUMPL TT,[JRST 4,.]
JUMPL T,[JRST 4,.]
CPOPJ: POPJ P,
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
MOVE A,[WXWDS-1,,WXWDS]
BLT A,WXWDS+NXWDS-1
MOVSI J,-NBLKS-XBLKS ;INIT RETRIEVAL ON WHOLE DISK
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
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] ;MARK OUT SPECIALLY RESERVED BLOCKS (MFD, TUT)
ZAP3: MOVE B,(D)
IDIVI B,36./TUTBYT
ADD B,QTTBL(C)
DPB A,B
AOBJN D,ZAP3
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
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
CONSTA
IFE TS,[
GOGO: SETOM GOGOX'
SKIPA
CHKR: SETZM GOGOX
JSR INIT
SETOM PRINTF
PUSHJ P,CRR
TYP SALVATION
MOVE A,[.FNAM2]
PUSHJ P,T6B
PUSHJ P,CRR
MOVEI A,NUNITS-1
INIUNT: SKIPN GOGOX
CLEARM QACT(A)
SKIPE GOGOX
SETOM QACT(A)
SOJGE A,INIUNT
SKIPE GOGOX
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
CLEARM GUDFMD ;GET USER DIRS FROM MASTER DISK
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 DPC?
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
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 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-LMNBLK*NUDSL
IDIVI J,LMNBLK
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 A,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) ;FILE NAME BLOCK IN UFD
MOVE A,UNFN1(Q)
MOVEM A,WXWDS+XWFN1
MOVE A,UNFN2(Q)
MOVEM A,WXWDS+XWFN2
MOVEI A,FDBUF
PUSHJ P,WRITE
MOVE A,[WXWDS-1,,WXWDS]
BLT A,WXWDS+NXWDS-1
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
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: 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)
CLEARM 1T0C
;DROPS THRU
;DROPS IN
TUTC1: ILDB C,Q
ILDB D,J
CAME C,D
JRST TUTDF1
TUTC2: CAIGE TT,NBLKS-1
AOJA TT,TUTC1
SKIPN 1T0C
JRST TUTC4
LPR 1_0 COUNT
MOVE A,1T0C
PUSHJ P,LDPT
PUSHJ P,LCRR
TUTC4: 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: CAIN D,1
JUMPE C,TUTDF2 ;1_0
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
TUTDF2: AOS 1T0C
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
IFN TS,[
.OPEN TYIC,[SIXBIT / $TTY/]
.VALUE
.OPEN TYOC,[SIXBIT / !TTY/]
.VALUE
SETZM LPTO'
.CORE <THEEND-1>_-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,
JRST TYLPT
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: 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
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,[
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]
]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
CAIN A,32
JRST CRDDT
CAILE A,140
SUBI A,40
JRST TYO
RESET: CONSZ DPC,BUSY
JRST .-1
DATAO DPC,[DEASEC 776] ;CLEAR ALL ATTNS
DPB I,[DUNFLD DRST]
DATAO DPC,DRST
DATAI DPC,T
TRNN T,776
JRST .-2
DATAO DPC,[DEASEC 776]
POPJ P,
DRST: DRCALC
SEEK: MOVEI TT,10.
MOVEM TT,SEEKC'
SEEK1: CONSZ DPC,BUSY
JRST .-1
DATAO DPC,[DEASEC 776]
MOVE TT,@DGO
TLZ TT,700000
TLO TT,(DSEEKC)
DATAO 4,TT
DATAO DPC,TT
DATAI DPC,TT
TRNN TT,776
JRST .-2
DATAO DPC,[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: SKIPA T,[DWR]
READ: MOVEI T,DRD
HRRM T,DGO
MOVEI TT,RXWDS
CAIE T,DRD
MOVEI TT,WXWDS
HRRM TT,XICWA ;EXTRA WDS
DPB I,[DUNFLD (T)]
MOVNI TT,2000
HRLM TT,@ICWA
HRRZ TT,J
CAIL TT,NBLKS+XBLKS
JRST 4,.
IDIVI TT,NCBLKS ;FORMS CYL - BLOCK WITHIN CYL
DPB TT,[DCYL @DGO]
MOVE TT,T
IMULI TT,NSSECS
IDIVI TT,NHSECS ;FORMS HEAD - SECTOR
DPB TT,[DSURF @DGO]
DPB T,[DSECT @DGO]
RW0: SUBI A,1
HRRM A,@ICWA
ADDI A,1
SETZM ICWA+1
PUSHJ P,SEEK
RW1: MOVEI T,30.
RW2: CONO DPC,DCLEAR
DATAO PI,@DGO ;FLASH LITES FOR LOSER
DATAO DPC,@DGO
CONSO DPC,DONE
JRST .-1
CONSO DPC,ALLER
POPJ P,
CONI DPC,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,
RXWDS: BLOCK NXWDS
0 ;FOR BLT TO CLEAR WXWDS
WXWDS: BLOCK NXWDS
DGO: .
DRD: DREADC+ICWA
DWR: DWRITC+ICWA
FROM: 0
TOU: 0
SBTAB: MFDBLK ;SPECIAL RESERVED BLKS
TUTBLK
LSBTAB==.-SBTAB
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
]
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,
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
1T0C: 0 ;COUNT 1_0
ALLDSK: 0
DRNO: 0
GUDFMD: 0 ;-1 GET UFDS FROM MASTER DPC
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,<2C>
TERMIN
PAT:
PATCH: BLOCK 100
IFE TS,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
IFE TS,IFL .-CYLBUF-NCBLKS*NSSECS*200,LOC CYLBUF+NCBLKS*NSSECS*200
THEEND:END