1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-24 01:27:33 +00:00
Files
PDP-10.its/src/syseng/salv.9
2019-08-22 12:36:27 +02:00

2280 lines
33 KiB
Groff
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
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_<TUTBYT>-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,<NBLKS+XBLKS>/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,<LRIBLK*3/2+3>
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 <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,
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_<UNITNO>+1_<PARITY>+800BPI_<DENSTY>
;FUNCTIONS
NOOP1=0_<FUNC>+MAGCOM ;CLEAR INTERRUPT FLAGS
NOOP2=10_<FUNC>+MAGCOM ;INTERRUPT WHEN TRANSPORT IDLE
REWIND=1_<FUNC>+MAGCOM ;REWIND
REED=2_<FUNC>+MAGCOM ;READ
SPACR=7_<FUNC>+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,<2C>
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