mirror of
https://github.com/PDP-10/its.git
synced 2026-03-05 11:04:02 +00:00
This is a earliest known preserved version of ITS from 1967. It ran on the AI lab PDP-6, with five teletypes and four GE consoles. The source code was reconstructed from Gerald Sussman's paper listing.
5202 lines
83 KiB
Plaintext
5202 lines
83 KiB
Plaintext
TITLE ITS 1.0 3/19/67
|
||
MOBY==1
|
||
|
||
;AC DEFS
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
TT=6
|
||
I=7
|
||
Q=10
|
||
J=11
|
||
R=12
|
||
P=15 ;DO NOT CHANGE!
|
||
T=16 ;"
|
||
U=17 ;"
|
||
|
||
|
||
IOBIT==1 ;IOBIT IN MAP
|
||
|
||
|
||
TTYIF==1 ;RIGHT HALF BITS IN PIRQC
|
||
BCNTRZI==2 ;^Z TYPED
|
||
BPIPI==4 ;BAD LOC 42
|
||
AROIF==10 ;AROV
|
||
BILLOP==40 ;ILLEGAL INSTRUCTION
|
||
BIOADC==20000 ;MEMORY PROTECTION VIOLATION
|
||
BIOCER==400 ;CHANNEL ERROR
|
||
VALRTF==200 ;VALUE RETURN
|
||
ILLUAD==1000 ;USER DOES NOT HAVE THAT MUCH CORE
|
||
BRKF==2000 ;BREAKPOINT FLAG
|
||
BUTFUL==4000 ;UTAPE FULL
|
||
BILM==10000 ;NON-EX MEM
|
||
;10000 NON EX MEM
|
||
;200000 PDL OV
|
||
;20000 MPV
|
||
BADBTS=BIOADC+BCNTRZI+BPIPI+BIOCER+BILLOP+BILM+VALRTF+BRKF
|
||
|
||
TTYIMI==1 ;IMAGE INPUT ;BITS IN TTYSTS
|
||
TTYDDT==2 ;"DDT" MODE
|
||
TTYIMO==4 ;IMAGE OUTPUT
|
||
|
||
;BITS IN RH MSKST
|
||
BTINTE==1 ;ENABLE TTY INT
|
||
|
||
CLKON==2001 ;ABSOLUTE
|
||
CLKOFF==1001
|
||
APRCHN==7 ;DO NOT CHANGE
|
||
BADPC==5037
|
||
LSRMOD==10000
|
||
UUOMIN==40000,,
|
||
UUOMAX==46000,,
|
||
AUUO=UUOMAX ;USE TO SAVE CONDS ON ILLOP
|
||
|
||
|
||
IFE MOBY,MX1KB==12. ;MAX SYS 1K BLOCKS
|
||
IFN MOBY,MX1KB==250.
|
||
IFE MOBY,MXIOB==30. ;MAX DYN ALLOC ALLOC IO BUFFERS
|
||
IFN MOBY,MXIOB==400
|
||
|
||
SIOMT==30 ;MAX SIZE TRANSLATION TABLE
|
||
SIOML==8 ;LENGTH OF ENTRY IN TRANSLATION TABLE
|
||
|
||
LUPDL==30 ;LENGTH USER PDL
|
||
CPDLL==20 ;LENGTH CLOCK CHANNEL PDL
|
||
DCCHN==1 ;DC CHANNEL
|
||
DCCHNA==200_<-DCCHN>
|
||
UTCCHN==3 ;UTC CHANNEL
|
||
GETYOC==4 ;GE TYPOUT (DATAPHONE)
|
||
LPTCHN==5 ;LINE PRINTER CHANNEL
|
||
TTYCHN==5 ;TTY CHANNEL
|
||
DISCHN==6
|
||
SDCHN==5
|
||
GETYIC==5 ;GE TYPEIN DEV 70
|
||
UTCON==2001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN>
|
||
UTCOFF==1001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN>
|
||
CUINT==5000+UTCCHN
|
||
SCLKI==15. ;SLOW CLOCK PER REG CLOCK
|
||
MXOPT==8. ;SLOW CLOCK MAX UT OP CAN TAKE
|
||
NINFP==8. ;MAX. NO. OF INF. PROCED. / PROCED.
|
||
|
||
|
||
METOF=6 ;OFFSET BETWEEN CONTENTS OF MEMTOP AND HIGHEST ACT
|
||
|
||
GTYI=70 ;DEVICE FOR GE TYPEIN
|
||
GTYO=750 ;DEVICE FOR GE TYPOUT
|
||
VID=754 ;VIDISUCKER
|
||
|
||
DEFINE CONC A,B
|
||
A!B!TERMIN
|
||
DEFINE SUBTTL A/
|
||
TERMIN
|
||
|
||
GO:
|
||
LOC 41
|
||
JSR UUOH
|
||
LOC 40+2*APRCHN
|
||
JSR CLKBRK
|
||
|
||
LOC 40+2*TTYCHN
|
||
JSR TTYBRK
|
||
|
||
LOC 40+2*UTCCHN
|
||
JSR UTCBRK
|
||
|
||
LOC 40+2*DISCHN
|
||
BLKO DIS,DBLKOP
|
||
JSR DRECYC
|
||
|
||
LOC 40+2*GETYOC
|
||
JSR GTYOBK
|
||
JSR GTYOBK
|
||
|
||
LOC GO
|
||
|
||
|
||
SUBTTL TSS INITIALIZATION
|
||
|
||
CONO 633550
|
||
CONO PI,120000+11577
|
||
SETOM DISUSR
|
||
SETOM DISOFF
|
||
CONO DIS,100
|
||
MOVEI A,4
|
||
BAR: CONO TTY,@TTYLT(A)
|
||
DATAI TTY,
|
||
CONO TTY,3600+TTYCHN
|
||
SOJGE A,BAR
|
||
CLEARM USRHI
|
||
CLEARB U,USER
|
||
MOVE P,USRPDL(U)
|
||
PUSHJ P,GEKI ;INITIALIZE GE CONSOLES
|
||
MOVNI T,1
|
||
PUSHJ P,USTRA
|
||
JRST .-1
|
||
MOVEI B,SYSB-1
|
||
PUSHJ P,ACORE
|
||
JFCL
|
||
CLEARM USTP
|
||
CONO PI,UTCON+200
|
||
CONO 3000+APRCHN
|
||
JRST SCOR
|
||
|
||
PAT: BLOCK 200
|
||
SUBTTL PROCESSOR BREAK ROUTINES
|
||
|
||
CLKBRK: 0
|
||
CONSO 1000
|
||
JRST CLKB1 ;LOSSAGE
|
||
SKIPL CDSOFF
|
||
SKIPGE DISOFF
|
||
JRST DSTPD
|
||
AOSG DISON
|
||
JRST DSTRT
|
||
DSTPD: CONO 1000+APRCHN
|
||
AOSG CLKFL1
|
||
JRST 12,@CLKBRK ;EVERY 1/30 SEC
|
||
SETOM CLKFL1
|
||
AOS TIME
|
||
SOSLE CUQUAN ;CHECK QUANTUM
|
||
JRST 12,@CLKBRK
|
||
EXCH P,CPDLP
|
||
PUSH P,T
|
||
PUSH P,U
|
||
MOVE T,SLCLK
|
||
CAMGE T,TIME
|
||
JRST SSLCK ;SERVICE SLOW CLOCK
|
||
CLKSR1: MOVE U,USER
|
||
CLKSR: MOVE T,CLKBRK
|
||
SKIPL U
|
||
MOVEM T,UPC(U)
|
||
PUSHJ P,SEARCH ;SCHEDULE NEW USER
|
||
CLB1B: CAMN U,USER
|
||
JRST CLKB5A
|
||
SKIPGE U
|
||
CLKSC1: HRROI U,ECPDL-AC16S
|
||
POP P,AC17S(U)
|
||
POP P,AC16S(U)
|
||
EXCH P,CPDLP
|
||
JSR SWITCH ;SWAP USERS
|
||
MOVEM T,CLKBRK
|
||
MOVE T,AC16S(U)
|
||
MOVE U,AC17S(U)
|
||
JRST 12,@CLKBRK ;GO AWAY
|
||
|
||
DSTRT: MOVEM A,DISA
|
||
MOVE A,DISPTR
|
||
MOVEM A,DBLKOP
|
||
CONO DIS,100\SDCHN_3\DISCHN
|
||
MOVE A,DISA
|
||
JRST DSTPD
|
||
|
||
CLKB5A: SKIPE SCRFG1
|
||
JRST CLKSC1
|
||
MOVE T,UPC(U)
|
||
SKIPL U
|
||
MOVEM T,CLKBRK
|
||
CLKB5: POP P,U
|
||
POP P,T
|
||
CLKB3: EXCH P,CPDLP
|
||
JRST 12,@CLKBRK ;EXIT WHEN NO SWAP OCCURS
|
||
|
||
CLKB1: CONSZ PI,100000
|
||
JRST PARBRK
|
||
EXCH P,CPDLP ;NOT A CLOCK BREAK
|
||
PUSH P,T
|
||
PUSH P,U
|
||
MOVE U,USER
|
||
MOVE T,CLKBRK
|
||
CONSZ 20
|
||
CONSO 10
|
||
JRST CLB1A ;NOT AROV
|
||
TLZ T,400000
|
||
MOVEM T,CLKBRK
|
||
SKIPN PICLR(U)
|
||
JRST CLKB5
|
||
MOVEI T,AROIF
|
||
IORM T,PIRQC(U) ;SET USER AROV INT
|
||
JRST CLKSR
|
||
|
||
PARBRK: CONO PI,120000
|
||
AOS PARERR
|
||
JRST 12,@CLKBRK
|
||
|
||
PARERR: 0
|
||
|
||
|
||
|
||
CLB1A: CONSO 230000
|
||
JRST CLKB5 ;NOT PROCESSOR INT
|
||
TLNN T,LSRMOD
|
||
JRST 4,. ;ERROR IN EXEC MODE-SYSTEM DEAD!
|
||
MOVEM T,UPC(U)
|
||
CONI 1(P)
|
||
MOVEI T,230000
|
||
ANDM T,1(P)
|
||
CONO 430000+APRCHN
|
||
MOVEI T,BADBTS
|
||
IOR T,MSKST(U)
|
||
AND T,1(P)
|
||
JUMPE T,CLKB5
|
||
IORM T,PIRQC(U) ;BLAME IT ON THE USER
|
||
JRST CLKSR1
|
||
;SLOW CLOCK SERVICE ROUTINE
|
||
|
||
SSLCK: ADDI T,SCLKI
|
||
MOVEM T,SLCLK
|
||
CONSO UTC,4000 ;TIME FLG ENB
|
||
SKIPGE UIDLE
|
||
JRST SSLCK1
|
||
MOVE T,TIME
|
||
SUB T,LUTOTM
|
||
CAIGE T,MXOPT*SCLKI
|
||
JRST SSLCK1
|
||
SETOM UTHERR
|
||
CONO UTC,CUINT
|
||
SSLCK1: AOSN UIDLE
|
||
CONO UTC,CUINT
|
||
JRST CLKSR1
|
||
|
||
SUBTTL USER SCHEDULER
|
||
|
||
SEARCH: CLEARM SCRFG1
|
||
CLEARM SRCS
|
||
SETOM U0
|
||
SKIPL T,UTTYST
|
||
JRST USTART ;NEW USER START HIM UP
|
||
USTSCH: SKIPN USRHI
|
||
POPJ P,
|
||
SKIPGE U
|
||
MOVEI U,0
|
||
SEARL: ADDI U,LUBLK ;FIND NEXT USER COMING OUT OF I-O WAIT
|
||
CAML U,USRHI ;OR, IF NONE, NEXT USER
|
||
MOVEI U,0
|
||
SKIPE UNAME(U)
|
||
SKIPE USTP(U)
|
||
JRST SEARW
|
||
SEARLP: SKIPN PIRQC(U)
|
||
JRST SEAR2
|
||
MOVEI T,BADBTS ;INTERRUPT USER IF REQUESTED
|
||
SKIPE PICLR(U)
|
||
IOR T,MSKST(U)
|
||
AND T,PIRQC(U)
|
||
JUMPE T,SEAR2 ;NOT ENABLED & NOT BAD
|
||
CAMN U,USER
|
||
PUSHJ P,SBRK1 ;WANT TO INT CURRENT LOSER; STORE MACHINE CONDITIONS
|
||
PUSHJ P,PCLSR
|
||
JRST SEARC ;CAN'T INTERRUPT NOW
|
||
MOVE T,PIRQC(U)
|
||
ANDCM T,MSKST(U)
|
||
ANDI T,BADBTS
|
||
SKIPE PICLR(U)
|
||
JUMPE T,SBRK69
|
||
PUSHJ P,INTSUP ;USER LOSES TOO BADLY, INTERRUPT SUP. PROCEDURE
|
||
JRST SEARW
|
||
|
||
SBRK69: CLEARM PICLR(U) ;INTERRUPT LOSER
|
||
CONO PI,UTCOFF-<200_-<APRCHN>>
|
||
PUSH P,PIRQC(U)
|
||
CLEARM PIRQC(U)
|
||
CONO PI,UTCON-<200_-<APRCHN>>
|
||
MOVE T,UPR(U)
|
||
HRRZ T,42(T)
|
||
CAIL T,20
|
||
CAML T,MEMTOP(U)
|
||
JRST SERR
|
||
TLO T,LSRMOD
|
||
PUSH P,T
|
||
ADD T,UPR(U)
|
||
PUSH T,UPC(U)
|
||
AOS (P)
|
||
AOS (P)
|
||
POP P,UPC(U)
|
||
POP P,-1(T)
|
||
|
||
|
||
URUN:SEARE: AOSN SCRFLG ;RESTORE CURRENT USER TO ACTUAL MACHINE IF NECESSARY
|
||
PUSHJ P,SBRK2
|
||
SEARTN: JUMPGE U,SEARX1
|
||
AOSN SRCS
|
||
JRST SEARCH
|
||
SEARX1: SKIPL U
|
||
CLEARM FLSINS(U)
|
||
EXCH U,USER
|
||
POPJ P, ;RUN LOSER
|
||
|
||
SEAR2: SKIPN FLSINS(U)
|
||
JRST SEARC
|
||
MOVE T,EPDL2(U)
|
||
XCT FLSINS(U) ;TEST I-O WAIT INSTRUCTION
|
||
JRST SEARW ;NO SKIP UNRUNABLE 1 HIGH PRIOR 2 LOW
|
||
JRST SEARE
|
||
|
||
|
||
SEARC: SKIPGE U0 ;SKIPPED INTO FROM ABOVE
|
||
MOVEM U,U0
|
||
SEARW: CAMN U,USER
|
||
JRST SEARW1
|
||
SKIPGE USER
|
||
SKIPE U
|
||
JRST SEARL
|
||
SEARW1: MOVE U,U0
|
||
JRST SEARE
|
||
|
||
|
||
|
||
SERR: POP P,PIRQC(U) ;BAD INTERRUPT LOCATION
|
||
MOVEI T,BPIPI
|
||
IORM T,PIRQC(U)
|
||
JRST SEARLP
|
||
|
||
SBRK1: PUSH P,USER
|
||
SETOM USER
|
||
JSR SWITCH
|
||
POP P,U
|
||
MOVEM U,USER
|
||
SETOM SCRFLG
|
||
POPJ P,
|
||
|
||
SBRK2: PUSH P,U
|
||
MOVEM P,PSAVE
|
||
MOVNI U,1
|
||
JSR SWITCH
|
||
MOVE P,PSAVE
|
||
POP P,U
|
||
POPJ P,
|
||
|
||
;PUT PC IN LOSER MODE
|
||
|
||
PCLSR: MOVE T,SUEXIT(U)
|
||
SKIPE MEMTOP(U) ;NO CORE (IN CORE ASSIGN ROUTINE
|
||
CAME T,[JRST 2,@UUOH
|
||
POPJ P, ;WILL HAPPEN SOON
|
||
MOVE T,UPC(U)
|
||
TLNE T,LSRMOD
|
||
JRST POPJ1 ;HAPPY
|
||
SKIPE FLSINS(U)
|
||
JUMPN U,PCLSR1 ;BACK UP TO UUO
|
||
PCLSR4: MOVE T,[JRST ONEFLS ;MUNG EXIT OF UUO, COME BACK LATER
|
||
MOVEM T,SUEXIT(U)
|
||
POPJ P,
|
||
|
||
|
||
PCLSR1: HLRZ T,FLSINS(U)
|
||
CAIN T,(JRST)
|
||
JRST PCLSR4 ;EXEC FLUSH, RUN USER TO CLEAR, BUT MUNG EXIT
|
||
SOS T,SUUOH(U)
|
||
MOVEM T,UPC(U)
|
||
CLEARM FLSINS(U)
|
||
MOVEI T,AC0S(U)
|
||
HRL T,UPR(U)
|
||
PCLSR3: BLT T,AC17S(U)
|
||
SETOM SCRFG1
|
||
JRST POPJ1 ;BACK UP TO UUO, RESTORING ACS
|
||
|
||
INTSUP: PUSH P,U
|
||
SKIPGE U,SUPPRO(U)
|
||
JRST URSTRT
|
||
HLLZ T,U
|
||
IORM T,PIRQC(U)
|
||
POP P,U
|
||
MOVSI T,BUSRC
|
||
IORM T,USTP(U)
|
||
SETOM SRCS
|
||
POPJ P,
|
||
|
||
SUBTTL USER SWAP
|
||
|
||
|
||
SWITCH: 0
|
||
JUMPL U,SWT1
|
||
MOVEI T,AC0S(U)
|
||
BLT T,AC15S(U)
|
||
MOVSI T,UEXIT
|
||
HRRI T,UUO(U)
|
||
BLT T,AC17P-UEXIT+UUO(U)
|
||
MOVE T,40
|
||
MOVEM T,SV40(U)
|
||
SWT1: SKIPGE U,USER
|
||
JRST SWT2
|
||
MOVE T,SV40(U)
|
||
MOVEM T,40
|
||
MOVSI T,UUO(U)
|
||
HRRI T,UEXIT
|
||
BLT T,AC17P
|
||
DATAO UPR(U)
|
||
CONO @APRC(U)
|
||
MOVE T,UQUAN(U)
|
||
MOVEM T,CUQUAN
|
||
MOVSI T,AC0S(U)
|
||
BLT T,T-1
|
||
MOVE T,UPC(U)
|
||
JRST @SWITCH
|
||
|
||
|
||
SWT2: MOVEI T,NULJOB
|
||
JRST @SWITCH
|
||
;SUBTTL USER START ROUTINES
|
||
|
||
USTART: PUSH P,U
|
||
PUSHJ P,USTRA
|
||
JRST USTSC1
|
||
SUB P,[1,,1
|
||
MOVE T,[1,,(SIXBIT /HTN/)
|
||
MOVEM T,JNAME(U)
|
||
MOVEI T,USTCD
|
||
MOVEM T,UPC(U)
|
||
CLEARM USTP(U)
|
||
SETOM UTTYST
|
||
JRST SEARTN
|
||
|
||
USTSC1: POP P,U
|
||
JRST USTSCH
|
||
|
||
USTRA: MOVEI U,0 ;-1(P) MUST BE U
|
||
|
||
USTR3: CAML U,USRHI
|
||
JRST USTR1 ;ASSIGN MORE CORE TO USER STORAGE
|
||
SKIPN UNAME(U)
|
||
JRST USTR2
|
||
ADDI U,LUBLK
|
||
JRST USTR3
|
||
|
||
MORCOR: MOVE U,-2(P)
|
||
SUB P,[1,,1]
|
||
SETOM SUPCOR
|
||
POPJ P,
|
||
|
||
USTR1: MOVEI U,LUBLK
|
||
ADD U,USRHI
|
||
PUSH P,T
|
||
MOVE T,SYSL
|
||
CAIG T,USRSTG(U)
|
||
JRST MORCOR
|
||
POP P,T
|
||
EXCH U,USRHI
|
||
|
||
USTR2: PUSHJ P,USTR4
|
||
MOVEI T,SIOCHN(U)
|
||
MOVEM T,SIOCP(U)
|
||
CLEARM IOCHNM(U)
|
||
HRLI T,IOCHNM(U)
|
||
HRRI T,IOCHNM+1(U)
|
||
BLT T,IOCHNM+17(U)
|
||
JRST POPJ1
|
||
|
||
|
||
USTR4: SETOM USTP(U) ;TTY NO IN T
|
||
SETOM UNAME (U)
|
||
MOVEM T,TTYTBL(U)
|
||
SKIPL T
|
||
HRRZM U,TTYSTS(T)
|
||
MOVSI T,BUSRC
|
||
MOVEM T,USTP(U)
|
||
MOVSI T,LSRMOD
|
||
MOVEM T,UPC(U)
|
||
HRLI T,-LUPDL
|
||
HRRI T,UPDL-1(U)
|
||
MOVEM T,USRPDL(U)
|
||
CLEARM UPR(U)
|
||
CLEARM MSKST(U)
|
||
MOVE T,[JRST 2,@UUOH
|
||
MOVEM T,SUEXIT(U)
|
||
MOVEI T,APRCHN+40
|
||
MOVEM T,APRC(U)
|
||
CLEARM PIRQC(U)
|
||
SETOM SUPPRO(U)
|
||
SETOM PICLR(U)
|
||
CLEARM FLSINS(U)
|
||
CLEARM MEMTOP(U)
|
||
CLEARM RMEMT(U)
|
||
MOVSI T,(MOVEM U,)
|
||
MOVEM T,SAC17P(U)
|
||
POPJ P,
|
||
|
||
COREX: LSH TT,-10.
|
||
CORE 2(TT)
|
||
JRST .-1
|
||
LSH TT,10.
|
||
MOVEI J,2000-METOF-2(TT)
|
||
JRST (P)
|
||
|
||
UADRS2: LSH A,10.
|
||
UADRS1: HRRM A,UPR(U)
|
||
UADRS: MOVEI B,14(A) ;SET PNTRS FOR USER U USER MEM STARTING AT C(A)
|
||
MOVEM B,AC14P(U)
|
||
AOS B
|
||
MOVEM B,AC15P(U)
|
||
AOS B
|
||
MOVEM B,AC16P(U)
|
||
AOS B
|
||
CAMN U,USER
|
||
HRRM B,AC17P
|
||
HRRM B,SAC17P(U)
|
||
ADDI B,21
|
||
MOVEM B,40P(U)
|
||
AOS B
|
||
MOVEM B,41P(U)
|
||
CAME U,DISUSR
|
||
POPJ P,
|
||
PUSH P,A
|
||
SUB A,DRELOC
|
||
ADDM A,DBLKOP
|
||
ADDM A,DISPTR
|
||
ADDM A,DRELOC
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
|
||
|
||
0 ;MAKE FLS INS ZERO
|
||
USTCD3: PUSHJ P,UFLS
|
||
|
||
USTCD: MOVE U,USER ;CODE TO LOAD USER HACKTRN
|
||
MOVE P,USRPDL(U)
|
||
MOVEI B,1
|
||
PUSHJ P,ACORE
|
||
JRST USTCD3
|
||
MOVEI J,2000-METOF-2
|
||
MOVE A,[(6+SIXBIT /UT2/
|
||
MOVSI B,(SIXBIT /@/
|
||
MOVE C,[SIXBIT /HACTRN/
|
||
OPEN 2,A
|
||
JRST 4,.
|
||
USTCD1: CAMN B,[JRST 1
|
||
TLZ C,400000 ;BIT SET FROM SIXBIT HACTRN
|
||
HRROI A,B
|
||
IOT 2,A
|
||
JUMPL C,USTCD1
|
||
JUMPGE B,USTCD2
|
||
MOVE D,B
|
||
HRRZ TT,B
|
||
HLRO I,B
|
||
SUB TT,I
|
||
CAML TT,J
|
||
JSP P,COREX ;PDL CLOBBERED BY UUO
|
||
IOT 2,B
|
||
HRRZ B,UPR(U)
|
||
ADD B,D
|
||
ROT D,1
|
||
ADD D,(B)
|
||
AOBJN B,.-2
|
||
HRROI A,B
|
||
IOT 2,A
|
||
CAME B,D
|
||
JRST USTCD
|
||
JRST USTCD1
|
||
|
||
USTCDR: MOVE U,USER
|
||
MOVE P,USRPDL(U)
|
||
PUSHJ P,IODCL
|
||
JRST USTCD
|
||
|
||
|
||
IODCL: PUSHJ P,ADFLUSH
|
||
MOVEI R,IOCHNM(U)
|
||
IODCL1: PUSH P,R
|
||
PUSHJ P,ACLOSE
|
||
POP P,R
|
||
CAIGE R,IOCHNM+17(U)
|
||
AOJA R,IODCL1
|
||
IODCL2: MOVEI R,IOCHNM+1(U)
|
||
PUSHJ P,ACLOSE
|
||
MOVE T,SIOCP(U)
|
||
TLNN T,-1
|
||
POPJ P,
|
||
POP T,(R)
|
||
MOVEM T,SIOCP(U)
|
||
JRST IODCL2
|
||
|
||
URSTRT: POP P,U
|
||
POP P,EPDL(U)
|
||
MOVE T,TTYTBL(U)
|
||
PUSH P,UPR(U)
|
||
PUSH P,MEMTOP(U)
|
||
PUSH P,SAC17P(U)
|
||
PUSH P,RMEMT(U)
|
||
PUSHJ P,USTR4
|
||
POP P,RMEMT(U)
|
||
POP P,SAC17P(U)
|
||
POP P,MEMTOP(U)
|
||
POP P,UPR(U)
|
||
MOVE T,[1,,(SIXBIT /HTN/)
|
||
MOVEM T,JNAME(U)
|
||
MOVEI T,USTCDR
|
||
MOVEM T,UPC(U)
|
||
CLEARM USTP(U)
|
||
JRST URUN
|
||
|
||
USTCD2: CLOSE 2,
|
||
JRST 1,(B)
|
||
;SUBTTL USER UUO WAIT ROUTINE
|
||
UFLS: CONO PI,CLKOFF ;DOES NOT WORK FOR XCT T
|
||
EXCH U,USER
|
||
MOVEM T,EPDL2(U) ;SAVE C(U)
|
||
MOVE T,USER ;AND C(T) FOR FLSINS
|
||
MOVEM T,EPDL1(U)
|
||
MOVEM U,USER
|
||
POP P,T ;WORK FOR INST (P)
|
||
MOVEM T,UPC(U)
|
||
SKIPA T,-2(T)
|
||
UFL3: MOVE T,(T)
|
||
HRRI T,@T ;CALCULATE E
|
||
TLZ T,37
|
||
MOVEM T,FLSINS(U)
|
||
TLC T,(XCT)
|
||
TLNN T,777740
|
||
JRST UFL3 ;WORK FOR XCT
|
||
PUSHJ P,SEARCH ;FIND NEW USER
|
||
CAMN U,USER
|
||
JRST UFL1 ;SAME USER
|
||
MOVE T,EPDL2(U)
|
||
MOVEM T,AC16S(U)
|
||
MOVE T,EPDL1(U)
|
||
MOVEM T,AC17S(U)
|
||
UFL2: JSR SWITCH ;SWAP USERS
|
||
JUMPL U,NULJOB
|
||
XORI T,UFL4
|
||
TDNN T,[LSRMOD,.-1]
|
||
JRST .+3 ;LOSE LOSE
|
||
XORI T,UFL4
|
||
MOVEM T,URSTR
|
||
MOVE T,AC16S(U)
|
||
MOVE U,AC17S(U)
|
||
UFL4A: CONO PI,CLKON ;CAUSE OF LOSE LOSE
|
||
UFL4: JRST 2,@URSTR
|
||
|
||
|
||
NULJOB: AOSN UIDLE
|
||
CONO UTC,CUINT
|
||
CONO PI,CLKON
|
||
MOVEI
|
||
MOVSI 1,(AOJA)
|
||
AOJA 1,1
|
||
|
||
UFL1: SKIPE SCRFG1
|
||
JRST UFL6
|
||
MOVE T,UPC(U)
|
||
MOVEM T,URSTR
|
||
MOVE T,EPDL2(U)
|
||
JRST UFL4A
|
||
|
||
UFL6: MOVNI U,1
|
||
JRST UFL2
|
||
|
||
LWAIT1: CONO PI,UTCON ;WAIT FOR INS W UTCCHN OFF
|
||
LWAIT: XCT @(P)
|
||
PUSHJ P,UFLS
|
||
CONO PI,UTCOFF
|
||
XCT @(P)
|
||
JRST LWAIT1
|
||
JRST POPJ1
|
||
|
||
SWAIT: MOVEI T,(@) ;WAIT FOR @ NEXT LOC TO BE NEG
|
||
HRLM T,(P)
|
||
SKIPL @(P)
|
||
PUSHJ P,UFLS
|
||
AOSE @(P)
|
||
JRST SWAIT 2
|
||
JRST POPJ1
|
||
SUBTTL UUO PROCESSOR
|
||
|
||
IOT=UUOMIN
|
||
OPEN=UUOMIN+1_27.
|
||
OPER=UUOMIN+2_27.
|
||
CALL=UUOMIN+3_27.
|
||
USET=UUOMIN+4_27.
|
||
BREAK=UUOMIN+5_27.
|
||
|
||
DISMIS=CALL 1,
|
||
TRAND=CALL 2,
|
||
TRANAD=CALL 3,
|
||
VALRET=CALL 4,
|
||
UTRAN=CALL 5,
|
||
CORE=CALL 6,
|
||
TRNDL=CALL 7,
|
||
DSTART=CALL 10,
|
||
FDELE=CALL 11,
|
||
|
||
ITYI=OPER 1
|
||
LISTEN=OPER 2
|
||
SLEEP=OPER 3
|
||
SETMSK=OPER 4
|
||
GETMSK=OPER 5
|
||
LOGIN=OPER 6
|
||
CLOSE=OPER 7
|
||
UFLUSH=OPER 10
|
||
ATTY=OPER 11
|
||
GBLTTY=OPER 12
|
||
IPUSH=OPER 13
|
||
IPOP=OPER 14
|
||
DFLUSH=OPER 15
|
||
DSTOP=OPER 16
|
||
RDTIME=OPER 17
|
||
RDSW=OPER 20
|
||
LPEN=OPER 21
|
||
UDISMT=OPER 22
|
||
|
||
.RUPC==0
|
||
.RVAL==1
|
||
.RILOOK==2
|
||
.ROLOOK==3
|
||
.RUNAME==4
|
||
.RJNAME==5
|
||
.RMSK==6
|
||
.RUSTP==7
|
||
.RPIRQC==10
|
||
.RINTB==11
|
||
.RMEMT==12
|
||
.RSV40==13
|
||
|
||
.SUPC==400000
|
||
.SVAL==400001
|
||
.SILOOK==400002
|
||
.SOLOOK==400003
|
||
.SMSK==400006
|
||
.SUSTP==400007
|
||
.SPIRQC==400010
|
||
|
||
|
||
USRUUO: MOVEM T,@40P(U) ;USER INTERPRETED UUO
|
||
HRRZ T,@41P(U)
|
||
CAIL T,20
|
||
CAML T,MEMTOP(U)
|
||
JRST ILLOP
|
||
HRLI U,1(T)
|
||
ADD T,UPR(U)
|
||
HRLI T,UUOH
|
||
BLT T,0
|
||
HLRM U,UUOH
|
||
UUOEX: MOVE T,@AC16P(U)
|
||
MOVE U,@AC17P
|
||
UEXIT: JRST 2,@UUOH
|
||
|
||
URSTR: 0
|
||
UUOH: 0
|
||
AC17P: MOVEM U,.
|
||
MOVE U,USER
|
||
MOVEM T,@AC16P(U)
|
||
SKIPL T,40
|
||
CAML T,[100000,,
|
||
JRST ILLOP
|
||
CAML T,[UUOMIN
|
||
CAML T,[UUOMAX
|
||
JRST USRUUO
|
||
ILLOP1: MOVEM P,@AC15P(U)
|
||
HRRZ P,UPR(U)
|
||
BLT P,@AC14P(U)
|
||
MOVE P,USRPDL(U)
|
||
LSH T,-27.
|
||
XCT UUODSP-UUOMIN_-27.(T)
|
||
URET: HRLZ U,UPR(U)
|
||
BLT U,U
|
||
JRST UEXIT
|
||
|
||
|
||
ONEFLS: CONO PI,CLKOFF
|
||
MOVE U,USER
|
||
HRRZ T,UPR(U)
|
||
BLT T,@AC15P(U)
|
||
MOVE T,[JRST 2,@UUOH
|
||
MOVEM T,UEXIT
|
||
MOVE P,USRPDL(U)
|
||
ILLOP3: AOS UUOH
|
||
|
||
UUOE1: CONO PI,CLKOFF
|
||
SOS T,UUOH
|
||
MOVEM T,UPC(U)
|
||
PUSHJ P,SEARCH
|
||
CAMN U,USER
|
||
JRST UFL7
|
||
UFL8: HRLZ P,UPR(U)
|
||
BLT P,P
|
||
MOVE T,@AC16P(U)
|
||
MOVEM T,AC16S(U)
|
||
MOVE T,@AC17P
|
||
MOVEM T,AC17S(U)
|
||
JRST UFL2
|
||
|
||
UFL7: SKIPN SCRFG1
|
||
JRST UFL8
|
||
MOVNI U,1
|
||
JRST UFL2
|
||
|
||
|
||
ILUUO: MOVEI T,BILLOP
|
||
|
||
UUOERR: IORM T,PIRQC(U)
|
||
MOVE T,40
|
||
MOVEM T,@40P(U)
|
||
JRST UUOE1
|
||
|
||
|
||
IOADC: MOVEI T,BIOADC
|
||
JRST UUOERR
|
||
|
||
|
||
|
||
;CODE TO BE FLUSHED
|
||
|
||
NSD: JRST URET
|
||
LCDIY: JRST URET
|
||
|
||
IOCERR: MOVEI T,BIOCER
|
||
IORM T,PIRQC(U)
|
||
JRST UUOE1
|
||
NCA: JRST URET
|
||
FILDF: JRST URET
|
||
|
||
UTPFUL: JRST 4,.
|
||
;UUO DISPATCH
|
||
|
||
UUODSP: PUSHJ P,AIOT
|
||
PUSHJ P,AOPEN
|
||
PUSHJ P,AOPER
|
||
PUSHJ P,ACALL
|
||
PUSHJ P,AUSET ;INSERT ADDED UUO'S HERE
|
||
PUSHJ P,ABREAK
|
||
PUSHJ P,ILLOP2
|
||
|
||
|
||
ILLOP: MOVE T,UUOH
|
||
TLNN T,LSRMOD
|
||
JRST 4,.
|
||
MOVSI T,(AUUO)
|
||
JRST ILLOP1
|
||
|
||
ILLOP2: MOVEI T,BILLOP
|
||
ILLOP4: IORM T,PIRQC(U)
|
||
JRST ILLOP3
|
||
|
||
; IOT DISPATCH
|
||
|
||
AIOT: LDB R,[270400,,40
|
||
ADDI R,IOCHNM(U)
|
||
HLRZ A,(R)
|
||
HRRZ B,(R)
|
||
HRRZ C,40
|
||
CAML C,RMEMT(U)
|
||
JRST IOADC
|
||
ADDI C,@UPR(U)
|
||
JRST @IOTTB(B)
|
||
|
||
;USET DISPATCH
|
||
AUSET: HRRZ C,40
|
||
CAML C,RMEMT(U)
|
||
JRST IOADC
|
||
ADDI C,@UPR(U)
|
||
LDB R,[270400,,40
|
||
ADDI R,IOCHNM(U)
|
||
HLRZ A,(R)
|
||
HRRZ B,(R)
|
||
SKIPL CLSTB(B)
|
||
JRST IOCERR ;NO USER IS OPENED ON THIS CHANNEL
|
||
HRRZ B,(C)
|
||
CAML B,RMEMT(U)
|
||
JRST IOADC
|
||
ADDI B,@UPR(U)
|
||
HLRZ Q,(C)
|
||
TRZE Q,400000
|
||
JRST OUTLOC
|
||
CAIL Q,MXVAL
|
||
JRST ILUUO
|
||
XCT USETL(Q)
|
||
MOVEM D,(B)
|
||
POPJ P,
|
||
|
||
USETL: MOVE D,UPC(A)
|
||
MOVE D,VALUE(A)
|
||
MOVE D,UILOOK(A)
|
||
MOVE D,UOLOOK(A)
|
||
MOVE D,UNAME(A)
|
||
MOVE D,JNAME(A)
|
||
MOVE D,MSKST(A)
|
||
MOVE D,USTP(A)
|
||
MOVE D,PIRQC(A)
|
||
HLLZ D,SUPPRO(A)
|
||
MOVE D,RMEMT(A)
|
||
MOVE D,SV40(A)
|
||
MXVAL==.-USETL
|
||
|
||
OUTLOC: CAIL Q,MXVAL
|
||
JRST ILUUO
|
||
MOVE D,(B)
|
||
XCT USETL1(Q)
|
||
POPJ P,
|
||
|
||
USETL1: PUSHJ P,UPCSET
|
||
MOVEM D,VALUE(A)
|
||
MOVEM D,UILOOK(A)
|
||
MOVEM D,UOLOOK(A)
|
||
JRST ILUUO
|
||
JRST ILUUO
|
||
MOVEM D,MSKST(A)
|
||
PUSHJ P,USTOP
|
||
MOVEM D,PIRQC(A)
|
||
JRST ILUUO
|
||
JRST ILUUO
|
||
JRST ILUUO
|
||
|
||
USTOP: EXCH U,A
|
||
CONO PI,CLKOFF
|
||
SKIPN USTP(U)
|
||
PUSHJ P,PCCK
|
||
DPB D,[410100,,USTP(U) ;BUSRC
|
||
CONO PI,CLKON
|
||
EXCH U,A
|
||
POPJ P,
|
||
|
||
UPCSET: EXCH U,A
|
||
PUSHJ P,PCCK
|
||
TLO D,LSRMOD
|
||
TLZ D,BADPC
|
||
MOVEM D,UPC(U)
|
||
CONO PI,CLKON
|
||
EXCH U,A
|
||
POPJ P,
|
||
|
||
AFDELE: CAML B,MEMTOP(U)
|
||
JRST IOADC
|
||
PUSH P,(C)
|
||
MOVSI T,(SETZ)
|
||
IORM T,(P)
|
||
JRST AFDEL1
|
||
|
||
;SUBTTL OPEN SET UP AND DISPATCH
|
||
|
||
;3.1 = 0 => INPUT =1 OUTPUT
|
||
;3.2=0 => UNITS =1 BLOCK
|
||
;3.3=0 => ASCII =1 IMAGE
|
||
;4.9 = DELETE OR RENAME
|
||
|
||
AOPEN: LDB R,[2700400,,40 ;OPEN UUO
|
||
HRRZ C,40
|
||
CAML C,MEMTOP(U)
|
||
JRST IOADC
|
||
ADDI C,@UPR(U)
|
||
ADDI R,IOCHNM(U) ;C E(40) T AC(40)
|
||
HLRZ A,(R) ;OPEN FORMAT RH = DEV NAME
|
||
HRRZ B,(R) ;2ND IN 3RD WDS FILE NAME
|
||
PUSH P,R
|
||
PUSH P,C
|
||
PUSHJ P,@CLSTB(B) ;CLOSE PREV
|
||
POP P,C
|
||
POP P,R
|
||
CLEARM (R)
|
||
PUSH P,(C) ;GET DEV AND FILE NAMES
|
||
AFDEL1: PUSH P,1(C)
|
||
PUSH P,2(C)
|
||
PUSHJ P,TRAN ;IO MAP
|
||
JRST URET
|
||
MOVE A,-2(P)
|
||
MOVSI B,-NDEVS
|
||
HRRZ C,DEVTAB(B)
|
||
CAIE C,(A)
|
||
AOBJN B,.-2
|
||
JUMPG B,OPEN1
|
||
MOVSI C,400000
|
||
TLNE A,1
|
||
MOVSI C,200000
|
||
TDNN C,DEVTAB(B)
|
||
JRST LCDIY ;IO DEVICE DOSN'T GO THAT WAY
|
||
HLRZ C,DEVTAB(B)
|
||
OPEN2: ANDI C,177777
|
||
POP P,B
|
||
POP P,A
|
||
EXCH C,(P)
|
||
HLRZ D,C
|
||
ROT D,-1 ;A,B FILE NAME C MAPPED DEV +OPTION SEL
|
||
TRNE D,200000
|
||
TDZ D,[400000,,7] ;MAKE DELETE OR RENAME LOOK LIKE OPEN FOR READ
|
||
POPJ P, ;IF DELE OR RENAME, 4.8 OF D =1
|
||
|
||
|
||
OPEN1: LDB E,[61400,,A ;CHECK FOR NUMBERED DEV
|
||
LDB I,[600,,A
|
||
CAIL I,'0
|
||
CAILE I,'9
|
||
JRST NSD ;NO SUCH DEVICE
|
||
SUBI I,'0
|
||
MOVSI C,-NDV1
|
||
HRRZ B,DVT1(C)
|
||
CAIE B,(E)
|
||
AOBJN C,.-2
|
||
JUMPG C,NSD
|
||
HLRZ C,DVT1(C)
|
||
JRST OPEN2
|
||
|
||
|
||
CLSTB: CPOPJ ;SYS CLOSETAB
|
||
LPTCLS
|
||
TYICLS
|
||
TYOCLS
|
||
REPEAT 4,CPOPJ
|
||
REPEAT 4,SETZ CPOPJ
|
||
UTICL
|
||
UTOCLR
|
||
UTICL
|
||
UTOCL
|
||
UTICL
|
||
UTOCL
|
||
VIDCLS
|
||
|
||
IOTTB: IOCERR
|
||
LPTDN==.-IOTTB
|
||
PILPT1
|
||
TYIDN==.-IOTTB
|
||
TYI
|
||
TYODN==.-IOTTB
|
||
TYO
|
||
NLIDN==.-IOTTB
|
||
NULI
|
||
NLBIDN==.-IOTTB
|
||
NULBI
|
||
NLODN==.-IOTTB
|
||
NULOD
|
||
NLBDN==.-IOTTB
|
||
NULBOD
|
||
UWIDN==.-IOTTB
|
||
UWI
|
||
UWODN==.-IOTTB
|
||
UWO
|
||
UBODN==.-IOTTB
|
||
UBO
|
||
UBIDN==.-IOTTB
|
||
UBI
|
||
DNUACII==.-IOTTB
|
||
UASCII
|
||
DNUACCO==.-IOTTB
|
||
UASCCO
|
||
DNUBKI==.-IOTTB
|
||
UBLKI
|
||
DNUBKO==.-IOTTB
|
||
UBLKO
|
||
DNUDTI==.-IOTTB
|
||
UDATAI
|
||
DNUDTO==.-IOTTB
|
||
UDATAO
|
||
VIDOPN==.-IOTTB
|
||
VIDIOT
|
||
;SUBTTL IO TRANSLATOR
|
||
;TRAN1: UNAME
|
||
;TRAN2: JNAME
|
||
;TRAN3: 4.9 0 RETRANSLATE 1 ATOM 3.1 0 INPUT 1 OUTPUT,,DEV
|
||
;TRAN4: NAME1
|
||
;TRAN5: NAME2
|
||
;TRAN6: DEV
|
||
;TRAN7: NAME 1
|
||
;TRAN8: NAME 2
|
||
|
||
TRAN: MOVEI C,10
|
||
TRAN0: MOVE I,SIOMTU
|
||
ITRN3: SKIPN A,TRAN1
|
||
JRST ITRN1
|
||
CAME A,[SIXBIT /*/]
|
||
CAMN A,UNAME(U)
|
||
SKIPN A,TRAN2(I)
|
||
JRST ITRN1
|
||
CAME A,JNAME(U)
|
||
CAMN A,[SIXBIT /*/]
|
||
JRST ITRN2
|
||
ITRN1: AOBJN I,ITRN3
|
||
JRST POPJ1
|
||
|
||
ITRN2: MOVE B,TRAN4(I)
|
||
CAME B,[SIXBIT /*/]
|
||
CAMN B,-2(P)
|
||
SKIPN B,TRAN5(I)
|
||
JRST ITRN1
|
||
CAME A,[SIXBIT /*/]
|
||
CAMN A,-1(P)
|
||
SKIPN A,TRAN3(I)
|
||
JRST ITRN1
|
||
HRRZ B,A
|
||
XOR A,-3(P)
|
||
CAIN B,(SIXBIT /*/)
|
||
JRST ITRN5
|
||
TDNE A,[IOBIT,,-1]
|
||
JRST ITRN1
|
||
ITRN4: HRRZ A,TRAN6(I)
|
||
CAIE A,(SIXBIT /*/)
|
||
HRRM A,-3(P)
|
||
MOVE A,TRAN7(I)
|
||
CAME A,[SIXBIT /*/]
|
||
MOVEM A,-2(P)
|
||
MOVE A,TRAN8(I)
|
||
CAME A,[SIXBIT /*/]
|
||
MOVEM A,-1(P)
|
||
SKIPGE TRAN3(I)
|
||
JRST POPJ1
|
||
SOJG C,TRAN0
|
||
POPJ P,
|
||
|
||
ITRN5: TLNE A,IOBIT
|
||
JRST ITRN1
|
||
JRST ITRN4
|
||
|
||
DEVTAB: 200000+LPTO,,(SIXBIT /LPT/) ;4.8 OUTPUT 4.9 INPUT
|
||
600000+TTYO1,,(SIXBIT /TTY/)
|
||
600000+NULO,,(SIXBIT /NUL/)
|
||
600000+USRO,,(SIXBIT /USR/)
|
||
400000+VIDI,,(SIXBIT /VID/)
|
||
|
||
NDEVS==.-DEVTAB
|
||
|
||
DVT1: TTYO,,<SIXBIT /TY/>_-24.
|
||
UTO,,<SIXBIT /UT/>_-24.
|
||
|
||
NDV1==.-DVT1
|
||
|
||
GET40: LDB R,[270400,,40
|
||
GET40A: HRRZ C,40
|
||
CAML C,MEMTOP(U)
|
||
JRST IOADC
|
||
ADDI C,@UPR(U)
|
||
POPJ P,
|
||
|
||
;SUBTTL OPER DISPATCH
|
||
|
||
AOPER: LDB R,[270400,,40
|
||
MOVE J,R
|
||
ADDI J,@UPR(U)
|
||
ADDI R,IOCHNM(U)
|
||
HRRZ C,40
|
||
CAIL C,MXOPR
|
||
JRST ILUUO
|
||
PUSHJ P,@OPRDSP(C)
|
||
POPJ P,
|
||
AOS UUOH
|
||
POPJ P,
|
||
|
||
OPRDSP: ILUUO
|
||
AITYI
|
||
ALISTEN
|
||
ASLEEP
|
||
ASETMSK
|
||
AGETMSK
|
||
ALOGIN
|
||
ACLOSE
|
||
AUFLUSH
|
||
AATTY
|
||
AGBLTTY
|
||
AIPUSH
|
||
AIPOP
|
||
ADFLUSH
|
||
ADSTOP
|
||
AREDTIM
|
||
AREDDTS
|
||
ALTPOP
|
||
AUTDM
|
||
|
||
MXOPR==.-OPRDSP
|
||
|
||
|
||
;SUBTTL CALL DISPATCH
|
||
|
||
ACALL: LDB T,[270400,,40
|
||
HRRZ B,40
|
||
MOVE C,B
|
||
ADDI C,@UPR(U)
|
||
PUSHJ P,@CALDIS(T)
|
||
POPJ P,
|
||
JRST RSKP
|
||
CALDIS: ILUUO
|
||
ADISMIS
|
||
ATRAND
|
||
ATRANAD
|
||
AVALRET
|
||
AUTRAN
|
||
UACORE
|
||
ATRNDL
|
||
ADSTART
|
||
AFDELE
|
||
REPEAT 20-.+CALDIS,ILUUO
|
||
|
||
ACLOSE: HLRZ A,(R) ;OPER 7
|
||
HRRZ B,(R)
|
||
PUSH P,R
|
||
PUSHJ P, @CLSTB(B)
|
||
POP P,R
|
||
CLEARM (R)
|
||
POPJ P,
|
||
|
||
AVALRET: MOVE C,(C)
|
||
MOVEM C,VALUE(U)
|
||
MOVEI T,VALRTF
|
||
JRST ILLOP4
|
||
|
||
ABREAK: MOVEI T,BRKF
|
||
JRST ILLOP4
|
||
|
||
AUTRAN: CAML C,RMEMT(U)
|
||
JRST IOCERR
|
||
MOVEI A,0 ;CALL 5,
|
||
MOVE B,(C)
|
||
HRR B,U
|
||
UTRNL: SKIPN UNAME(A)
|
||
JRST UTRNA
|
||
CAMN B,SUPPRO(A)
|
||
JRST UTFND
|
||
UTRNA: CAML A,USRHI
|
||
POPJ P,
|
||
ADDI A,LUBLK
|
||
JRST UTRNL
|
||
|
||
UTFND: MOVE B,UNAME(A)
|
||
MOVEM B,1(C)
|
||
MOVE B,JNAME(A)
|
||
MOVEM B,2(C)
|
||
JRST POPJ1
|
||
|
||
PCCK1: CONO PI,CLKON
|
||
PUSHJ P,UDELAY
|
||
PCCK: CONO PI,CLKOFF
|
||
SKIPN MEMTOP(U)
|
||
POPJ P,
|
||
PUSHJ P,PCLSR
|
||
JRST PCCK1
|
||
POPJ P,
|
||
|
||
|
||
AUFLUSH: HRRZ B,(R) ;OPER 10
|
||
HLRZ A,(R)
|
||
SKIPL CLSTB(B)
|
||
JRST IOCERR
|
||
MOVNI D,1
|
||
PUSHJ P,USTOP
|
||
CLEARM (R)
|
||
MOVEI R,IOCHNM(U)
|
||
AUFLS1: HRRZ B,(R)
|
||
HLRZ C,(R)
|
||
SKIPL CLSTB(B)
|
||
JRST AUFLS2
|
||
CAMN C,A
|
||
CLEARM (R)
|
||
AUFLS2: CAIG R,IOCHNM+16(U)
|
||
AOJA R,AUFLS1
|
||
MOVE T,SIOCP(U)
|
||
AUFLS3: TLNN T,-1
|
||
JRST AUFLS4
|
||
POP T,R
|
||
HRRZ C,(R)
|
||
HLRZ D,(R)
|
||
SKIPL CLSTB(C)
|
||
JRST AUFLS3
|
||
CAMN C,A
|
||
CLEARM (T)
|
||
JRST AUFLS3
|
||
AUFLS4: EXCH U,A
|
||
PUSH P,A
|
||
PUSHJ P,IODCL
|
||
MOVEI B,0
|
||
PUSHJ P,ACORE
|
||
JRST .-2
|
||
|
||
AUFLS5: POP P,A
|
||
EXCH U,A
|
||
CLEARM UNAME(A)
|
||
JRST UDELAY
|
||
|
||
ADISMIS: ;CALL 1,
|
||
MOVE B,(C)
|
||
TLO B,LSRMOD
|
||
TLZ B,BADPC
|
||
MOVEM B,UUOH
|
||
MOVE B,TTYTBL(U)
|
||
JUMPL B,ADISM1
|
||
MOVEI C,TTYIF
|
||
SKIPN TINTC(B)
|
||
JRST ADISM1
|
||
IORM C,PIRQC(U)
|
||
MOVE C,[JRST ONEFLS
|
||
MOVEM C,UEXIT
|
||
ADISM1: MOVEI C,AROIF
|
||
ANDCAM C,PIRQC(U)
|
||
SETOM PICLR(U)
|
||
POPJ P,
|
||
|
||
|
||
ASLEEP: SOSL (J) ;OPER 3
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
ALOGIN: MOVE A,UNAME(U) ;OPER 6
|
||
AOJN A,ALOG1 ;JUMP ON ALREADY LOGGED IN
|
||
MOVE A,(J)
|
||
JUMPE A,ALOG1 ;READ JNAME EVEN THOUGH NOT LOGGED IN
|
||
MOVEM A,UNAME(U)
|
||
AOS (P)
|
||
|
||
ALOG1: MOVE A,UNAME(U)
|
||
MOVE B,JNAME(U)
|
||
MOVEM A,(J)
|
||
MOVEM B,1(J)
|
||
POPJ P,
|
||
|
||
AGETMSK: MOVE A,MSKST(U) ;OPER 5
|
||
MOVEM A,(J)
|
||
POPJ P,
|
||
|
||
ASETMSK: MOVE A,(J) ;OPER 4
|
||
TRZ A,BPIPI+VALRTF+BRKF+BCNTRZI ;MAKE SURE THESE GO TO SUP. PRO.
|
||
MOVEM A,MSKST(U)
|
||
MOVEI B,40+APRCHN
|
||
TRNE A,AROIF
|
||
MOVEI B,20+APRCHN
|
||
MOVEM B,APRC(U)
|
||
CONO @APRC(U)
|
||
POPJ P,
|
||
|
||
AREDTIM: SKIPA A,TIME
|
||
AREDDTS: DATAI A
|
||
MOVEM A,(J)
|
||
POPJ P,
|
||
|
||
ATRAND: CAML B,MEMTOP(U)
|
||
JRST IOADC
|
||
PUSH P,(C) ;CALL 2,
|
||
PUSH P,1(C)
|
||
PUSH P,2(C)
|
||
PUSHJ P,TRAN
|
||
JRST URET
|
||
POP P,2(C)
|
||
POP P,1(C)
|
||
POP P,(C)
|
||
JRST POPJ1
|
||
|
||
ATRANAD: CAML B,MEMTOP(U)
|
||
JRST IOADC
|
||
MOVE A,SIOMTU
|
||
SKIPN TRAN1(A)
|
||
JRST ADDTRN
|
||
AOBJN A,.-2
|
||
CONO PI,CLKOFF ;CALL 3,
|
||
MOVE A,SIOMTU
|
||
SUB A,[1,,1]
|
||
HRRE B,A
|
||
JUMPLE B,CLKONJ
|
||
ADDTRN: MOVE B,(C)
|
||
CAME B,UNAME(U)
|
||
POPJ P,
|
||
MOVEM B,TRAN1(A)
|
||
MOVE B,1(C)
|
||
MOVEM B,TRAN2(A)
|
||
MOVEM A,SIOMTU
|
||
CONO PI,CLKON
|
||
IRPC N,,345678
|
||
MOVE B,N-1(C)
|
||
MOVEM B,TRAN!N(A)
|
||
TERMIN
|
||
JRST POPJ1
|
||
CLKONJ: CONO PI,CLKON
|
||
POPJ P,
|
||
|
||
ATRNDL: ;CALL 7,
|
||
MOVE A,SIOMTU
|
||
MOVE B,(C)
|
||
CAME B,UNAME(U)
|
||
POPJ P,
|
||
TRND: IRPC N,,12345678
|
||
MOVE B,TRAN!N(A)
|
||
CAME B,N-1(C)
|
||
JRST TRND2
|
||
TERMIN
|
||
CLEARM TRAN1(A)
|
||
JRST POPJ1
|
||
|
||
TRND2: AOBJN A,TRND
|
||
POPJ P,
|
||
AATT5: CONO PI,CLKON
|
||
PUSHJ P,UDELAY
|
||
|
||
AATTY: HLRZ A,(R) ;OPER 11
|
||
HRRZ B,(R)
|
||
SKIPL CLSTB(B)
|
||
POPJ P,
|
||
CONO PI,CLKOFF
|
||
MOVE B,TTYTBL(U)
|
||
JUMPL B,AATT1 ;DOESNT HAVE TTY NOW
|
||
HLL A,TTYSTS(B)
|
||
TLO A,400000
|
||
MOVEM A,TTYTBL(U)
|
||
AATT4: MOVE D,TTYTBL(A)
|
||
TLNE D,100000
|
||
JRST AATT2
|
||
HRRZM A,TTYSTS(B)
|
||
MOVEM B,TTYTBL(A)
|
||
CONO PI,CLKON
|
||
JRST POPJ1
|
||
|
||
AATT2: TRNE D,400000
|
||
JRST AATT3
|
||
TLZ D,100000
|
||
MOVEM D,TTYTBL(A)
|
||
HRRZ A,TTYTBL(A)
|
||
JRST AATT4
|
||
|
||
AATT3: HLL A,TTYTBL(A)
|
||
TLZ A,700000
|
||
MOVEM A,TTYSTS(B)
|
||
HRRZM B,TTYTBL(A)
|
||
CLKOJ1: CONO PI,CLKON
|
||
JRST POPJ1
|
||
|
||
AATT1: TLNN B,100000
|
||
JRST CLKONJ
|
||
JRST AATT5
|
||
|
||
|
||
AGBLT1: CONO PI,CLKON
|
||
PUSHJ P,UDELAY
|
||
|
||
AGBLTTY: HLRZ A,(R) ;OPER 12
|
||
HRRZ B,(R)
|
||
SKIPL CLSTB(B)
|
||
POPJ P,
|
||
CONO PI,CLKOFF
|
||
MOVE A,TTYTBL(U)
|
||
JUMPGE A,POPJ1 ;ALREADY HAS IT
|
||
TLNE A,200000
|
||
JRST CLKONJ ;NEVER HAD IT
|
||
TLNE A,100000
|
||
JRST AGBLT1 ;TAKEN AWAY WAIT FOR IT TO COME BACK
|
||
TRNE A,400000
|
||
JRST CLKONJ ;NEVER GAVE IT AWAY
|
||
AGBLT3: MOVE E,TTYTBL(A)
|
||
JUMPL E,AGBLT2
|
||
HLLZ D,TTYSTS(E)
|
||
IOR D,[500000,,400000
|
||
MOVEM D,TTYTBL(A)
|
||
LDB D,[220300,,TTYTBL(U)
|
||
HRL D,U
|
||
MOVSM D,TTYSTS(E)
|
||
HRRZM E,TTYTBL(U)
|
||
JRST CLKOJ1
|
||
|
||
AGBLT2: MOVSI D,100000
|
||
IORM D,TTYTBL(A)
|
||
HRRZ A,TTYTBL(A)
|
||
JRST AGBLT3
|
||
|
||
AIPUSH: MOVE T,SIOCP(U) ;OPER 13
|
||
HLRZ A,T
|
||
CAIL A,20
|
||
JRST IOCERR
|
||
PUSH T,(R)
|
||
MOVEM T,SIOCP(U)
|
||
CLEARM (R)
|
||
POPJ P,
|
||
|
||
AIPOP: PUSHJ P,ACLOSE ;OPER 14
|
||
MOVE T,SIOCP(U)
|
||
TLNN T,-1
|
||
JRST IOCERR
|
||
POP T,(R)
|
||
MOVEM T,SIOCP(U)
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL CORE ALLOCATOR
|
||
|
||
UACORE:
|
||
ACORE: CAILE B,MXC ;U HAS USER THAT WANTS CORE
|
||
POPJ P, ;IF U=USER,THIS GUY IS IN CORE
|
||
CAMN U,USER
|
||
JUMPE B,ACRF
|
||
ACRF1: PUSH P,A ;MAY CLOBBER ALL ACS EX A,C,E,D,U
|
||
PUSH P,C
|
||
PUSH P,E
|
||
PUSH P,D
|
||
CAMN U,USER
|
||
JRST ACR1A
|
||
PUSHJ P,PCCK
|
||
MOVSI A,BUCSTP
|
||
IORM A,USTP(U)
|
||
CONO PI,CLKON
|
||
ACR1A: MOVEM B,EPDL(U)
|
||
ACORE1: PUSHJ P,SWAIT
|
||
CRACF
|
||
CAMN U,DISUSR
|
||
PUSHJ P,DCRSTP
|
||
MOVEM U,CUSER
|
||
SETOM MEMFRZ
|
||
JUMPN B,ACR1B
|
||
SKIPN MEMTOP(U)
|
||
JRST ACORE9 ;HAS NO MEMORY WANTS NO MEMORY
|
||
ACR1B: SKIPN A,MEMTOP(U)
|
||
JRST ACORE2 ;NO CORE NOW
|
||
LDB A,[341000,,UPR(U)
|
||
CAIN B,1(A)
|
||
JRST ACORE9 ;SAME AS NOW
|
||
CAIG B,1(A)
|
||
JRST ACORE3 ;LESS THAN NOW
|
||
|
||
|
||
ACORE2: MOVEI C,1(A)
|
||
SUBM B,C
|
||
CAMLE C,MEMFR
|
||
JRST ACORE4 ;SCROUNGING REQD
|
||
SKIPN MEMTOP(U)
|
||
JRST ACORE5 ;NO MEM NOW
|
||
LDB D,[121000,,UPR(U)
|
||
ADDI D,1(A)
|
||
LDB E,[MUR,,MEMBLT(D)
|
||
CAIN E,75 ;BLOCK ABOVE CURRENT FREE
|
||
JRST ACORE6
|
||
ACORE5: PUSHJ P,MXCCA ;GET MAX CORE AVAIL IN BLOCK
|
||
CAMG B,D ;RETURN RESULT IN D
|
||
JUMPN U,ACORE7 ;BLT GUY IN -- DONT BLT SYS IN HA HA
|
||
SKIPN MEMTOP(U)
|
||
JUMPE U,ACORE7 ;EXECPT SOMETIMES HA HA
|
||
MOVSI D,-MX1KB ;INITITIATE MOBY SHUFFLE
|
||
MOVEI I,0
|
||
JRST ACMS2
|
||
|
||
ACRF: PUSHJ P,IODCL
|
||
MOVEI B,0
|
||
PUSHJ P,ACRF1
|
||
JFCL
|
||
SKIPGE C,TTYTBL(U)
|
||
JRST ACRF5
|
||
SKIPGE A,SUPPRO(U)
|
||
JRST ACRF3
|
||
HLL A,TTYTBL(A)
|
||
TLZ A,777770
|
||
MOVEM A,TTYSTS(C)
|
||
HRRZM C,TTYTBL(A)
|
||
ACRF4: SETOM TTYTBL(U)
|
||
ACRF2: CLEARM UNAME(U)
|
||
SETOM USTP(U)
|
||
CONO PI,CLKOFF
|
||
JRST UDELAY
|
||
|
||
ACRF3: SETOM TTYSTS(C)
|
||
JRST ACRF4
|
||
|
||
ACRF5: CAMN C,[-1
|
||
JRST ACRF2
|
||
SKIPL D,SUPPRO(U)
|
||
HRRM C,TTYTBL(D)
|
||
LSH C,-33.
|
||
SKIPL D
|
||
DPB C,[410300,,TTYTBL(D)
|
||
JRST ACRF2
|
||
|
||
DCRSTP: CAMN U,VIDUSR
|
||
POPJ P,
|
||
SETOM CDSOFF
|
||
CONO DIS,0
|
||
POPJ P,
|
||
|
||
DCRRST: CAMN U,VIDUSR
|
||
POPJ P,
|
||
SKIPL DISOFF
|
||
SKIPGE DISON
|
||
JRST .+2
|
||
CONO DIS,DISCHN+SDCHN_3
|
||
CLEARM CDSOFF
|
||
POPJ P,
|
||
|
||
ACORE4: JRST ACR9A ;TEMP
|
||
CONO PI,UTCOFF
|
||
MOVE D,UTTBF
|
||
CAIGE D,8
|
||
JRST ACR9B ;CANNOT GET ANOTHER BLOCK BY RECAIMING FREE IO BUFFER
|
||
MOVSI I,-MX1KB
|
||
LDB D,[MUR,,MEMBLT(I)
|
||
CAIN D,76
|
||
AOBJN I,.-2
|
||
JUMPGE I,[JRST 4,.] ;MEMBLT FOULED UP
|
||
MOVSI D,200000
|
||
IORM D,MEMBLT(I) ;ALLOCATION INHIBIT
|
||
|
||
ACORE6: MOVE A,D
|
||
PUSHJ P,CCFRE
|
||
DPB A,[MLO,,MEMBLT-1(A)
|
||
MOVEI C,377
|
||
DPB C,[MLO,,MEMBLT(A)
|
||
SOS A
|
||
DPB A,[MLU,,MEMBLT+1(A)
|
||
HRRZ A,D
|
||
PUSHJ P,CZRR ;ZERO BLOCK ADDED
|
||
MOVEI A,2000
|
||
|
||
ACORTN: HLRZ C,UPR(U)
|
||
SKIPN MEMTOP(U)
|
||
MOVNI C,2000
|
||
ADD A,C
|
||
JRST ACORT1
|
||
|
||
ACMS2: MOVE J,D ;D HAS FIRST FREE BLOCK BELOW
|
||
ACMS7: LDB E,[MUR,,MEMBLT(J)
|
||
CAMN J,D
|
||
JRST ACMS4F ;;NO FREE MEM SO FAR
|
||
CAIGE E,74
|
||
JRST ACMS4 ;USER
|
||
ORCMI E,77
|
||
AOJE E,ACMS5 ;EXEC
|
||
AOJE E,ACMS6 ;IO
|
||
AOJE E,ACMS8 ;FREE
|
||
PUSHJ P,UDELAY ;IN PROCESS
|
||
JRST ACMS7
|
||
|
||
|
||
ACMS4F: CAIN E,75
|
||
JRST ACMS8 ;FREE NOW
|
||
IMULI E,LUBLK
|
||
CAME E,U
|
||
JRST ACMS5
|
||
XORI I,1
|
||
MOVE D,ACMDT1(I)
|
||
JRST ACMS2
|
||
|
||
|
||
ACR9B: CONO PI,UTCON
|
||
ACR9A: SOS -4(P)
|
||
ACORE9: CAMN U,DISUSR
|
||
PUSHJ P,DCRRST
|
||
MOVSI A,BUCSTP
|
||
CAME U,USER
|
||
ANDCAM A,USTP(U)
|
||
CLEARM MEMFRZ
|
||
SETOM CRACF
|
||
POP P,D
|
||
POP P,E
|
||
POP P,C
|
||
POP P,A
|
||
JRST POPJ1
|
||
|
||
ACMS4A: CONO PI,CLKON
|
||
ACS4A: PUSHJ P,UDELAY
|
||
ACMS4: MOVEI U,LUBLK
|
||
IMUL U,E
|
||
CAMN U,USER
|
||
JRST ACMS4D
|
||
LDB Q,[400100,,USTP(U) ;BEXC
|
||
JUMPN Q,ACS4A
|
||
CONO PI,CLKOFF
|
||
PUSHJ P,PCLSR
|
||
JRST ACMS4A
|
||
MOVSI Q,BCSTOP
|
||
IORM Q,USTP(U)
|
||
CAMN U,DISUSR
|
||
PUSHJ P,DCRSTP
|
||
CONO PI,CLKON
|
||
|
||
ACMS4D: JUMPN I,ACMS4G ;JUMP ON MOVEING DOWN
|
||
HRRZ A,D ;MOVE USER
|
||
PUSHJ P,UADRS2 ;MOVE USER VARIABLES
|
||
ACMS4G: JSP Q,ACMS4B ;WRITING POINTER
|
||
ACMS5: ADD D,ACMDT2(I)
|
||
ACMS8: XCT ACMDT3(I)
|
||
JRST ACMS7
|
||
|
||
ACMDT1: -MX1KB,,
|
||
-MX1KB,,MX1KB-1
|
||
|
||
ACMDT2: 1,,1
|
||
,-1
|
||
ACMDT3: AOBJP J,ACMS4H
|
||
JSR ACMD1
|
||
|
||
ACMD1: 0
|
||
ADDI J,-1
|
||
JUMPG J,ACMS4H
|
||
JRST @ACMD1
|
||
|
||
|
||
ACMDT4: ACMS4L
|
||
ACMS4M
|
||
|
||
ACMS4L: DPB T,[MLU,,MEMBLT(A)
|
||
AOS A
|
||
DPB A,[MLO,,MEMBLT-1(A)
|
||
JRST ACMS4K
|
||
|
||
ACMS4M: DPB T,[MLO,,MEMBLT(A)
|
||
SOS A
|
||
DPB A,[MLU,,MEMBLT+1(A)
|
||
JRST ACMS4K
|
||
|
||
ACMDT5: MLO,,MEMBLT-1(D)
|
||
MLU,,MEMBLT+1(D)
|
||
|
||
|
||
ACMS4B: MOVEI T,377 ;LINK UP IN GOING UP LINK DOWN IF DOWN
|
||
ACMS4I: HRRZ A,D ;MOVE CORE FOR USER
|
||
PUSHJ P,TCALL
|
||
JRST MPOUT ;PATCH OUT NEW BLOCK OF FREE STG LIST
|
||
JRST @ACMDT4(I) ;PATCH MEM LINKS
|
||
|
||
ACMS4K: PUSHJ P,CMOVE ;MOVE CORE
|
||
HRRZ T,D
|
||
LDB E,[MUR,,MEMBLT(J)
|
||
DPB E,[MUR,,MEMBLT(D)
|
||
HRRZ A,J
|
||
PUSHJ P,MEMR ;RETURN OLD BLOCK
|
||
ADD D,ACMDT2(I) ;INCREMENT POINTERS
|
||
ADD J,ACMDT2(I)
|
||
JUMPGE J,ACMS4N
|
||
LDB A,[MUR,,MEMBLT(J)
|
||
CAMN A,E
|
||
JRST ACMS4I ;SAME USER, KEEP GOING
|
||
ACMS4N: MOVEI T,377
|
||
DPB T,ACMDT5(I)
|
||
JUMPE I,ACMS4J
|
||
MOVEI A,1(D)
|
||
PUSHJ P,UADRS2
|
||
ACMS4J: CAME U,CUSER
|
||
JRST ACMS4C
|
||
ACMS4H: MOVE U,CUSER ;MOVED GUY WE ARE MAKING CORE FOR, HE MAY BE HAPPY NOW
|
||
JRST ACORER
|
||
|
||
ACMS4C: MOVSI Q,BCSTOP ;RANDOM GUY, START HIM BACK UP
|
||
ANDCAM Q,USTP(U)
|
||
CAMN U,DISUSR
|
||
PUSHJ P,DCRRST
|
||
MOVE U,CUSER
|
||
JRST ACMS7
|
||
|
||
CMOVE: HRRZ A,D ;MOVE BLOCK IN J TO BLOCK IN D
|
||
HRL A,J
|
||
LSH A,10.
|
||
MOVE C,A
|
||
BLT A,1777(C)
|
||
POPJ P,
|
||
|
||
|
||
JUMPA SEARC
|
||
UDELAY: PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
ACMS6: HRRZ A,D
|
||
PUSHJ P,TCALL
|
||
JRST MPOUT
|
||
PUSHJ P,AIOBT ;MOVE C(J) TO C(D)
|
||
LDB E,[MUR,,MEMBLT(J)
|
||
DPB E,[MUR,,MEMBLT(D)
|
||
HRRZ A,J
|
||
PUSHJ P,MEMR
|
||
JRST ACMS5
|
||
|
||
AIOBT: LDB R,[MLO,,MEMBLT(J)
|
||
AIOBTL: MOVSI E,400000 ;LOCK ALL BUFFERS IN BLOCK BEING VACATED
|
||
IORM E,IOBFT(R)
|
||
LDB R,[IOLC,,IOBFT(R)
|
||
CAIE R,377
|
||
JRST AIOBTL
|
||
; MOVNI R,8
|
||
; ADDM R,UTTBF
|
||
; ADDM R,UTTLB
|
||
; HRRZ A,D
|
||
; PUSHJ P,TCALL
|
||
; JRST UTMGB
|
||
|
||
AIOBT1: PUSH P,[0
|
||
LDB R,[MLO,,MEMBLT(J)
|
||
AIOBT2: SKIPL IOBFT(R)
|
||
JRST AIOB5A
|
||
LDB Q,[IOCH,,IOBFT(R)
|
||
CAIE Q,77 ;FREE
|
||
JRST AIOBT3
|
||
AIOBT4: DPB D,[141000,,IOBFT(R) ;RELOCATE IOSA
|
||
ANDCAM E,IOBFT(R)
|
||
|
||
AIOBT5: SKIPGE IOBFT(R)
|
||
SETOM (P)
|
||
|
||
AIOB5A: LDB R,[IOLC,,IOBFT(R)
|
||
CAIE R,377
|
||
JRST AIOBT2
|
||
POP P,A
|
||
JUMPE A,CPOPJ
|
||
PUSHJ P,UDELAY
|
||
JRST AIOBT1
|
||
|
||
AIOBT3: CAIL Q,NUTIC+NUTOC
|
||
JRST AIOBT6
|
||
IORM E,UTRAC(Q) ;UT DATA
|
||
LDB C,[IOLO,,IOBFT(R)
|
||
CAIN C,-4&1777
|
||
JRST AIOBT7 ;ACTIVE AT PI
|
||
CAIN C,-3&1777
|
||
JRST AIOBT8 ;ACTIVE AT MN PROG
|
||
PUSHJ P,ACMBM
|
||
AIOB8B: ANDCAM E,UTRAC(Q)
|
||
JRST AIOBT4
|
||
|
||
|
||
AIOBT7: ANDCAM E,UTRAC(Q)
|
||
JRST AIOBT5
|
||
|
||
AIOBT6: CAIE Q,NUTIC+NUTOC
|
||
JRST 4,. ;UNKNOWN CHNL
|
||
CONO PI,UTCOFF
|
||
LDB A,[IOLO,,IOBFT(R) ;UT DIR
|
||
SKIPGE UFLAPF(A)
|
||
JRST AIOB5B
|
||
LDB C,[420200,,UDIRO(A)
|
||
JUMPN C,AIOB5B
|
||
MOVSI C,600000
|
||
IORM C,UDIRO(A)
|
||
CONO PI,UTCON
|
||
DPB D,[121000,,UDIRO(A) ;RELOCATE UDIRO
|
||
HRRE T,DCHNT(A) ;RELOCATE CHANNEL DIR PNTRS
|
||
AIOB6B: JUMPL T,AIOB6C
|
||
DPB D,[121000,,UTDIRP(T)
|
||
HRRE T,UTUL(T)
|
||
JRST AIOB6B
|
||
|
||
|
||
|
||
AIOB6C: PUSHJ P,ACMBM
|
||
ANDCAM C,UDIRO(A)
|
||
JRST AIOBT4
|
||
|
||
ACMBM: LDB TT,[IOSA,,IOBFT(R)
|
||
LSH TT,6
|
||
HRLS TT
|
||
DPB D,[121000,,TT
|
||
MOVEI T,177(TT)
|
||
BLT TT,(T)
|
||
POPJ P,
|
||
|
||
AIOBT8: CONO PI,CLKOFF
|
||
HLRZ U,UTUSR(Q)
|
||
PUSHJ P,PCLSR
|
||
JRST AIOB8A
|
||
MOVSI TT,BCSTOP
|
||
IORM TT,USTP(U)
|
||
CONO PI,CLKON
|
||
DPB D,[121000,,MPRP(Q)
|
||
PUSHJ P,ACMBM
|
||
MOVSI TT,BCSTOP
|
||
ANDCAM TT,USTP(U)
|
||
MOVE U,CUSER
|
||
JRST AIOB8B
|
||
|
||
AIOB5B: CONO PI,UTCON
|
||
JRST AIOBT5
|
||
|
||
|
||
AIOB8A: CONO PI,CLKON
|
||
MOVE U,CUSER
|
||
JRST AIOBT5
|
||
|
||
|
||
MXCCA: MOVEI D,0
|
||
MOVSI I,-MX1KB
|
||
MXCC1: LDB Q,[MUR,,MEMBLT(I)
|
||
CAIN Q,75
|
||
JRST MXCC2
|
||
MXCC5: AOBJN I,MXCC1
|
||
POPJ P,
|
||
MXCC2: MOVEI J,1
|
||
MOVE T,I
|
||
AOBJP I,MXCC4
|
||
MXCC6: LDB Q,[MUR,,MEMBLT(I)]
|
||
CAIN Q,75
|
||
AOJA J,MXCC3
|
||
MXCC4: CAMGE D,J
|
||
MOVE E,T
|
||
CAMGE D,J
|
||
MOVE D,J
|
||
JRST MXCC5
|
||
|
||
|
||
MXCC3: AOBJN I,MXCC6
|
||
JRST MXCC4
|
||
|
||
|
||
ACORE7: MOVE TT,B
|
||
HRRZ A,E
|
||
MOVEI D,377
|
||
ACR7L: PUSHJ P,CCFRE
|
||
DPB D,[MLU,,MEMBLT(A)
|
||
AOS A
|
||
DPB A,[MLO,,MEMBLT-1(A)
|
||
MOVEI D,-1(A)
|
||
SOJG TT,ACR7L
|
||
MOVEI D,377
|
||
DPB D,[MLO,,MEMBLT-1(A)
|
||
SKIPN MEMTOP(U)
|
||
JRST ACORE8 ;NO MEM NOW
|
||
HRRZ I,E ;E HAS LOWEST BLOCK NEW CORE
|
||
LSH I,10.
|
||
MOVE A,I
|
||
HRL I,UPR(U)
|
||
HRRZ D,I
|
||
ADD D,MEMTOP(U)
|
||
BLT I,METOF-1(D)
|
||
HRRZ A,UPR(U)
|
||
LSH A,-10.
|
||
HLRZ I,UPR(U)
|
||
LSH I,-10.
|
||
PUSHJ P,MEMR
|
||
AOS A
|
||
SOJGE I,.-2
|
||
ACORE8: HRRZ A,E ;INSERT CODE TO ZERO NEW CORE
|
||
PUSHJ P,UADRS2
|
||
SKIPN MEMTOP(U)
|
||
JUMPE U,ACR8A
|
||
MOVE A,EPDL(U)
|
||
SOS A
|
||
HLRZ B,UPR(U)
|
||
LSH B,-10.
|
||
SKIPN MEMTOP(U)
|
||
SOS B
|
||
MOVE C,B
|
||
SUB B,A
|
||
HRLZ A,B
|
||
HRRZ B,UPR(U)
|
||
LSH B,-10.
|
||
ADDI B,1(C)
|
||
HRR A,B
|
||
ACRZR: PUSH P,A
|
||
PUSHJ P,CZRR
|
||
POP P,A
|
||
AOBJN A,ACRZR
|
||
ACR8A:
|
||
ACORR1: MOVE B,EPDL(U)
|
||
MOVEI A,-1(B)
|
||
LSH A,10.
|
||
ACORT1: HRLM A,UPR(U)
|
||
ADDI A,2000-METOF
|
||
HRRZM A,MEMTOP(U)
|
||
ADDI A,METOF
|
||
HRRZM A,RMEMT(U)
|
||
|
||
ACORER: CAMN U,USER
|
||
DATAO UPR(U)
|
||
CAMN U,DISUSR
|
||
PUSHJ P,DCRRST
|
||
ACORR2: SETOM CRACF
|
||
MOVE B,EPDL(U)
|
||
CLEARM MEMFRZ
|
||
JRST ACORE1
|
||
|
||
|
||
ACORE3: CAMN U,DISUSR
|
||
JSR DISACR
|
||
SUBI A,-1(B)
|
||
HRRZ E,A
|
||
HLRZ A,UPR(U)
|
||
ADD A,UPR(U)
|
||
LSH A,-10.
|
||
ACR2L: PUSHJ P,MEMR
|
||
MOVEI D,377
|
||
LDB C,[MUR,,MEMBLT-1(A)
|
||
IMULI C,LUBLK
|
||
CAMN C,U
|
||
DPB D,[MLO,,MEMBLT-1(A)
|
||
SOS A
|
||
SOJG E,ACR2L
|
||
LSH A,10.
|
||
SUB A,UPR(U)
|
||
JUMPGE A,ACORT1
|
||
CLEARM MEMTOP(U)
|
||
CLEARM RMEMT(U)
|
||
HRRZS UPR(U)
|
||
JRST ACORR2
|
||
|
||
|
||
CCFRE: PUSHJ P,TCALL
|
||
JRST MPOUT
|
||
CCRTN: MOVE I,U
|
||
IDIVI I,LUBLK
|
||
DPB I,[MUR,,MEMBLT(A)
|
||
POPJ P,
|
||
|
||
|
||
CZRR: LSH A,10.
|
||
CLEARM (A)
|
||
HRLS A
|
||
AOS A
|
||
MOVE C,A
|
||
BLT A,1776(C)
|
||
POPJ P,
|
||
|
||
DISACR: 0
|
||
PUSH P,A
|
||
MOVEI A,1(B)
|
||
LSH A,10.
|
||
CAML A,DISPRT
|
||
JRST DISAC1
|
||
SETOM DISUSR
|
||
SETOM DISOFF
|
||
CLEARM CDSOFF
|
||
DISAC1: POP P,A
|
||
JRST @DISACR
|
||
|
||
ADSTART: CONO PI,CLKOFF
|
||
SKIPL VIDUSR
|
||
JRST CLKONJ
|
||
SKIPE TTYTBL(U) ;ALWAYS LET CONSOLE TTY USER OPEN DISPLAY
|
||
CAMN U,DISUSR
|
||
JRST DSTRT1
|
||
SKIPL DISUSR
|
||
JRST CLKONJ
|
||
|
||
DSTRT1: CONO DIS,100
|
||
CLEARM CDSOFF
|
||
MOVEM U,DISUSR
|
||
MOVE A,(C)
|
||
HLRO B,A
|
||
MOVNS B
|
||
ADDI B,(A)
|
||
CAML B,RMEMT(U)
|
||
JRST DISBRF
|
||
MOVEM B,DISPRT
|
||
ADDI A,@UPR(U)
|
||
MOVEM A,DISPTR
|
||
MOVEM A,DBLKOP
|
||
|
||
MOVE A,UPR(U)
|
||
HRRZM A,DRELOC
|
||
CLEARM DISOFF
|
||
CONO DIS,100\DISCHN\SDCHN_3
|
||
CLKNJ1: CONO PI,CLKON
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
DISBRF: SETOM DISUSR
|
||
JRST CLKONJ
|
||
|
||
DRELOC: 0 ;RELOC OF DIS USER
|
||
DISPRT: 0 ;LARGEST LOC USED BY DISLIST
|
||
DISPTR: 0 ;PERM DIS BLKO PTR
|
||
DBLKOP: 0 ;TEMP DIS BLKO PTR
|
||
DISON: 0 ;-1 IF DIS STOPPED AFTER SPECIAL INT OR BLKO OVERFLOW
|
||
;WILL BE RESTARTED IN CLKBRK ROUTNE.
|
||
|
||
|
||
|
||
SRECYC: MOVEM A,DISAS
|
||
CONSZ DIS,2000
|
||
JRST DSLTPB
|
||
SETOM DISON
|
||
CONO DIS,0
|
||
SRCYCX: MOVE A,DISAS
|
||
JRST 12,@TTYBRK
|
||
|
||
DSLTPB: SKIPE LTPOPO
|
||
JRST SRCYCX ;IN LIGHT PEN UUO
|
||
DATAI DIS,LLTPSN
|
||
AOS LTPCNT
|
||
HRRZ A,LLTPSN
|
||
ADDM A,LTPCY
|
||
HLRZ A,LLTPSN
|
||
ADDM A,LTPCX
|
||
CONO DIS,10000\SDCHN_3\DISCHN
|
||
JRST SRCYCX
|
||
|
||
DRECYC: 0
|
||
SETOM DISON
|
||
CONO DIS,0
|
||
JRST 12,@DRECYC
|
||
|
||
LLTPSN: 0 ;. TO .+3 BLTED TO USER
|
||
LTPCNT: 0
|
||
LTPCY: 0
|
||
LTPCX: 0
|
||
LTPOPO: 0
|
||
|
||
DISA: 0
|
||
DISAS: 0
|
||
DISOFF: 0 ;-1 IF DIS NOT IN USE
|
||
CDSOFF: 0 ;-1 IF DIS STOPPED BY CORE ALLOCATOR
|
||
|
||
|
||
ADSTOP: CAME U,DISUSR ;OPER 16
|
||
POPJ P,
|
||
CONO DIS,100
|
||
SETOM DISOFF
|
||
POPJ P,
|
||
|
||
ADFLUSH: CAME U,DISUSR ;OPER 15
|
||
POPJ P,
|
||
SETOM DISOFF
|
||
SETOM DISUSR
|
||
CLEARM CDSOFF
|
||
CONO DIS,100
|
||
POPJ P,
|
||
|
||
ALTPOP: SETOM LTPOPO ;OPER 21
|
||
MOVEI B,(J)
|
||
HRLI B,LLTPSN
|
||
BLT B,3(J)
|
||
CAME U,DISUSR
|
||
JRST ALTPP2
|
||
SETZB A,LTPCNT
|
||
MOVEM A,LTPCY
|
||
MOVEM A,LTPCX
|
||
ALTPP2: SETZM LTPOPO
|
||
POPJ P,
|
||
|
||
VIDCLS: SETOM VIDUSR
|
||
SETOM DISUSR
|
||
POPJ P,
|
||
|
||
VIDI: CONO PI,CLKOFF
|
||
CAMN U,VIDUSR
|
||
JRST VID1A
|
||
SKIPL DISUSR
|
||
JRST CLKONJ
|
||
VID1A: CLEARM DISUSR
|
||
MOVEM U,VIDUSR
|
||
SETOM DISOFF
|
||
CONO PI,CLKON
|
||
CONO DIS,100
|
||
DATAO DIS,[20117]
|
||
MOVEI A,VIDOPN
|
||
MOVEM A,(R)
|
||
JRST POPJ1
|
||
|
||
VIDIOT: CONO VID,10
|
||
DATAO DIS,(C)
|
||
MOVEI A,1000.
|
||
CONSO VID,10
|
||
SOJG A,.-1
|
||
JUMPE A,VIDIB
|
||
DATAI VID,(C)
|
||
POPJ P,
|
||
|
||
VIDIB: SETOM (C)
|
||
POPJ P,
|
||
VIDUSR: -1
|
||
|
||
UIMRQ: MOVE A,IOBFC
|
||
CAIGE A,8
|
||
POPJ P, ;NOT ENOUGH ROOM IM IOBFT
|
||
IOMQ:
|
||
IMEMRQ: SKIPGE MEMFRZ
|
||
POPJ P, ;MEMORY FROZE
|
||
MOVEI A,0
|
||
PUSH P,B
|
||
PUSH P,E
|
||
IMRQ2: LDB A,[MLO,,MEMBLT(A)
|
||
CAIE A,377
|
||
JRST IMRQ3
|
||
CLEARM MEMDSP
|
||
MPOUT1:
|
||
IMRQR: POP P,E
|
||
POPBJ: POP P,B
|
||
POPJ P,
|
||
|
||
IMRQ3: LDB B,[420200,,MEMBLT(A)
|
||
JUMPN B,IMRQ2
|
||
AOS -2(P)
|
||
JRST IMRQ4
|
||
|
||
IMEMR: PUSH P,B
|
||
LDB B,[MLO,,MEMFP
|
||
DPB B,[MLO,,MEMBLT(A)
|
||
DPB A,[MLU,,MEMBLT(B)
|
||
MOVEI B,0
|
||
DPB B,[MLU,,MEMBLT(A)
|
||
MOVEI B,75
|
||
DPB B,[MUR,,MEMBLT(A)
|
||
DPB A,[MLO,,MEMFP
|
||
AOS MEMFR
|
||
JRST POPBJ
|
||
|
||
MEMR: CONO PI,UTCOFF
|
||
PUSHJ P,IMEMR
|
||
CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
MPOUT: PUSH P,B
|
||
PUSH P,E
|
||
IMRQ4: LDB B,[MLU,,MEMBLT(A)
|
||
LDB E,[MLO,,MEMBLT(A)
|
||
CAIE B,377
|
||
DPB E,[MLO,,MEMBLT(B)
|
||
CAIE E,377
|
||
DPB B,[MLU,,MEMBLT(E)
|
||
SOS MEMFR
|
||
MOVEI B,74 ;IN PROCESS
|
||
DPB B,[MUR,,MEMBLT(A)
|
||
JRST MPOUT1
|
||
|
||
TCALL: CONO PI,UTCOFF
|
||
PUSHJ P,@(P)
|
||
SKIPA
|
||
AOS (P)
|
||
CONO PI,UTCON
|
||
JRST POPJ1
|
||
|
||
;MEMORY ALLOCATION TABLES
|
||
|
||
IOBFT: REPEAT MXIOB-1,176000,,.RPCNT+1 ;MAX DYN ALLOC IO BUFFERS
|
||
176000,,377 ;4.9 FREEZE
|
||
;4.8 ALLOC INHIBIT
|
||
IOCH=340600 ;4.7-4.2 SYS CHN NO 77 => FREE
|
||
IOLC=241000 ;4.1 3.3 LINK TO NEXT SEQ BUF IN CORE (W/IN 1K BLK)
|
||
IOLO==1000 ; LINK TO FOLLOWING BUFFER OR
|
||
;SPECIAL STATES LINK OUT
|
||
;-1 LAST BUFFER CURRENTLY FILLED
|
||
;-2 END OF FILE
|
||
;-3 BUFFER ACTIVE AT MAIN PROG LEVEL
|
||
;-4 BUFFER ACTIVE AT PI LEVEL
|
||
;IF CHN IS NUTIC+NUTOC (UTAPE FILE DIR) THEN IOLO IS TAPE NO
|
||
|
||
IOSA=101400 ; BUFFER SA _-6
|
||
|
||
|
||
IOBFP: 0 ;FREE STG TO IOBFT ENT
|
||
IOBFC: MXIOB-8 ;CNT OF AVAIL
|
||
;LEAVE 8 AVAIL SO CORE HACKER CAN NOT RUN OUT
|
||
|
||
|
||
IOBCNS: MOVEI A,IOBFP-IOBFT
|
||
IOBC1: MOVE E,A
|
||
LDB A,[IOLO,,IOBFT(A)
|
||
CAIN A,377
|
||
JRST 4,. ;IOBFT POINTERS FOULED UP
|
||
|
||
IOBC2: LDB B,[420200,,IOBFT(A)
|
||
JUMPN B,IOBC1
|
||
LDB B,[IOLO,,IOBFT(A)
|
||
DPB B,[IOLO,,IOBFT(E)
|
||
SOS IOBFC
|
||
POPJ P,
|
||
|
||
MEMFP:
|
||
MEMBLT: 37400,,377_8+1 ;POINTER ONLY BLK DOES NOT EXIST
|
||
REPEAT MX1KB-1-1,36400,,<.RPCNT>_8.+.RPCNT+2
|
||
36400,,<MX1KB-2>_8+377
|
||
;4.9 FREEZE
|
||
;4.8 ALLOC INHIBIT
|
||
MUR=320600 ;USER OR 77 EXEC, 76 IOBUF, 75 FREE, 74 IN PROCESS
|
||
|
||
MLO==1000 ;LINK DOWN
|
||
;IOBFT LINK FIRST BUFFER IN AREA (MUR=76)
|
||
MLU=101000 ;LINK UP
|
||
|
||
;SYS MEM ALLOC VARIABLES
|
||
MEMFR: MX1KB-1
|
||
MEMDSP: 0 ;-1 TRY HARD TO GET MEMORY 0 LOOK AROUND
|
||
UMEMT: 0 ;TOTAL MEMORY FOR USER PROGS (IN CORE)
|
||
MEMFRZ: 0 ;-1 MEMORY FROZE
|
||
|
||
|
||
;SYS CHANNEL ASSIGN
|
||
; 77=>FREE
|
||
; 0 - NUTIC+NUTOC-1 => UTAPE CHNL
|
||
;NUTIC+NUTOC =>UTAPE FILE DIR
|
||
SUBTTL NULL DEVICE
|
||
|
||
NULO: JUMPL D,NULOO
|
||
MOVEI A,NLBIDN
|
||
TLNN D,1
|
||
MOVEI A,NLIDN
|
||
BCHR: MOVEM A,(R)
|
||
JRST RSKP
|
||
NULOO: MOVEI A,NLODN
|
||
TLNE D,1
|
||
MOVEI A,NLBDN
|
||
JRST BCHR
|
||
|
||
NULI: CLEARM (C)
|
||
POPJ P,
|
||
|
||
NULOD: POPJ P,
|
||
|
||
NULBI: MOVE A,RMEMT(U)
|
||
MOVE D,(C)
|
||
CAIL A,(D)
|
||
CLEARM (D)
|
||
AOBJN D,.-2
|
||
POPJ P,
|
||
|
||
NULBOD: HLRE A,(C)
|
||
MOVNS A
|
||
ADD A,(C)
|
||
HRRZM A,(C)
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL USER DEVICE ROUTINES
|
||
|
||
USRO: MOVEI TT,0
|
||
HRRZ E,SUPPRO(TT)
|
||
CAIN E,(U)
|
||
CAME A,UNAME(TT)
|
||
JRST AGIN
|
||
CAMN B,JNAME(TT)
|
||
JRST UFN1
|
||
AGIN: ADDI TT,LUBLK
|
||
CAMGE TT,USRHI
|
||
JRST USRO+1
|
||
USTRTO: PUSH P,U
|
||
TCORS: CAME A,UNAME(U) ;INFERIOR PROCEDURE MUST HAVE
|
||
JRST POPAJ
|
||
CONO PI,CLKOFF
|
||
MOVSI T,600000 ;DOESN'T HAVE TTY
|
||
PUSHJ P,USTRA ;MUST HAVE U IN -1(P)
|
||
JRST TCORS1
|
||
MOVEM A,UNAME(U)
|
||
MOVEM B,JNAME(U)
|
||
CONO PI,CLKON
|
||
MOVE TT,U
|
||
POP P,U
|
||
CLEARB A,T
|
||
ULUP: HRRZ E,SUPPRO(T)
|
||
CAIN E,(U)
|
||
IOR A,SUPPRO(T)
|
||
ADDI T,LUBLK
|
||
CAMGE T,USRHI
|
||
JRST ULUP
|
||
|
||
UFIN: MOVEI B,1
|
||
TLON A,(B)
|
||
JRST SETBIT
|
||
LSH B,1
|
||
CAIG B,1_<NINFP>
|
||
JRST UFIN+1
|
||
NOGO1: CLEARM UNAME(TT)
|
||
POPJ P,
|
||
|
||
UFN1: MOVE U,TT
|
||
JRST UFOUND
|
||
|
||
TCORS1: SKIPE SUPCOR
|
||
PUSHJ P,UFLS
|
||
JRST TCORS
|
||
|
||
|
||
|
||
NOGO: EXCH TT,U
|
||
JRST NOGO1
|
||
|
||
SETBIT: HRLZ B,B
|
||
HRR B,U
|
||
MOVEM B,SUPPRO(TT)
|
||
EXCH TT,U
|
||
MOVEI B,1
|
||
PUSHJ P,ACORE
|
||
JRST NOGO
|
||
;FALLS THRU
|
||
|
||
UFOUND: HLRZS C
|
||
TRNE C,777774
|
||
JRST ILUUO
|
||
HRLZ D,U
|
||
MOVE U,USER
|
||
XCT INFINT(C)
|
||
MOVEM D,(R)
|
||
JRST RSKP
|
||
|
||
INFINT: HRRI D,UWIDN
|
||
HRRI D,UWODN
|
||
HRRI D,UBIDN
|
||
HRRI D,UBODN
|
||
|
||
|
||
ULOSE: MOVE U,A
|
||
UWIERR: MOVEI T,ILLUAD
|
||
JRST UUOERR
|
||
|
||
|
||
|
||
UMEMEX: PUSH P,B
|
||
PUSH P,Q
|
||
MOVE U,A
|
||
HLRZ B,UPR(U)
|
||
LSH B,-10.
|
||
ADDI B,2
|
||
TRYOVR: PUSHJ P,ACORE
|
||
JRST ULOSE
|
||
CAML D,MEMTOP(U)
|
||
AOJA B,TRYOVR
|
||
MOVE U,USER
|
||
POP P,Q
|
||
JRST POPBJ
|
||
|
||
|
||
UWO: HRRO Q,(C)
|
||
MOVEI C,Q
|
||
|
||
UBO: PUSHJ P,SUSTPR
|
||
HLRO D,(C)
|
||
MOVNS B,D
|
||
ADD D,UOLOOK(A)
|
||
MOVE R,D
|
||
CAMLE D,RMEMT(A)
|
||
PUSHJ P,UMEMEX
|
||
ADDI D,@UPR(A)
|
||
MOVE E,(C)
|
||
ADDI B,(E)
|
||
MOVEM B,(C)
|
||
CAMLE B,RMEMT(U)
|
||
JRST IOADC
|
||
ADDI E,@UPR(U)
|
||
MOVE C,UOLOOK(A)
|
||
ADDI C,@UPR(A)
|
||
HRL C,E
|
||
MOVEM R,UOLOOK(A)
|
||
UBO2: HRRZ Q,C
|
||
SUBI Q,@UPR(A)
|
||
CAIGE Q,20
|
||
JRST UBO3
|
||
BLT C,-1(D)
|
||
JRST UBO1
|
||
|
||
|
||
UWI: HRRO Q,(C)
|
||
MOVEI C,Q
|
||
|
||
UBI: PUSHJ P,SUSTPR
|
||
HLRO D,(C)
|
||
MOVNS B,D
|
||
ADD B,(C)
|
||
CAMLE B,RMEMT(U)
|
||
JRST IOADC
|
||
HRRZM B,(C)
|
||
ADDI B,@UPR(U)
|
||
HRRZ C,UILOOK(A)
|
||
ADDI C,(D)
|
||
CAMLE C,RMEMT(A)
|
||
JRST UWIERR
|
||
HRRZM C,UILOOK(A)
|
||
SUBI C,(D)
|
||
ADDI C,@UPR(A)
|
||
SUBM B,D
|
||
HRL C,D
|
||
MOVSS C
|
||
UBI2: HLRZ Q,C
|
||
SUBI Q,@UPR(A)
|
||
CAIGE Q,20
|
||
JRST UBI3
|
||
BLT C,-1(B)
|
||
UBO1: MOVSI B,BEXC
|
||
ANDCAM B,USTP(A)
|
||
POPJ P,
|
||
|
||
|
||
SUSTP2: EXCH U,A
|
||
SUSTP1: CONO PI,CLKON
|
||
PUSHJ P,UDELAY
|
||
SUSTPR: CONO PI,CLKOFF
|
||
SKIPGE USTP(A)
|
||
JRST SUSTP1
|
||
EXCH U,A
|
||
PUSHJ P,PCLSR
|
||
JRST SUSTP2
|
||
EXCH U,A
|
||
MOVSI B,BEXC
|
||
IORM B,USTP(A)
|
||
CONO PI,CLKON
|
||
POPJ P,
|
||
|
||
UBI3: ADDI Q,AC0S(A)
|
||
MOVE J,(Q)
|
||
MOVEM J,(C)
|
||
ADD C,[1,,1
|
||
HRRZS B
|
||
CAIE B,(C)
|
||
JRST UBI2
|
||
JRST UBO1
|
||
|
||
UBO3: ADDI Q,AC0S(A)
|
||
HLRZ E,C
|
||
MOVE J,(E)
|
||
MOVEM J,(Q)
|
||
ADD C,[1,,1
|
||
HRRZS D
|
||
CAIE D,(C)
|
||
JRST UBO2
|
||
JRST UBO1
|
||
LPTCLS: SETOM LPTUSR
|
||
SETOM LPTUSE
|
||
POPJ P,
|
||
|
||
LPTO: CAMN U,LPTUSR
|
||
JRST LPTO1
|
||
AOSE LPTUSE
|
||
POPJ P,
|
||
MOVEM U,LPTUSR
|
||
LPTO1: MOVEI A,LPTDN
|
||
MOVEM A,(R)
|
||
JRST RSKP
|
||
|
||
PILPT1: SKIPA A,(C)
|
||
LPTS: MOVEI A,40
|
||
PUSHJ P,LPTCHK
|
||
PUSHJ P,UFLS
|
||
JFCL
|
||
PILPT: PUSH P,A
|
||
CAIN A,11
|
||
JRST LPTTAB
|
||
CAIE A,12
|
||
CAIN A,14
|
||
JRST LPC
|
||
SETOM PCL
|
||
CAIE A,15
|
||
AOSA LINEPOS
|
||
CLEARM LINEPOS
|
||
LPC1: SUBI A,40
|
||
SKIPG LPTCC
|
||
JRST .-1
|
||
IDPB A,LPTIP
|
||
HRRZ A,LPTIP
|
||
CAIN A,LPTBE-1
|
||
MOVEI A,LPTBO
|
||
HRRM A,LPTIP
|
||
SOS LPTCC
|
||
CONSO LPT,7
|
||
CONO LPT,LPTCHN
|
||
LPTRET: POP P,A
|
||
POPJ P,
|
||
|
||
|
||
|
||
LPTCHK: MOVE T,LPTCC
|
||
CAIG T,130.
|
||
POPJ P,
|
||
CAIG T,300.
|
||
AOS (P)
|
||
JRST POPJ1
|
||
|
||
LPTTAB: PUSHJ P,LPTS
|
||
LDB A,[300,,LINEPOS
|
||
JUMPN A,.-2
|
||
JRST LPTRET
|
||
|
||
|
||
LPC: PUSH P,LINEPOS
|
||
MOVEI A,15
|
||
AOSN PCL
|
||
SKIPE LINEPOS
|
||
PUSHJ P,PILPT
|
||
SOSGE (P)
|
||
JRST LPC2
|
||
PUSHJ P,LPTS
|
||
JRST .-3
|
||
|
||
LPC2: POP P,A
|
||
MOVE A,(P)
|
||
JRST LPC1
|
||
|
||
LPTCC: <LPTBE-LPTBO>*5-5
|
||
LINEPOS: 0
|
||
PCL: 0
|
||
LPTIP: 700,,LPTBO-1
|
||
LPTOP: 700,,LPTBO-1
|
||
|
||
|
||
LPTCN: CAIN A,<15-40>&177
|
||
JRST LPTCR
|
||
CAIN A,<12-40>&177
|
||
MOVEI A,400
|
||
CAIN A,<14-40>&177
|
||
MOVEI A,401
|
||
JRST LPTCN1
|
||
|
||
LPTCR: CONO LPT,10+LPTCHN
|
||
JRST LPTCR1
|
||
|
||
LPENT1: MOVEM A,LPTA
|
||
MOVEI A,<LPTBE-LPTBO>*5-5
|
||
CAMG A,LPTCC
|
||
JRST LPTSTP
|
||
ILDB A,LPTOP
|
||
TRNE A,100
|
||
JRST LPTCN
|
||
LPTCN1: DATAO LPT,A
|
||
LPTCR1: HRRZ A,LPTOP
|
||
CAIN A,LPTBE-1
|
||
MOVEI A,LPTBO
|
||
HRRM A,LPTOP
|
||
AOSA LPTCC
|
||
LPTSTP: CONO LPT,0
|
||
MOVE A,LPTA
|
||
JRST LPENT
|
||
|
||
LPTBSZ=1000
|
||
LPTBO: BLOCK LPTBSZ
|
||
LPTBE:
|
||
|
||
LPTUSR: -1
|
||
LPTUSE: -1
|
||
LPTA: 0
|
||
|
||
SUBTTL TELETYPE ROUTINES
|
||
|
||
TTYO1: SKIPGE I,TTYTBL(U)
|
||
JRST UDELAY
|
||
HRRZS I
|
||
CAIL I,NTTYS+NGEC
|
||
JRST UDELAY
|
||
TLOA I,400000
|
||
TTYO: CAIGE I,NTTYS+NGEC
|
||
TRNE D,1
|
||
JRST UDELAY ;NO BLOCK MODE
|
||
DPB I,[222100,,A]
|
||
SKIPGE I
|
||
TLO A,400000
|
||
JUMPL D,TTYOO
|
||
HRRI A,TYIDN
|
||
MOVE B,[220200,,TTYSTS(I)
|
||
TTYO2: MOVEM A,(R)
|
||
LSH D,-1
|
||
DPB D,B
|
||
JRST RSKP
|
||
|
||
TTYOO: MOVE B,[240100,,TTYSTS(I)
|
||
HRRI A,TYODN
|
||
JRST TTYO2
|
||
|
||
TIBL==20
|
||
TOBL==20
|
||
NTTYS==5
|
||
NGEC==4
|
||
TYI: TRZN A,400000
|
||
JRST .+3
|
||
SKIPGE TTYTBL(U)
|
||
PUSHJ P,UFLS ;LOSER DOESNT HAVE TTY
|
||
MOVE T,TICC(A)
|
||
CAMGE T,TINTC(A)
|
||
PUSHJ P,UFLS
|
||
SKIPG TICC (A)
|
||
PUSHJ P,UFLS
|
||
MOVE B,TIOP(A)
|
||
CAMN B,TIBEP(A)
|
||
SUBI B,TIBL
|
||
HRRM B,TIOP(A)
|
||
ILDB B,TIOP(A)
|
||
SOS TICC(A)
|
||
CAIN B,^Z
|
||
JRST TYI
|
||
TYI1: MOVEM B,(C)
|
||
MOVE B,TTYSTS(A)
|
||
TLNE B,TTYDDT
|
||
CAIGE A,NTTYS
|
||
POPJ P,
|
||
|
||
TYO: TRZN A,400000
|
||
JRST .+3
|
||
SKIPGE TTYTBL(U)
|
||
PUSHJ P,UFLS
|
||
CAIL A,NTTYS
|
||
JRST MGTYO
|
||
MOVEI T,TORM(A)
|
||
PUSHJ P,TYOF
|
||
PUSHJ P,UFLS
|
||
JFCL
|
||
MOVE B,(C)
|
||
IDPB B,TOIP(A)
|
||
SOS TORM(A)
|
||
EXCH B,TOIP(A)
|
||
CAMN B,TOBEP(A)
|
||
SUBI B,TOBL
|
||
EXCH B,TOIP(A)
|
||
AOSN TTYON(A)
|
||
CONO TTY,@TTYST(A)
|
||
POPJ P,
|
||
|
||
|
||
TYOF: SKIPG (T) ;DO NOT CHANGE TO T,
|
||
POPJ P,
|
||
MOVE T,(T)
|
||
CAIL T,TOBL*2
|
||
AOS (P)
|
||
JRST POPJ1
|
||
|
||
TYICLS: ANDI A,377777
|
||
CONO PI,UTCOFF
|
||
MOVE B,TIIP(A)
|
||
MOVEM B,TIOP(A)
|
||
CAIL A,NTTYS
|
||
JRST TYICL1
|
||
CLEARM ECHOCC(A)
|
||
MOVEM B,ECHOP(A)
|
||
TYICL1: MOVEM B,TINTP(A)
|
||
CLEARM TICC(A)
|
||
CLEARM TINTC(A)
|
||
CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
|
||
|
||
TYOCLS:
|
||
TYOW: ANDI A,377777
|
||
CAIL A,NTTYS
|
||
JRST GTYOW1
|
||
MOVEI T,TOBS
|
||
CAME T,TORM(A)
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
GTYOW1: SKIPE GDFRSC-NTTYS(A)
|
||
PUSHJ P,UFLS
|
||
POPJ P,
|
||
|
||
|
||
AITYI: SKIPL A,TTYTBL(U)
|
||
SKIPG TINTC(A)
|
||
POPJ P,
|
||
MOVE B,TINTP(A)
|
||
CAMN B,TIBEP(A)
|
||
SUBI B,TIBL
|
||
HRRM B,TINTP(A)
|
||
ILDB B,TINTP(A)
|
||
SOS TINTC(A)
|
||
AOPVS: AOS (P)
|
||
|
||
AOPERV: MOVEM B,(J)
|
||
POPJ P,
|
||
|
||
|
||
ALISTEN: SKIPGE A,TTYTBL(U)
|
||
JRST ALIS1
|
||
PUSHJ P,TYOW
|
||
MOVEI B,0
|
||
CAIL A,NTTYS
|
||
JRST ALIS2
|
||
SKIPA B,ECHOCC(A)
|
||
ALIS1: TDZA B,B
|
||
ALIS2: ADD B,TICC(A)
|
||
JRST AOPERV
|
||
|
||
|
||
MGTYO: SKIPGE BPGFW-NTTYS(A)
|
||
PUSHJ P,GTYOW1
|
||
CLEARM BPGFW-NTTYS(A) ;PAGE WAIT
|
||
LDB B,[700,,(C)
|
||
CAIN B,14
|
||
JRST MGTF
|
||
CAIN B,12
|
||
POPJ P,
|
||
CAIN B,15
|
||
JRST MGTYCR
|
||
CAIN B,11
|
||
JRST MGTYT1
|
||
CAIG B,176
|
||
CAIGE B,175
|
||
CAIN B,33
|
||
MOVEI B,"$
|
||
CAILE B,"_
|
||
POPJ P,
|
||
CAIGE B,40
|
||
JRST MGG1
|
||
MGTCR1: AOS D,MGCC-NTTYS(A)
|
||
CAIL D,MCPL-1
|
||
JRST MGTYO1
|
||
PUSHJ P,MGTYOE
|
||
MGTYOR: CONSO GTYO,7
|
||
CONO GTYO,200+GETYOC
|
||
POPJ P,
|
||
|
||
MGTYOE: ORCBI B,177
|
||
ROT B,-1
|
||
TLNN B,400000
|
||
TRZ B,100
|
||
ILDB D,MGBP-NTTYS(A)
|
||
XOR D,B
|
||
TRNN D,177
|
||
POPJ P,
|
||
DPB B,MGBP-NTTYS(A)
|
||
AOS @MGCDP-NTTYS(A)
|
||
AOS GDFRSC-NTTYS(A)
|
||
POPJ P,
|
||
|
||
|
||
MGTYCR: MOVEI B,40
|
||
PUSHJ P,MGTCR1
|
||
JRST .-2
|
||
|
||
MGTYO1: LDB B,[700,,(C)
|
||
CAIN B,15
|
||
JRST MGTCR2
|
||
MOVEI B,"]
|
||
MGTCR3: PUSHJ P,MGTYOE
|
||
MOVE D,MGCDP-NTTYS(A)
|
||
ADDI D,GSTGL+1
|
||
CAMN D,GECBL-NTTYS+1(A)
|
||
JRST MGCR2 ;END OF PAGE
|
||
MOVE TT,TTYSTS(A)
|
||
TLNE TT,TTYIMI+TTYDDT ;SKIP ON NOT ECHOING. USE BOTTOM THREE LINES
|
||
JRST MGCR3
|
||
CAMN D,GECBLE-NTTYS(A)
|
||
JRST MGCR2
|
||
MGCR3: MOVEM D,MGCDP-NTTYS(A)
|
||
HRLI D,1000
|
||
MOVEM D,MGBP-NTTYS(A)
|
||
CLEARM MGCC-NTTYS(A)
|
||
LDB B,[700,,(C)
|
||
CAIE B,15
|
||
JRST MGTYO
|
||
PUSH P,MGBP-NTTYS(A)
|
||
PUSH P,MGCDP-NTTYS(A)
|
||
MOVE D,MGCDP-NTTYS(A)
|
||
ADDI D,GSTGL+1
|
||
CAMN D,GECBL-NTTYS+1(A)
|
||
JRST MGCR4
|
||
MOVE TT,TTYSTS(A)
|
||
TLNE TT,TTYIMI+TTYDDT ;NOT ECHOING
|
||
JRST .+3
|
||
CAML D,GECBLE-NTTYS(A)
|
||
MGCR4: MOVE D,GECBL-NTTYS(A)
|
||
MOVEM D,MGCDP-NTTYS(A)
|
||
HRLI D,1000
|
||
MOVEM D,MGBP-NTTYS(A)
|
||
MOVEI R,MCPL
|
||
MOVEI B,40
|
||
PUSHJ P,MGTYOE
|
||
SOJG R,.-2
|
||
POP P,MGCDP-NTTYS(A)
|
||
POP P,MGBP-NTTYS(A)
|
||
JRST MGTYOR
|
||
|
||
MGCR2: SETOM BPGFW-NTTYS(A)
|
||
MGTF2: MOVE D,GECBL-NTTYS(A)
|
||
JRST MGCR3
|
||
|
||
MGTCR2: SUB P,[1,,1
|
||
MOVEI B,40
|
||
JRST MGTCR3
|
||
|
||
|
||
MGTF: SETOM GFFF-NTTYS(A)
|
||
MOVSI D,-NLV
|
||
MOVE TT,GECBL-NTTYS(A)
|
||
MGTF1: CLEARM (TT)
|
||
MOVE Q,[336675573360
|
||
MOVEM Q,1(TT)
|
||
HRLI J,1(TT)
|
||
HRRI J,2(TT)
|
||
BLT J,GSTGL(TT)
|
||
ADDI TT,GSTGL+1
|
||
AOBJN D,MGTF1
|
||
CLEARM GDFRSC-NTTYS(A)
|
||
MOVEI C,[15
|
||
JRST MGTF2
|
||
|
||
MGG1: MOVEI B,"_
|
||
PUSHJ P,MGTCR1
|
||
LDB B,[700,,(C)
|
||
ADDI B,100
|
||
JRST MGTCR1
|
||
|
||
MGTYT1: MOVEI B,40
|
||
PUSHJ P,MGTCR1
|
||
LDB B,[300,,MGCC-NTTYS(A)
|
||
JUMPN B,MGTYT1
|
||
POPJ P,
|
||
|
||
HGCBT: CONO 635550 ;DEBUGGING ONLY
|
||
MOVE P,USRPDL
|
||
CONO TTY,400000
|
||
|
||
HGCBTL: PUSHJ P,HTYI
|
||
CAIN A,"D
|
||
JRST 174000
|
||
MOVEI T,-"0(A)
|
||
MOVE B,GECBL(T)
|
||
MOVEI C,0
|
||
GCBTL1: ILDB A,B
|
||
JUMPE A,GCBTL2
|
||
LSH A,1
|
||
TRZE A,200
|
||
TRO A,1
|
||
XORI A,177
|
||
CAIN A,40
|
||
AOJA C,[AOJA C,GCBTL1
|
||
GCBTL4: JUMPE C,GCBTL3
|
||
PUSH P,A
|
||
MOVEI A,40
|
||
PUSHJ P,HTYO
|
||
POP P,A
|
||
SOJA C,GCBTL4
|
||
GCBTL3: PUSHJ P,HTYO
|
||
MOVE D,A
|
||
MOVEI A,"*
|
||
TRZN D,400
|
||
MOVEI A,40
|
||
PUSHJ P,HTYO
|
||
JRST GCBTL1
|
||
|
||
HTYI: CONSO TTY,40
|
||
JRST .-1
|
||
DATAI TTY,A
|
||
ANDI A,177
|
||
|
||
HTYO: CONSZ TTY,20
|
||
JRST .-1
|
||
DATAO TTY,A
|
||
CONSO TTY,40
|
||
POPJ P,
|
||
JRST HGCBTL
|
||
|
||
GCBTL2: HRRZS B
|
||
CAMN B,GECBL+1(T)
|
||
JRST HGCBTL
|
||
MOVEI C,0
|
||
HRLI B,1000
|
||
MOVEI A,15
|
||
PUSHJ P,HTYO
|
||
MOVEI A,12
|
||
PUSHJ P,HTYO
|
||
JRST GCBTL1
|
||
|
||
TTYBRK: 0
|
||
CONSO DIS,77
|
||
JRST LPENT
|
||
CONSZ DIS,7400
|
||
JRST SRECYC
|
||
LPENT: CONSZ LPT,7
|
||
CONSZ LPT,10
|
||
SKIPA
|
||
JRST LPENT1
|
||
MOVEM I,TTYI
|
||
MOVEM A,TTYA
|
||
MOVEM B,TTYB
|
||
CONSZ GTYI,10
|
||
JRST GTYI1 ;FROM GE KLUDGE
|
||
MOVSI I,-NTTYS
|
||
TTYRET: CONO TTY,@TTYLT(I)
|
||
CONSO TTY,50
|
||
AOBJN I,.-2
|
||
JUMPL I,GOTTY
|
||
TTYRT1: MOVE I,TTYI
|
||
MOVE A,TTYA
|
||
MOVE B,TTYB
|
||
JRST 12,@TTYBRK
|
||
GOTTY: CONSZ TTY,10
|
||
JRST TYP11
|
||
CONSO TTY,40
|
||
JRST TTYRET
|
||
DATAI TTY,A
|
||
ANDI A,177
|
||
CAIN A,^Z
|
||
JSR ZFLAG
|
||
ZFLAG1: MOVE B,ECHOCC(I)
|
||
ADD B,TICC(I)
|
||
CAIL B,TIBS
|
||
JRST DING
|
||
IDPB A,TIIP(I)
|
||
PITEL2: MOVE A,TIIP(I)
|
||
CAMN A,TIBEP(I)
|
||
SUBI A,TIBL
|
||
HRRM A,TIIP(I)
|
||
MOVE B,TTYSTS(I)
|
||
AOJE B,PITEL4 ;NO USER HAS TTY
|
||
HRL B,MSKST-1(B)
|
||
TLNE B,BTINTE
|
||
JRST INTTY
|
||
PITEL4: CLEARM TINTC(I)
|
||
MOVEM A,TINTP(I)
|
||
PITEL3: AOSA ECHOCC(I)
|
||
DING: SETOM DINGF(I)
|
||
AOSN TTYON(I)
|
||
CONO TTY,10+TTYCHN
|
||
JRST TTYRET
|
||
|
||
|
||
|
||
INTTY: AOS TINTC(I)
|
||
MOVEI A,TTYIF
|
||
IORM A,PIRQC-1(B)
|
||
JRST PITEL3
|
||
|
||
ZFLAG2: MOVEI A,BCNTRZI
|
||
IORM A,PIRQC-1(B)
|
||
SKIPGE SUPPRO-1(B)
|
||
JRST ZFLAG4
|
||
ZFLAG3: MOVEI A,^Z
|
||
JRST @ZFLAG
|
||
|
||
ZFLAG: 0
|
||
MOVE B,TTYSTS(I)
|
||
AOJN B,ZFLAG2 ;NO USER HAS THIS TTY
|
||
FINDU4: SKIPL UTTYST
|
||
JRST TTYRET
|
||
HRRZM I,UTTYST
|
||
JRST ZFLAG3
|
||
|
||
ZFLAG4: MOVSI A,BUSRC
|
||
ANDCAM A,USTP-1(B)
|
||
JRST ZFLAG3
|
||
|
||
TYP11: AOSE TYOBFC(I)
|
||
JRST TYP1
|
||
MOVEI A,TOBS
|
||
MOVEM A,TORM(I)
|
||
MOVE A,TIOP(I)
|
||
MOVEM A,TOOP(I)
|
||
|
||
TYP1: HRRZ A,LCHAR(I)
|
||
AOSN LIF(I)
|
||
JRST TYP3
|
||
MOVEI A,12
|
||
HRRM A,LCHAR(I)
|
||
MOVEI A,7
|
||
AOSN DINGF(I)
|
||
JRST TYP3
|
||
MOVEI A,40
|
||
AOSG SPCCC(I)
|
||
JRST TYP3
|
||
MOVE A,TORM(I)
|
||
CAIL A,TOBS
|
||
JRST TYP4
|
||
MOVE A,TOOP(I)
|
||
CAMN A,TOBEP(I)
|
||
SUBI A,TOBL
|
||
HRRM A,TOOP(I)
|
||
ILDB A,TOOP(I)
|
||
AOS TORM(I)
|
||
MOVE B,TTYSTS(I)
|
||
TYP7: TLNE B,TTYIMO
|
||
JRST TYPI
|
||
TYPCOM: CAIN A,177
|
||
JRST TTYRET
|
||
CAIN A,175
|
||
MOVEI A,"$
|
||
CAIN A,15
|
||
TYP6: SETOM LIF(I)
|
||
CAIN A,10
|
||
JRST TYO1
|
||
CAILE A,6
|
||
CAIL A,16
|
||
JRST TYO1
|
||
TYP3: CAIE A,11
|
||
JRST TYP31
|
||
MOVE A,TICHRC(I)
|
||
IDIVI A,TABSPC
|
||
SUBI B,TABSPC
|
||
TYPCM2: MOVEM B,SPCCC(I)
|
||
JRST TTYRET
|
||
|
||
TYPCM1: CAIE A,11
|
||
JRST TYPCOM
|
||
MOVNI B,3
|
||
JRST TYPCM2
|
||
|
||
TYP31: HLRZ B,LCHAR(I)
|
||
CAIN A,12
|
||
CAME A,B
|
||
JRST .+2
|
||
SOSE LIF(I)
|
||
TYPI: DATAO TTY,A
|
||
HRLM A,LCHAR(I)
|
||
CAIL A,140
|
||
JRST TTYRET
|
||
CAIL A,40
|
||
AOS TICHRC(I)
|
||
CAIN A,15
|
||
CLEARM TICHRC(I)
|
||
JRST TTYRET
|
||
TYP4: SKIPLE ECHOCC(I)
|
||
JRST TYP4A
|
||
TYP5: CONO TTY,200+TTYCHN
|
||
SETOM TTYON(I)
|
||
JRST TTYRET
|
||
TYP4A: MOVE A,ECHOP(I)
|
||
CAMN A,TIBEP(I)
|
||
SUBI A,TIBL
|
||
HRRM A,ECHOP(I)
|
||
ILDB A,ECHOP(I)
|
||
SOS ECHOCC(I)
|
||
AOS TICC(I)
|
||
MOVE B,TTYSTS(I)
|
||
CAIG A,12
|
||
CAIGE A,11
|
||
CAIN A,15
|
||
TLNN B,TTYDDT
|
||
TLNE B,TTYIMI
|
||
CAIN A,^Z
|
||
JRST TYPCM1
|
||
JRST TTYRET
|
||
|
||
TYO1: CAIL A,40
|
||
JRST TYP3
|
||
ADDI A,100
|
||
HRRM A,LCHAR(I)
|
||
MOVEI A,"^
|
||
JRST TYP6
|
||
|
||
NCT==NTTYS+NGEC
|
||
TABSPC==8
|
||
DEFINE TBP NAM,IO,N
|
||
NAM: REPEAT N,(10700)T!IO!BO-1+.RPCNT*T!IO!BL
|
||
TERMIN
|
||
IRPS IO,,O O I I I I,NAM,,TOIP TOOP TIIP TIOP ECHOP TINTP,N,,NTTYS NTTYS NCT NCT NTTYS NCT
|
||
TBP NAM,IO,N
|
||
TERMIN
|
||
IRPS NAM,,LIF DINGF TICC SPCCC TICHRC ECHOCC LCHAR TINTC
|
||
NAM: REPEAT NCT,0
|
||
TERMIN
|
||
IRPS IO,,I O,N,,NCT NTTYS
|
||
T!IO!BS=5*T!IO!BL
|
||
T!IO!BO: BLOCK T!IO!BL*N
|
||
T!IO!BEP: REPEAT N,(10700)T!IO!BO-1+T!IO!BL*<.RPCNT+1>
|
||
TERMIN
|
||
TTYON: REPEAT NTTYS,-1
|
||
TORM: REPEAT NTTYS,TOBS
|
||
TYOBFC: REPEAT NTTYS,0
|
||
TTYST: REPEAT NTTYS,.RPCNT_12.+500010+TTYCHN
|
||
TTYLT: REPEAT 5,.RPCNT_12.+500000+TTYCHN
|
||
TERMIN
|
||
IRPS AC,,A B I
|
||
TTY!AC: 0
|
||
TERMIN
|
||
|
||
|
||
TTYSTS: REPEAT NCT,-1
|
||
;-1 NO USER
|
||
;RH USER NO
|
||
;LH 3.1 (IMAGE) 3.2 (DDT) TYPEING MODE 3.3 (IMAGE) TYPOUT MODE
|
||
|
||
MCPL==46. ;MAX CHAR/LINE
|
||
NLV==26. ;NO VERTICAL LINES
|
||
NCML==3 ;NO COMMAND LINES
|
||
NNCML==NLV-NCML ;NO NON COMMAND LINES
|
||
GSTGL==MCPL/4+1 ;REG STORAGE /LINE
|
||
|
||
GTYI1: DATAI GTYI,A
|
||
HLRZ I,A
|
||
MOVE I,GTYIT1(I) ;UNSCRAMBLE OFFSET
|
||
ANDI A,177
|
||
CAIN A,^Z
|
||
JSR ZFLAG
|
||
EXCH P,GTYIPP
|
||
MOVE B,TICC(I)
|
||
CAIL B,TIBS
|
||
JRST GDING
|
||
IDPB A,TIIP(I)
|
||
MOVEM A,GTYIT2
|
||
MOVE A,TIIP(I)
|
||
CAMN A,TIBEP(I)
|
||
SUBI A,TIBL
|
||
HRRM A,TIIP(I)
|
||
AOS TICC(I)
|
||
MOVE B,TTYSTS(I)
|
||
AOJE B,GTYI4 ;NO USER
|
||
HRL B,MSKST-1(B)
|
||
TLNE B,BTINTE
|
||
JRST GINTTY
|
||
|
||
GTYI4: CLEARM TINTC(I)
|
||
MOVEM A,TINTP(I)
|
||
GTYI7: MOVE B,TTYSTS(I)
|
||
TLNE B,TTYIMI+TTYDDT
|
||
JRST GTYI6C ;NO ECHO
|
||
MOVE A,GTYIT2
|
||
CAIN A,175
|
||
MOVEI A,"$
|
||
CAIN A,12
|
||
JRST GTYI6C
|
||
CAIN A,15
|
||
JRST GTYI6
|
||
GTYI6B: CAILE A,"_
|
||
JRST GTYI6C
|
||
CAIN A,11
|
||
JRST GTYT1
|
||
CAIGE A,40
|
||
JRST GTYIG1
|
||
PUSHJ P,GTYIS
|
||
JRST GTYI6 ;SWITCH LINES
|
||
GTYI6C: EXCH P,GTYIPP
|
||
JRST TTYRT1
|
||
|
||
GTYIPP: -10,,GTYIPD-1
|
||
GTYIPD: BLOCK 10
|
||
|
||
|
||
|
||
GTYIS: AOS B,CEHOP-NTTYS(I)
|
||
CAIGE B,MCPL
|
||
AOSA (P)
|
||
MOVEI A,"]
|
||
GTYIS1: ORCBI A,177
|
||
ROT A,-1
|
||
TLNN A,400000
|
||
TRZ A,100
|
||
ILDB B,GCMPR-NTTYS(I)
|
||
XOR B,A
|
||
TRNN B,177
|
||
POPJ P,
|
||
DPB A,GCMPR-NTTYS(I)
|
||
AOS @GTYILD-NTTYS(I)
|
||
AOS GDFRSC-NTTYS(I)
|
||
CONSO GTYO,7
|
||
CONO GTYO,200+GETYOC
|
||
POPJ P,
|
||
|
||
GTYIG1: MOVEI A,"_
|
||
PUSHJ P,GTYIS
|
||
JRST GTYI6
|
||
MOVE A,GTYIT2
|
||
ADDI A,100
|
||
PUSHJ P,GTYIS
|
||
JRST GTYI6
|
||
JRST GTYI6C
|
||
|
||
GTYT1: MOVEI A,40
|
||
PUSHJ P,GTYIS
|
||
JRST GTYI6
|
||
LDB A,[300,,CEHOP-NTTYS(I)
|
||
JUMPN A,GTYT1
|
||
JRST GTYI6C
|
||
|
||
GINTTY: AOS TINTC(I)
|
||
MOVEI A,TTYIF
|
||
IORM A,PIRQC-1(B)
|
||
JRST GTYI7
|
||
|
||
GTYI6: MOVEI A,40 ;CR OR LINE OVERFLOW
|
||
AOS B,CEHOP-NTTYS(I)
|
||
CAILE B,MCPL
|
||
JRST GTYI6A
|
||
PUSHJ P,GTYIS1
|
||
JRST GTYI6
|
||
|
||
|
||
GTYI6A: AOS B,GCMLC-NTTYS(I)
|
||
CAIL B,NCML
|
||
CLEARB B,GCMLC-NTTYS(I)
|
||
IMULI B,GSTGL+1
|
||
ADD B,GECBL-NTTYS(I)
|
||
ADDI B,<GSTGL+1>*NNCML
|
||
CLEARM CEHOP-NTTYS(I)
|
||
MOVEM B,GTYILD-NTTYS(I)
|
||
ADD B,[441000,,]
|
||
MOVEM B,GCMPR-NTTYS(I)
|
||
MOVE A,GTYIT2
|
||
CAIE A,15
|
||
JRST GTYI6B
|
||
PUSH P,GCMPR-NTTYS(I)
|
||
PUSH P,[MCPL]
|
||
MOVEI A,40
|
||
PUSHJ P,GTYIS1
|
||
SOSLE (P)
|
||
JRST .-3
|
||
SUB P,[1,,1
|
||
POP P,GCMPR-NTTYS(I)
|
||
JRST GTYI6C
|
||
|
||
|
||
GDING: MOVEI A,"?
|
||
MOVEM A,GTYIT2
|
||
JRST GTYI7
|
||
|
||
|
||
MXML==100.
|
||
GRLF==67
|
||
GLR==71
|
||
GFS==166
|
||
GRS==173
|
||
GPR==165
|
||
GLF==172
|
||
GETX==76
|
||
GFF==171
|
||
IGCK==2 ;GE CKSM FOR SOM AND STX
|
||
|
||
GTYOBK: 0
|
||
MOVEM I,GTYOI
|
||
MOVEM A,GTYOA
|
||
MOVEM B,GTYOB
|
||
AOS I,GTYOCN ;CONSOLE SERVICE ROUND ROBIN
|
||
CAIL I,NGEC
|
||
CLEARB I,GTYOCN
|
||
GTYOBR: AOSE B,GFFF(I)
|
||
SKIPE GDFRSC(I)
|
||
JRST GTYO1
|
||
AOS I
|
||
CAIL I,NGEC
|
||
MOVEI I,0
|
||
CAME I,GTYOCN
|
||
JRST GTYOBR
|
||
CONO GTYO,200 ;ALL CONSOLES CURRENT
|
||
MOVE A,40+2*GETYOC+1
|
||
MOVEM A,40+2*GETYOC
|
||
GTYOR1: MOVEM I,GTYOCN
|
||
MOVE B,GTYOB
|
||
MOVE A,GTYOA
|
||
MOVE I,GTYOI
|
||
JRST 12,@GTYOBK
|
||
|
||
GTYO1: JUMPE B,GTYO3A ;FF
|
||
MOVE A,TTYSTS+NTTYS(I)
|
||
TLNE A,TTYIMO
|
||
JRST GTYO4A ;NOT IN COMMAND MODE NO PRIORITY TO CAMMAND LINES
|
||
MOVE B,GECBL(I)
|
||
SKIPN NNCML*<GSTGL+1>(B)
|
||
SKIPE <NNCML+1>*<GSTGL+1>(B)
|
||
JRST GTYO2
|
||
SKIPE <NNCML+2>*<GSTGL+1>(B)
|
||
JRST GTYO2
|
||
GTYO4A: MOVE B,CPLNO(I) ;NO COMMAND LINES DIFFER CHECK REG LINES
|
||
GTYO4: SKIPE(B)
|
||
JRST GTYO3
|
||
ADDI B,GSTGL+1
|
||
CAMN B,GECBL+1(I)
|
||
MOVE B,GECBL(I)
|
||
CAME B,CPLNO(I)
|
||
JRST GTYO4
|
||
CLEARM GDFRSC(I)
|
||
JRST GTYOBR ;UNABLE TO FIND CHRS WHICH DIFFER
|
||
|
||
|
||
GTYO3: MOVEM B,CPLNO(I)
|
||
HRLI B,1000
|
||
MOVEM B,GTYOT5
|
||
CLEARM GTYOT1 ;LINE POSITION
|
||
GTYO3A: MOVNI A,MXML ;MAX LENGTH MESSAGE
|
||
MOVEM A,MECC ;COUNT
|
||
MOVEI A,GTYOBF+1
|
||
MOVEM A,GTYOBP
|
||
CLEARM GTYOCK
|
||
MOVE A,GTYOST(I)
|
||
JSR GTYOBE ;SET UP SELECTION
|
||
MOVEI A,177
|
||
JSR GTYOBE
|
||
MOVEI A,176
|
||
JSR GTYOBE
|
||
SKIPN GFFF(I)
|
||
JRST GTYOFF
|
||
|
||
GTYO5: AOS A,GTYOT1
|
||
CAILE A,MCPL
|
||
JRST GTYO6A ;CANT FIND CHR THAT DIFFERS
|
||
MOVEM B,GTYOT2
|
||
ILDB A,B
|
||
TRZN A,200
|
||
JRST GTYO5
|
||
SOS GTYOT1
|
||
HRRZ A,B ;FOUND DIRRERENCE POSITION POINTER TO LINE
|
||
SUB A,GECBL(I)
|
||
IDIVI A,GSTGL+1
|
||
MOVEM A,GTYOT3
|
||
|
||
GTYO6: MOVE A,GTYOT3
|
||
SUB A,CENPLV(I)
|
||
JUMPE A,GTYO7
|
||
JUMPG A,GTYO8 ;ONLY ALTERNATIVE IS TO LF DOWN
|
||
MOVNS A
|
||
CAMG A,GTYOT3 ;CHRS IF RFL UP
|
||
JRST GTYO8A
|
||
MOVEI A,GPR ;USE PAGE RET
|
||
CLEARM CENPLV(I)
|
||
CLEARM CENPLH(I)
|
||
JSR GTYOBE
|
||
JRST GTYO6
|
||
|
||
|
||
GTYO2: ADDI B,NNCML*<GSTGL+1>
|
||
MOVEM B,CPLNO(I)
|
||
JRST GTYO4
|
||
|
||
GTYO8A: MOVEM A,GTYOT4
|
||
GTYO8B: MOVEI A,GRLF
|
||
SOS CENPLV(I)
|
||
JSR GTYOBE
|
||
SOSLE GTYOT4
|
||
JRST GTYO8B
|
||
|
||
|
||
|
||
GTYO7: MOVE A,GTYOT1
|
||
SUB A,CENPLH(I) ;THERE VERTICALLY GET IT THERE HORIZ
|
||
JUMPE A,GTYO7F ;ITS THERE
|
||
JUMPG A,GTYO7A ;MUST SPACE OVER
|
||
MOVNS A
|
||
CAMG A,GTYOT1
|
||
JRST GTYO7B ;BS BACK
|
||
MOVEI A,GLR
|
||
CLEARM CENPLH(I)
|
||
JSR GTYOBE
|
||
JRST GTYO7
|
||
|
||
|
||
GTYO7A: MOVEM A,GTYOT4
|
||
GTYO7C: MOVEI A,GFS
|
||
AOS CENPLH(I)
|
||
JSR GTYOBE
|
||
SOSLE GTYOT4
|
||
JRST GTYO7C
|
||
JRST GTYO7F
|
||
|
||
GTYO8: MOVEM A,GTYOT4
|
||
GTYO8C: MOVEI A,GLF
|
||
AOS CENPLV(I)
|
||
JSR GTYOBE
|
||
SOSLE GTYOT4
|
||
JRST GTYO8C
|
||
JRST GTYO7
|
||
|
||
|
||
GTYO7B: MOVEM A,GTYOT4
|
||
GTYO7D: MOVEI A,GRS
|
||
SOS CENPLH(I)
|
||
JSR GTYOBE
|
||
SOSLE GTYOT4
|
||
JRST GTYO7D
|
||
|
||
GTYO7F: MOVE A,GTYOT2
|
||
MOVEM A,GTYOT7
|
||
GTYO7H: ILDB A,GTYOT7
|
||
TRZN A,200
|
||
JRST GTYO5A
|
||
SOS @GTYOT5 ;REDUCE DIFFERES COUNT FOR LINE
|
||
SOS GDFRSC(I) ;REDUCE COUNT FOR CONSOLE
|
||
DPB A,GTYOT7
|
||
AOS CENPLH(I)
|
||
JSR GTYOBE
|
||
MOVE A,CENPLH(I)
|
||
CAIGE A,MCPL
|
||
JRST GTYO7H
|
||
CLEARM CENPLH(I)
|
||
AOS A,CENPLV(I)
|
||
MOVEI B,GSTGL+1
|
||
ADDB B,GTYOT5
|
||
GTYO7G: HRLI B,1000
|
||
MOVEM B,GTYOT2
|
||
MOVEM B,GTYOT7
|
||
CLEARM GTYOT1
|
||
CAIGE A,NLV
|
||
JRST GTYO7H
|
||
CLEARB A,CENPLV(I)
|
||
MOVE B,GECBL(I)
|
||
MOVEM B,GTYOT5
|
||
JRST GTYO7G
|
||
|
||
GTYOFF: MOVEI A,GFF
|
||
JSR GTYOBE
|
||
CLEARM CENPLV(I)
|
||
CLEARM CENPLH(I)
|
||
JRST GTYO1A
|
||
|
||
|
||
|
||
GTYO5A: MOVE B,GTYOT2 ;END OF DIFFERENCE
|
||
JRST GTYO5
|
||
|
||
GTYO6A: MOVEI A,GTYOBF+4
|
||
CAME A,GTYOBP
|
||
JRST GTYO1A
|
||
CLEARM @GTYOT5 ;CANT FIND CAR POS WHERE THEY DIFFER
|
||
MOVE B,GTYOT5
|
||
JRST GTYO4A
|
||
|
||
GTYOBE: 0
|
||
MOVEM A,@GTYOBP
|
||
AOS GTYOBP
|
||
EQVM A,GTYOCK
|
||
AOSG MECC
|
||
JRST @GTYOBE
|
||
GTYO1A: SETOM MECC
|
||
MOVEI A,GETX
|
||
JSR GTYOBE
|
||
SETCM A,GTYOCK
|
||
MOVEM A,@GTYOBP
|
||
MOVE A,GTYOBP
|
||
SUBI A,GTYOBF-1
|
||
MOVNS A
|
||
HRLS A
|
||
HRRI A,GTYOBF-1
|
||
MOVEM A,GTOBLP
|
||
MOVE A,[BLKO GTYO,GTOBLP
|
||
MOVEM A,40+2*GETYOC
|
||
JRST GTYOR1
|
||
|
||
;GE TYPOUT DATA STORAGE
|
||
|
||
REPEAT NGEC,[
|
||
CONC GED,\.RPCNT,: REPEAT NLV,[
|
||
0 ;NO CHRS THAT DIFFER IN THIS LINE
|
||
BLOCK GSTGL
|
||
]
|
||
]
|
||
GECBL: REPEAT NGEC, CONC GED,\.RPCNT,
|
||
GECBL ;END CHECK FOR LAST CONSOLE
|
||
GECBLE: REPEAT NGEC,[CONC NNCML*<GSTGL+1>+GED,\.RPCNT
|
||
|
||
]
|
||
|
||
GCMPR: BLOCK NGEC ;BYTE POINTER FOR COMMAND ECHOING
|
||
GTYIT1: NTTYS
|
||
NTTYS+1
|
||
NTTYS+3
|
||
NTTYS+2
|
||
|
||
GTYILD: BLOCK NGEC ;DIFFERS COUNT POINTER FOR CURRENT TYPIN LINE
|
||
BPGFW: BLOCK NGEC ;PAGE WAIT FLAG FOR MAIN PRGM
|
||
CEHOP: BLOCK NGEC ;CHARACTER POSITION FOR COMMAND ECHOING
|
||
GLNDP: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR CURRENT COMMAND LINE
|
||
GDFRSC: BLOCK NGEC ;COUNT TOTAL CHRS DIFFERING FOR CONSOLE
|
||
GTYIT2: 0 ;TEMP FOR LAST CHR JUST RECD
|
||
GCMLC: BLOCK NGEC ;COMMAND LINE ON
|
||
CPLNO: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR LINE SENDER LAST LOOKED ON
|
||
CENPLV: BLOCK NGEC ;ENTRY MARKER POS VERTICAL
|
||
CENPLH: BLOCK NGEC ;ENTRY MARKER POS HORIZ
|
||
GTYOCK: 0 ;CHECKSOR
|
||
GTOBLP: 0 ;BLKO POINTER
|
||
|
||
MGBP: BLOCK NGEC ;MAIN PRGM TYO BYTE POINTER
|
||
MGCDP: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR OUTPUT LINE
|
||
MGCC: BLOCK NGEC ;MAN PROG LINE POS
|
||
GFFF: BLOCK NGEC ;FORM FEED FLAG
|
||
|
||
|
||
|
||
GTYOI: 0
|
||
GTYOA: 0
|
||
GTYOB: 0
|
||
GTYOCN: 0 ;CONSOLE NEXT IN LINE
|
||
GTYOT1: 0 ;LINE POSITION
|
||
MECC: 0 ;CHRS REMAINING IN MESS ALLOWABLE
|
||
|
||
GTYOBP: 0 ;OUTPUT BUFFER POINTER
|
||
GTYOBF: 77 ;SOH
|
||
0 ;SELCT CODE
|
||
177 ;SOM
|
||
176 ;STX
|
||
BLOCK MXML+10
|
||
|
||
GTYOT2: 0 ;BUFFER POINTER WHERE THEY DIFFER
|
||
GTYOT3: 0 ;DESIRED LINE NO
|
||
GTYOT4: 0
|
||
GTYOT5: 0 ;BUFFER POINTER TO BEG OF CURRENT LINE ALSO
|
||
GTYOT7: 0
|
||
;ADR POINTS TO DIFFERS COUNT
|
||
|
||
GTYOST: 117 ;CONSOLE SELECTION TABLE CONVERSION
|
||
113
|
||
107
|
||
103
|
||
|
||
GEKI: MOVSI I,-NGEC
|
||
CONO GTYO,200
|
||
GEK1: MOVEI A,1 ;GET CONSOLES INTO HAPPY MODE
|
||
PUSHJ P,GEKO
|
||
CLEARM GEKICK
|
||
MOVEI A,140
|
||
DPB I,[30200,,A
|
||
PUSHJ P,GEKO
|
||
MOVEI A,0
|
||
PUSHJ P,GEKO
|
||
MOVEI A,2
|
||
PUSHJ P,GEKO
|
||
MOVEI A,14
|
||
PUSHJ P,GEKO
|
||
MOVEI A,3
|
||
PUSHJ P,GEKO
|
||
MOVE A,GEKICK
|
||
PUSHJ P,GEKO
|
||
|
||
MOVE A,GECBL(I)
|
||
MOVEM A,CPLNO(I)
|
||
MOVEM A,MGCDP(I)
|
||
HRLI A,1000
|
||
MOVEM A,MGBP(I)
|
||
ADDI A,NNCML*<GSTGL+1>
|
||
MOVEM A,GTYILD(I)
|
||
MOVEM A,GCMPR(I)
|
||
CLEARM CEHOP(I)
|
||
HRRZM A,GLNDP(I)
|
||
CLEARM GDFRSC(I)
|
||
CLEARM GCMLC(I)
|
||
CLEARM CENPLV(I)
|
||
CLEARM CENPLH(I)
|
||
CLEARM BPGFW(I)
|
||
CLEARM MGCC(I)
|
||
MOVE B,GECBL(I)
|
||
GEKI2: CLEARM (B)
|
||
MOVE C,[336675573360
|
||
MOVEM C,1(B)
|
||
HRLI J,1(B)
|
||
HRRI J,2(B)
|
||
BLT J,GSTGL(B)
|
||
ADDI B,GSTGL+1
|
||
CAME B,GECBL+1(I)
|
||
JRST GEKI2
|
||
AOBJN I,GEK1
|
||
DATAI GTYI,A
|
||
CONO GTYO,200+GETYOC
|
||
CONO GTYI,GETYIC
|
||
POPJ P,
|
||
|
||
|
||
GEKO: ORCBI A,177
|
||
EQVM A,GEKICK
|
||
ROT A,-1
|
||
TLNN A,400000
|
||
TRZ A,100
|
||
CONSO GTYO,100
|
||
JRST .-1
|
||
DATAO GTYO,A
|
||
POPJ P,
|
||
|
||
GEKICK: 0
|
||
BLKTNB: SKIPE 5(B)
|
||
XCT 5(B) ;BLOCK IO HANDLER
|
||
BLKTF: PUSHJ P,UFLS ; CALL JSP B,BLKT ;ADR OF PTR IN C
|
||
PUSHJ P,@2(B) ; UPPA(A) ;ADR OF AC BUF PTR 4.9 OUT
|
||
JRST BLKTF ;UTPPC(A) ;CNT REM IN CUR BF
|
||
;UTRBUF NO SKIP NO MEMORY SKIP
|
||
;OTHERWISE TT BUF ORG ;ADR TO GET NEXT BUF
|
||
HRRM TT,@(B) ;UTRLBF ;PUT BUF ON FREE STG
|
||
SKIPA TT,4(B) ;BUFSIZ ;SIZE OF BUFFER
|
||
BLKT: SKIPA E,(C)
|
||
MOVEM TT,@1(B) ;BFLIS(A) ;ADDR TO WAIT FOR BUF
|
||
BLKT1: SKIPL TT,(C)
|
||
POPJ P,
|
||
SKIPG D,@1(B)
|
||
JRST BLKTNB ;NEW BUFFER
|
||
HLRES TT
|
||
MOVNS TT
|
||
CAMLE TT,D
|
||
MOVE TT,D
|
||
HRRZ D,(C)
|
||
ADD D,TT
|
||
CAML D,RMEMT(U) ;PROTECTION ERR
|
||
JRST IOADC
|
||
HRRZ D,(C)
|
||
ADDI D,@UPR(U)
|
||
HRL D,@(B)
|
||
SKIPGE (B)
|
||
MOVSS D
|
||
ADDM TT,@(B)
|
||
MOVN J,TT
|
||
ADDM J,@1(B)
|
||
HRLS TT
|
||
ADDM TT,(C)
|
||
ADDI TT,(D)
|
||
BLT D,-1(TT)
|
||
SKIPN @1(B)
|
||
PUSHJ P,@3(B)
|
||
JRST BLKT1
|
||
|
||
|
||
SUBTTL UTAPE SERVICE ROUTINE
|
||
|
||
NUTIC==6 ;NUM UT IN CHNLS
|
||
NUTOC==6 ;NUM UT OUTPUT CHAN
|
||
UTBLKS==4
|
||
|
||
;UT CHANNEL STORAGE
|
||
;INPUT CHANNELS
|
||
UTCHNT:
|
||
|
||
UTBFP: REPEAT NUTIC+NUTOC,400000,,377 ;L H BUFFER LINK PTR (INPUT PI)
|
||
;RH " " OUTPUT MAIN PROG
|
||
|
||
UTUSR: ;USER OR -1 IF FREE (LH)
|
||
UTUL: REPEAT NUTIC+NUTOC,-1 ;LINK TO CHANNEL ON SAME UTAPE OR -1(RH)
|
||
UTDIRP: BLOCK NUTIC+NUTOC ;BYTE POINTER TO UTDIR
|
||
UTDBC: BLOCK NUTIC+NUTOC ;RH BLCK COUNT CORRESP WITH UTDIRP
|
||
;L H 3.1 3.5 READ FILE NO 4.9 ERROR 4.5 4.8 ERROR CNT
|
||
;3.6 =0 FORD EXT =1 BACK EXT 3.7 4.2 PUT FILE NO
|
||
;4.4 DELETE ON READ CLOSE
|
||
|
||
UTBFS: BLOCK NUTIC+NUTOC ;BUFFERS IN USE
|
||
UTLSTM: BLOCK NUTIC+NUTOC ; TIME LAST BUF TAKEN BY PROG(RH)
|
||
; MN PROG ACTIVE BFFR NO OR -1,IF NO BUFFER ACIVE (LH)
|
||
UTRAC: BLOCK NUTIC+NUTOC+1 ;ACTIVE BUFFER NO PI RH
|
||
;FLAG TO MAIN PROG TP FULL (WRITE) RH
|
||
;SIGN SET =>CHANNEL LOCKED
|
||
;4.8 READ EOF REACHED AT PILEVEL OR CHNL CLOSED
|
||
;EXTRA WORD FOR FILE DIR CHNL
|
||
UTN1=.-NUTIC+1
|
||
BLOCK NUTOC
|
||
UTN2=.-NUTIC+1
|
||
BLOCK NUTOC ;NAME OF FILE BEING WRITTEN
|
||
MPRP: BLOCK NUTIC+NUTOC ;MAIN PRGM BUFFER PNTR
|
||
MPRC: BLOCK NUTIC+NUTOC ;CNT REMAINING
|
||
UTTNO: BLOCK NUTOC+NUTIC ;TAPE NO (RH)
|
||
;LH CLOSE FLAG WRITE ORG FILE NO READ
|
||
|
||
UTLDD: BLOCK NUTIC+NUTOC+1 ;IF -1, DC IS ACTUALLY SET UP AND TRANSFER CAN
|
||
;BE EXPECTED IN LESS TAH 100 MS.
|
||
;IF D CHANNEL LOCKED FLAG(4.9 UTRAC) WELL BE CHECKED
|
||
;BEFORE GOING TO THE -1 STATE
|
||
;EXTRA WORD FOR DIR CHNL
|
||
;UTBFP RH OUTPUT LINK (PI)
|
||
; LH INPUT
|
||
;UTDBC BLOCK CNT
|
||
|
||
UTFS: 377 ;FREE STG PNTR TO 200 WD BUFFERS
|
||
UTTLB: -NUTIC-NUTOC ;TOTAL BUFFERS ALLOCATED TO UTAPES
|
||
UTTBF: 0 ;TOTAL UT BUFFERS FREE
|
||
NUTCA: 0 ;NUMBER UTAPE CHANNELS ACTIVE
|
||
|
||
UPCHFS: 0 ;FAIR SHARE BFS PER CHNL
|
||
|
||
AUTDM: SKIPE B,(J) ;UT DISMT
|
||
CAILE B,NUNITS
|
||
POPJ P,
|
||
MOVSI C,-NUTIC-NUTOC
|
||
CONO PI,UTCOFF
|
||
AUTDM1: SKIPGE UTUSR(C)
|
||
JRST AUTDM2
|
||
HRRZ D,UTTNO(C)
|
||
CAMN B,D
|
||
JRST UTCONJ ;SOME ON USING TAPE
|
||
AUTDM2: AOBJN C,AUTDM1
|
||
CONO PI,UTCON
|
||
MOVSI C,(SETZ)
|
||
IORM C,UFLAPF(B)
|
||
JRST POPJ1
|
||
|
||
UTCONJ: CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
UTOF1: MOVSI TT,200000
|
||
IORM TT,UFLAPF(I) ;RQEST ABORT OF FLAP
|
||
CONO PI,UTCON
|
||
SKIPGE UFLAPF(I)
|
||
PUSHJ P,UFLS ;HOPE FOR BEST
|
||
|
||
UTO: JUMPE I,CPOPJ
|
||
CAILE I,NUNITS
|
||
POPJ P,
|
||
CONO PI,UTCOFF
|
||
SKIPGE UFLAPF(I)
|
||
JRST UTOF1 ;FLAPPING IN PROGRESS
|
||
SKIPGE TT,UDIRO(I)
|
||
TLNN TT,177777
|
||
JRST UTO4 ;FILE DIR IN OR ON THE WAY
|
||
MOVEI TT,200000
|
||
MOVEM TT,DCHNT(I)
|
||
UTO4: CONO PI,UTCON
|
||
|
||
UTO6: PUSHJ P,LWAIT
|
||
SKIPGE UDIRO(I)
|
||
|
||
|
||
UTO5: MOVSI TT,400000
|
||
IORM TT,UDIRO(I) ;LOCK DIRECTORY
|
||
CONO PI,UTCON
|
||
TRNE D,200000
|
||
JRST UTDEL1 ;DELETE OR RENAME
|
||
JUMPL D,UTOW1 ;WRITE
|
||
PUSHJ P,UTLK3 ;MUST NOT CLOBBER TT
|
||
JUMPE B,UTO5A
|
||
UTOW2:UTO8: CONO PI,UTCON
|
||
MOVSI TT,-NUTIC
|
||
TLNE C,1
|
||
MOVE TT,[-NUTOC,,NUTIC
|
||
SKIPL UTUSR(TT)
|
||
AOBJN TT,.-1
|
||
JUMPG TT,NCA ;NO CHANNEL AVAILABLE
|
||
CONO PI,UTCOFF
|
||
SKIPL UTUSR(TT)
|
||
JRST UTO8
|
||
UTO7: MOVEI J,DCHNT-UTUL(I)
|
||
JRST .+2
|
||
UTO2: MOVE J,Q
|
||
HRRE Q,UTUL(J)
|
||
JUMPGE Q,UTO2
|
||
|
||
|
||
UTO1: HRLOM U,UTUSR(TT)
|
||
HRRM TT,UTUL(J)
|
||
HRRZM I,UTTNO(TT)
|
||
CLEARM UTDBC(TT)
|
||
DPB A,[300500,,UTDBC(TT)
|
||
JUMPL D,UTOW3
|
||
DPB A,[220500,,UTDBC(TT)
|
||
UTOW4: HRLM A,UTTNO(TT)
|
||
HRRZ J,UDIRO(I)
|
||
ADD J,[500,,23.*2-1
|
||
MOVEM J,UTDIRP(TT)
|
||
MOVE J,[SETZ 377
|
||
MOVEM J,UTBFP(TT)
|
||
CLEARM UTBFS(TT)
|
||
MOVE J,TIME
|
||
HRROM J,UTLSTM(TT)
|
||
HLLOS UTRAC(TT)
|
||
HRRZS UTRAC(TT)
|
||
CONO PI,UTCON
|
||
CLEARM MPRC(TT)
|
||
LDB Q,[220300,,C
|
||
MOVE Q,UTOT(Q)
|
||
AOS NUTCA
|
||
PUSHJ P,FSCMP
|
||
|
||
UTO9: MOVSI E,400000
|
||
ANDCAM E,UDIRO(I) ;RELEASE FILE DIR
|
||
HRRZS UTRAC(TT)
|
||
HRL Q,TT
|
||
MOVEM Q,(R) ;STORE CHANNEL WD
|
||
|
||
RSKP: AOS UUOH
|
||
POPJ P,
|
||
|
||
UTO5A: ANDCAM TT,UDIRO(I)
|
||
POPJ P,
|
||
|
||
UTOW1: PUSH P,B
|
||
PUSH P,A
|
||
CLEARB A,B
|
||
PUSHJ P,UTLK3
|
||
JUMPE B,FILDF ;FILE DIR FULL
|
||
JRST UTOW2
|
||
|
||
UTOW3: HRROM TT,1(B) ;RESERVE FILE NAME
|
||
POP P,UTN1(TT)
|
||
POP P,UTN2(TT)
|
||
MOVSI J,100000
|
||
IORM J,UDIRO(I) ;SET FILE DIR MODIFYED
|
||
JRST UTOW4
|
||
|
||
UTOT: DNUACII ;ASCII UNITS INPUT
|
||
DNUACCO ;ASCII UNITS OUTPUT
|
||
DNUBKI ; " BLOCK INPUT
|
||
DNUBKO ; " BLOCK OUTPUT
|
||
DNUDTI ; WD INPUT
|
||
DNUDTO ; WD OUTPUT
|
||
DNUBKI ; BLOCK IN
|
||
DNUBKO ;BLOCK OUT
|
||
|
||
UDATAI: HRROM C,I
|
||
MOVEI C,I
|
||
|
||
UBLKI: JSP B,BLKT
|
||
MPRP(A)
|
||
MPRC(A)
|
||
UTBGB
|
||
UTBRB
|
||
200
|
||
SKIPG UTBFS(A)
|
||
|
||
|
||
UASCII: MOVEI B,UBLKI+1
|
||
JRST CHRKT
|
||
|
||
UASCCO: MOVEI B,UBLKO+1
|
||
CHRKT: SOSGE @1(B)
|
||
JRST CHRKT1 ;GET NEW BUFFER
|
||
SKIPGE (B)
|
||
JRST CHRKT2
|
||
ILDB D,@(B)
|
||
CAIN D,141
|
||
JRST CHRKT3
|
||
MOVEM D,(C)
|
||
POPJ P,
|
||
|
||
CHRKT2: MOVE D,(C)
|
||
IDPB D,@(B)
|
||
POPJ P,
|
||
|
||
CHRKT1: PUSHJ P,@3(B)
|
||
SKIPE 5(B)
|
||
XCT 5(B)
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,@2(B)
|
||
CHRKT4: JRST .-2
|
||
HRRM TT,@(B)
|
||
MOVEI E,440700
|
||
HRLM E,@(B)
|
||
MOVE E,4(B)
|
||
IMULI E,5
|
||
MOVEM E,@1(B)
|
||
JRST CHRKT
|
||
|
||
CHRKT3: HRROI D,141
|
||
MOVEM D,(C)
|
||
JRST UTICL
|
||
|
||
UTOCLR: MOVSI Q,(SETZ)
|
||
IORM Q,UTTNO(A)
|
||
MOVEI C,[141
|
||
UTOCR2: SKIPG MPRC(A)
|
||
JRST UTOCR3
|
||
PUSHJ P,UASCCO
|
||
JRST UTOCR2
|
||
|
||
UTOCR3: PUSHJ P,UTBWW
|
||
JRST UTOCL2
|
||
|
||
UTBGB: LDB Q,[IOLO,,UTBFP(A)
|
||
CAIN Q,377
|
||
JRST 4,. ;PNTRS OUT OF PHASE
|
||
CAIN Q,376
|
||
JRST UTBG1 ;END OF FILE
|
||
SKIPGE IOBFT(Q)
|
||
POPJ P,
|
||
CONO PI,UTCOFF
|
||
LDB J,[IOLO,,IOBFT(Q)
|
||
HRRM J,UTBFP(A)
|
||
MOVEI TT,(SETZ)
|
||
CAIL J,376
|
||
HRLM TT,UTBFP(A)
|
||
CONO PI,UTCON
|
||
SOS UTBFS(A)
|
||
UTBWG4: MOVE J,TIME
|
||
HRRM J,UTLSTM(A)
|
||
MOVEI J,-3
|
||
DPB J,[IOLO,,IOBFT(Q)
|
||
LDB TT,[IOSA,,IOBFT(Q)
|
||
LSH TT,6
|
||
HRLM Q,UTLSTM(A)
|
||
JRST POPJ1
|
||
|
||
|
||
UDATAO: HRROM C,I
|
||
MOVEI C,I
|
||
|
||
UBLKO: JSP B,BLKT
|
||
SETZ MPRP(A)
|
||
MPRC(A)
|
||
UTBWG
|
||
UTBWW
|
||
200
|
||
0
|
||
|
||
|
||
UTBWG: PUSH P,A
|
||
PUSH P,B
|
||
MOVE D,A
|
||
HRRZ Q,UTBFP(D)
|
||
CAIL Q,376
|
||
JRST UTBWG1 ;NO BUFS NOW RELOAD
|
||
SKIPGE UTDBC(D)
|
||
JRST POPBAJ ;CHNL IN ERR
|
||
|
||
UTBWG2: HRRZ J,UTBFS(D)
|
||
CAMG J,UPCHFS
|
||
JRST UTBWG1
|
||
UTBWG3: PUSHJ P,TCALL
|
||
JRST UIMRQ
|
||
JRST POPBAJ
|
||
PUSHJ P,TCALL
|
||
JRST UTMGB
|
||
JRST UTBWG2
|
||
|
||
|
||
UTBWG1: PUSHJ P,TCALL
|
||
JRST IUTCONS
|
||
JRST UTBWG3
|
||
MOVE Q,A
|
||
POP P,B
|
||
POP P,A
|
||
AOS UTBFS(A)
|
||
JRST UTBWG4
|
||
|
||
|
||
POPBAJ: POP P,B
|
||
JRST POPAJ
|
||
|
||
UTBWW: HLRE Q,UTLSTM(A)
|
||
JUMPL Q,CPOPJ
|
||
MOVEI J,377
|
||
IORM J,IOBFT(Q)
|
||
SKIPGE UTTNO(A)
|
||
SOS IOBFT(Q) ;CHANGE TO EOF
|
||
CONO PI,UTCOFF
|
||
HLRE J,UTBFP(A)
|
||
JUMPL J,UTBWW1
|
||
DPB Q,[IOLO,,IOBFT(J)
|
||
|
||
UTBWW2: HRLM Q,UTBFP(A)
|
||
CONO PI,UTCON
|
||
HRROS UTLSTM(A)
|
||
POPJ P,
|
||
|
||
UTBWW1: HRRM Q,UTBFP(A)
|
||
JRST UTBWW2
|
||
|
||
UDLOCK: HRRZ C,UTTNO(D)
|
||
PUSHJ P,LWAIT
|
||
SKIPGE UDIRO(C)
|
||
MOVSI A,(SETZ)
|
||
IORM A,UDIRO(C)
|
||
CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
|
||
UTOCL: MOVSI Q,(SETZ)
|
||
IORM Q,UTTNO(A)
|
||
UTOCL1: HRROI I,0
|
||
SKIPG MPRC(A)
|
||
JRST UTOCL2
|
||
PUSHJ P,UDATAO+1
|
||
JRST UTOCL1
|
||
|
||
|
||
|
||
UTOCL2: MOVE D,A
|
||
SKIPE UTBFS(D)
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,UDLOCK
|
||
HRRZ C,UTTNO(D)
|
||
HRRZ Q,UTBFP(D)
|
||
CAIL Q,376
|
||
JRST UTOCL4 ;NORMAL CLOSE
|
||
MOVEI Q,IOCERR ;ABORT WORKS
|
||
IORM Q,PIRQC(U)
|
||
MOVEI A,0
|
||
HRROI B,(D)
|
||
PUSHJ P,UDELETE
|
||
PUSHJ P,UDULK
|
||
JRST UTOCL3
|
||
|
||
UTOCL4: MOVE A,UTN1(D)
|
||
MOVE B,UTN2(D)
|
||
PUSHJ P,UDELETE
|
||
LDB Q,[220500,,UTTNO(D)]
|
||
LSH Q,1
|
||
ADD Q,UDIRO(C)
|
||
MOVE A,UTN1(D)
|
||
MOVE B,UTN2(D)
|
||
MOVEM A,-2(Q)
|
||
MOVEM B,-1(Q)
|
||
PUSHJ P,UDULK
|
||
JRST UTOCL3
|
||
|
||
|
||
UTDEL1: MOVE C,I ;DELETE
|
||
HRRZ R,40
|
||
ADDI R,@UPR(U)
|
||
SKIPE 3(R)
|
||
JRST UTRN1 ;RENAME
|
||
PUSHJ P,UDELETE
|
||
PUSHJ P,UDULK
|
||
JUMPN B,CPOPJ
|
||
JRST POPJ1
|
||
|
||
UTRN1: PUSHJ P,UTLOOK
|
||
JUMPE B,CPOPJ
|
||
PUSH P,Q
|
||
MOVE A,3(R)
|
||
MOVE B,4(R)
|
||
PUSHJ P,UTLOOK
|
||
POP P,Q
|
||
JUMPE B,UDULK
|
||
MOVE A,3(R)
|
||
MOVE B,4(R)
|
||
MOVEM A,1(Q)
|
||
MOVEM B,2(Q)
|
||
MOVSI A,100000
|
||
IORM A,UDIRO(C)
|
||
UTRN2: PUSHJ P,UDULK
|
||
JRST POPJ1
|
||
|
||
UDELETE: PUSHJ P,UTLOOK
|
||
JUMPE B,CPOPJ ;TAPE NO IN C,FILE NAME IN A,B
|
||
MOVEI E,NUTIC-1
|
||
UDELE4: HRRZ J,UTTNO(E)
|
||
SKIPL UTUSR(E)
|
||
CAME J,C
|
||
JRST UDELE3
|
||
HLRZ J,UTTNO(E)
|
||
CAME J,A
|
||
JRST UDELE3
|
||
LDB J,[360100,,UTDBC(E)
|
||
JUMPN J,UDELE3
|
||
MOVSI J,10000
|
||
IORM J,UTDBC(E)
|
||
CLEARM (Q)
|
||
SETOM 1(Q)
|
||
POPJ P,
|
||
|
||
UDELE3: SOJGE E,UDELE4
|
||
UDELE1: CLEARM (Q)
|
||
CLEARM 1(Q)
|
||
MOVSI J,100000
|
||
IORM J,UDIRO(C)
|
||
UDELE6: HRRZ B,UDIRO(C)
|
||
ADD B,[500,,23.*2-1
|
||
MOVEI J,0
|
||
UDELE2: ILDB E,B
|
||
CAMN E,A
|
||
DPB J,B
|
||
CAIE E,37
|
||
JRST UDELE2
|
||
MOVE B,A
|
||
MOVEI A,0
|
||
JRST UDELETE
|
||
|
||
|
||
UTBG1: POP P,D
|
||
HRRZS D
|
||
CAIN D,CHRKT4
|
||
JRST CHRKT3
|
||
CAME E,(C)
|
||
POPJ P,
|
||
CLEARM (R)
|
||
UTICL:
|
||
UTICL1: MOVE D,A
|
||
MOVSI C,200000
|
||
IORM C,UTRAC(D) ;SET EOF
|
||
MOVEI T,400000
|
||
TDNN T,UTRAC(D)
|
||
PUSHJ P,UFLS ;WAIT FOR ACTIVE BUFFER TO TRANSFER
|
||
PUSHJ P,UTBRB1 ;RETURN ACTIVE BUFFER MAIN PROG
|
||
HLRZ A,UTTNO(D)
|
||
MOVE B,UTDBC(D)
|
||
TLNE B,10000
|
||
PUSHJ P,UDELE5 ;FINISH FILE DELETE
|
||
MOVSI C,200000
|
||
IORM C,UTRAC(D)
|
||
MOVEI T,400000
|
||
TDNN T,UTRAC(D)
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,UTBRB1 ;RETURN ACTIVE BUFFER MAIN PROG
|
||
UTOCL3: HRRZ A,UTBFP(D)
|
||
UTICL2: CAIL A,376
|
||
JRST UTICL3
|
||
LDB C,[IOLO,,IOBFT(A)
|
||
PUSHJ P,BRTN
|
||
MOVE A,C
|
||
JRST UTICL2
|
||
|
||
|
||
UTICL3: PUSHJ P,UCPAT0 ;UT CHANNEL PATCH OUT
|
||
CLEARM UTDIRP(D)
|
||
SETOM UTUSR(D)
|
||
POPJ P,
|
||
|
||
|
||
|
||
UCPAT0: HRRZ B,UTTNO(D) ;PATCH OUT CHANNEL
|
||
MOVEI C,DCHNT-UTUL(B)
|
||
CONO PI,UTCOFF
|
||
UCPAT2: HRRE E,UTUL(C)
|
||
JUMPL E,UTCOP
|
||
CAMN E,D
|
||
JRST UCPAT1
|
||
MOVE C,E
|
||
JRST UCPAT2
|
||
|
||
UCPAT1: HRRZ E,UTUL(E)
|
||
HRRM E,UTUL(C)
|
||
SOS NUTCA
|
||
UTCOP: CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
UDELE5: PUSHJ P,UDLOCK
|
||
HLRZ Q,UTTNO(D)
|
||
LSH Q,1
|
||
ADD Q,UDIRO(C)
|
||
SUBI Q,2
|
||
PUSHJ P,UDELE1
|
||
UDULK: MOVSI A,(SETZ)
|
||
ANDCAM A,UDIRO(C)
|
||
POPJ P,
|
||
|
||
UTBRB1: MOVE A,D
|
||
UTBRB: PUSH P,A
|
||
HLRE A,UTLSTM(A)
|
||
JUMPL A,POPAJ
|
||
PUSHJ P,BRTN
|
||
POP P,A
|
||
HRROS UTLSTM(A)
|
||
POPJ P,
|
||
|
||
IUTCONS:
|
||
IUTCO1: SKIPG UTTBF
|
||
JRST IUTC1
|
||
MOVEI E,UTFS-IOBFT
|
||
MOVE A,UTFS ;CHNL NO IN D
|
||
IUTC3: CAIN A,377
|
||
JRST IUTC1
|
||
LDB B,[420200,,IOBFT(A)
|
||
JUMPN B,IUTC2
|
||
LDB B,[IOLO,,IOBFT(A)
|
||
DPB B,[IOLO,,IOBFT(E)
|
||
DPB D,[IOCH,,IOBFT(A)
|
||
SOS UTTBF
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
IUTC2: MOVE E,A
|
||
LDB A,[IOLO,,IOBFT(A)
|
||
JRST IUTC3
|
||
|
||
IUTC1: PUSHJ P,UIMRQ
|
||
POPJ P,
|
||
PUSHJ P,UTMGB
|
||
JRST IUTCO1
|
||
|
||
IBRTN: PUSH P,B
|
||
MOVE B,UTFS
|
||
DPB B,[IOLO,,IOBFT(A)
|
||
MOVEM A,UTFS
|
||
MOVEI B,77
|
||
DPB B,[IOCH,,IOBFT(A)
|
||
AOS UTTBF
|
||
JRST POPBJ
|
||
|
||
|
||
|
||
UTMGB: MOVEI B,76 ;GOBBLE MEM BLK IN A FOR UTAPE BUFFER
|
||
DPB B,[MUR,,MEMBLT(A)
|
||
MOVE J,A
|
||
LSH A,10.-6. ;CONV TO BUF SA
|
||
MOVE TT,A ;INCR TO NEXT BUF ADR
|
||
MOVEI R,8
|
||
ADDM R,UTTLB ;UTTBF AOSED AT IBRTN
|
||
MOVNI Q,1
|
||
UTMG1: PUSHJ P,IOBCNS
|
||
DPB TT,[IOSA,,IOBFT(A)
|
||
JUMPL Q,UTMG2
|
||
DPB A,[IOLC,,IOBFT(Q)
|
||
UTMG3: MOVE Q,A
|
||
PUSHJ P,IBRTN
|
||
ADDI TT,2
|
||
SOJG R,UTMG1
|
||
MOVEI TT,377
|
||
DPB TT,[IOLC,,IOBFT(A)
|
||
FSCMP: MOVE A,UTTLB
|
||
IDIV A,NUTCA
|
||
MOVEM A,UPCHFS
|
||
POPJ P,
|
||
|
||
|
||
BRTN: CONO PI,UTCOFF
|
||
PUSHJ P,IBRTN
|
||
CONO PI,UTCON
|
||
POPJ P,
|
||
|
||
UTMG2: DPB A,[MLO,,MEMBLT(J)
|
||
JRST UTMG3
|
||
|
||
UTRL1: JUMPE B,UTRLDR
|
||
HRRZ B,UTBFP(D)
|
||
CAIE B,377
|
||
JRST JDB6C
|
||
UTRLDR: LDB R,[270100,,UTDBC(D)
|
||
JUMPN R,UTRLD1
|
||
SKIPGE UDIRO(C) ;SPECIAL KLUDGE TO RUN FAST
|
||
JRST UTRLD1
|
||
LDB TT,[220500,,UTDBC(D)
|
||
ILDB B,UTDIRP(D)
|
||
AOS UTDBC(D)
|
||
CAME B,TT
|
||
JRST UTRLD2
|
||
UTRLD3: PUSHJ P,IUTCONS ;RTN BUFFER NO IN A
|
||
JRST UTRLR1 ;MEM LOCKED (OR SOMETHING)
|
||
CLEARM URDWR(C)
|
||
JRST UTRLD
|
||
|
||
UTRLD2: CAIN B,37
|
||
PUSHJ P,UAR
|
||
|
||
UTRLD1: PUSHJ P,UDIRAD
|
||
JRST JDB6C2 ;DIR DOUBLE LOCKED
|
||
JRST UTREOF
|
||
JRST UTRLD3
|
||
|
||
JDDTA: SETOM DCFREE
|
||
HLRZ D,ULDCH(C) ;FINISHED DATA TRANS TAPE IN C GET CHNL NO
|
||
CLEARM UTLDD(D)
|
||
SETOM SMODE
|
||
CONSZ PI,DCCHNA
|
||
JRST UDATER
|
||
SETOM UGOAL(C)
|
||
|
||
CAIL D,NUTIC
|
||
JRST JDDT1 ;WRITE
|
||
MOVE E,UTRAC(D)
|
||
HLLOS UTRAC(D)
|
||
MOVEI B,377
|
||
IORM B,IOBFT(E)
|
||
HLRE B,UTBFP(D)
|
||
JUMPL B,JDDT5
|
||
DPB E,[IOLO,,IOBFT(B)
|
||
JDDT6: HLRM E,UTBFP(D)
|
||
AOS UTBFS(D)
|
||
|
||
|
||
JDDT2: PUSHJ P,JDB6W
|
||
JRST JDDT3 ;SAME TAPE CAN RELOAD, DONT CHECK OTHERS
|
||
JDDT4: HRRZS ULDCH(C)
|
||
JRST JDB4A ;UNIT NOW IDLE STOP IT
|
||
|
||
JDDT1: CAIL D,NUTIC+NUTOC
|
||
JRST UDRDD3 ;FILE DIR IN OR OUT
|
||
HRRZ A,UTRAC(D)
|
||
PUSHJ P,IBRTN
|
||
HLLOS UTRAC(D)
|
||
SOS UTBFS(D)
|
||
JRST JDDT2
|
||
|
||
|
||
JDDT5: HRRM E,UTBFP(D)
|
||
JRST JDDT6
|
||
UTREOF: MOVSI E,200000
|
||
IORM E,UTRAC(D)
|
||
HLRE E,UTBFP(D)
|
||
SKIPL E
|
||
SOSA IOBFT(E) ;TURN END OF LIST TO END OF FILE
|
||
SOS UTBFP(D)
|
||
AOS UTBFS(D) ;TO START MAIN PROG
|
||
JRST JDB6C
|
||
|
||
JDB6W: HRRE D,DCHNT(C)
|
||
JUMPL D,JDB6W1 ;NO CHANNELS ACTIVE
|
||
CAIN D,200000
|
||
JRST UDRDD ;READ FILE DIR
|
||
JDB6C1: SKIPL E,UTRAC(D)
|
||
TLNE E,200000
|
||
JRST JDB6C2 ;CHANNEL LOCKED
|
||
CAIL D,NUTIC
|
||
JRST JDB6A ;WRITE CHANNEL
|
||
HRRZ B,UTFS
|
||
CAIN B,377
|
||
JRST JDB6E ;TRY TO GET MORE MEMORY
|
||
MOVE B,UTBFS(D)
|
||
SOJLE B,UTRL1 ;RELOAD CHANNEL WITH ONE OR NO BUFFERS
|
||
HRRZ B,UTLSTM(D)
|
||
SUB B,TIME
|
||
CAMG B,[-300.
|
||
JRST JDB6C2 ;NO RELOAD
|
||
JDB6F: HRRZ B,UTBFS(D) ;NUMBER BUFS THIS CHANNEL HAS
|
||
CAMGE B,UPCHFS
|
||
JRST UTRLDR
|
||
JDB6E: PUSHJ P,UIMRQ ;TRY TO GET MORE MEMORY (IO)
|
||
JRST JDB6C2 ;NOT AVAIL
|
||
PUSHJ P,UTMGB ;ADD TO MEM ALLOC UTAPE
|
||
JRST JDB6F
|
||
|
||
|
||
UTRLR1: PUSHJ P,UDIRR ;BACK UP
|
||
JRST 4,.
|
||
JRST 4,. ;LOSSAGE
|
||
JDB6C2:
|
||
JDB6C: HRRE D,UTUL(D)
|
||
JUMPGE D,JDB6C1
|
||
JRST POPJ1
|
||
|
||
JDB6W1: LDB D,[410300,,UDIRO(C)
|
||
SOJN D,POPJ1 ;DIR CHNAGED AND NOT LOCKED
|
||
MOVEI D,100 ;INITIATE FILE DIR WRITE
|
||
SKIPL ULDCH(C) ;SKIPN ON ALREADY LOW PRIORITY POSIT
|
||
PUSHJ P,ILLP ;INITIATE LOW PRIOR POSIT
|
||
JRST POPJ1
|
||
|
||
ULLP1: SETOM URDWR(C) ;SET FILE DIR WRITE CYCLE FROM LOW PRIORITY CYCLE
|
||
MOVSI D,400000 ;LOCK DIR
|
||
IORM D,UDIRO(C)
|
||
MOVEI D,NUTIC+NUTOC
|
||
HRRZ A,ULDCH(C) ;BUFFER NO OF DIRECTORY
|
||
JRST JDB6W2
|
||
|
||
|
||
JDB6A: HRRZ A,UTBFP(D)
|
||
CAIGE A,376
|
||
SKIPGE IOBFT(A)
|
||
JRST JDB6C2 ;LOCKED OUT SNIFFLE
|
||
PUSHJ P,UDIRAD ;ADVANCE DIRECTORY POINTERS
|
||
JRST JDB6C2 ;DIRECTORY LOCKED
|
||
JRST UTPFUL ;TAPE FULL
|
||
SETOM URDWR(C)
|
||
HRRZ A,UTBFP(D)
|
||
LDB B,[IOLO,,IOBFT(A)
|
||
HRRM B,UTBFP(D)
|
||
MOVEI J,(SETZ)
|
||
CAIL B,376
|
||
HRLM J,UTBFP(D)
|
||
|
||
UTRLD: HRRZ B,UTDBC(D) ;BUFFER IN A
|
||
HRRM A,UTRAC(D)
|
||
UDRR2: MOVEM B,UGOAL(C)
|
||
MOVEI B,-4
|
||
DPB B,[IOLO,,IOBFT(A)
|
||
LDB B,[IOSA,,IOBFT(A)
|
||
LSH B,6
|
||
SOS B
|
||
HRRM B,UMEMAD(C)
|
||
HRLM D,ULDCH(C)
|
||
MOVE B,TIME
|
||
MOVEM B,DRTM(C)
|
||
CPOPJ: POPJ P,
|
||
|
||
|
||
|
||
|
||
JDB6: PUSHJ P,JDB6W
|
||
JRST JDBRK7 ;SUCCESFUL RELOAD
|
||
JRST JDBRK4 ;CAN NOT RELOAD
|
||
|
||
UDRDD: MOVEI D,NUTIC+NUTOC
|
||
PUSHJ P,IUTCONS
|
||
JRST UDRDD1 ;NO MEM
|
||
LDB B,[IOSA,,IOBFT(A)
|
||
LSH B,6
|
||
TLO B,600000
|
||
MOVEM B,UDIRO(C)
|
||
HLLOS DCHNT(C)
|
||
CLEARM URDWR(C)
|
||
HRRM A,ULDCH(C)
|
||
JDB6W2: MOVEI B,100
|
||
JRST UDRR2
|
||
|
||
UDRDD1: SETOM MEMDSP ;SCROUNGE SOME MEM
|
||
JRST POPJ1
|
||
|
||
UDRDD3: HRRZ D,ULDCH(C) ;FILE DIR IN OR OUT
|
||
HRRZS UDIRO(C) ;UNLOCK DIRECTORY
|
||
DPB C,[IOLO,,IOBFT(D)
|
||
HRRZS ULDCH(C)
|
||
JRST JDDT2
|
||
UDIRAD: TDZA E,E ;ADVANCE {cropped} CHANNEL IN D
|
||
UDIRR: MOVEI E,1 ;REV DIR PNTRS THIS WINS FOR READS ONLY HA HA
|
||
SKIPGE B,UDIRO(C)
|
||
JRST UDOUT3
|
||
UDOUT2: LDB R,[270100,,UTDBC(D)
|
||
XOR R,E
|
||
MOVEI Q,0
|
||
CAIL D,NUTIC
|
||
MOVEI Q,UTBLKS
|
||
LDB TT,[220500,,UTDBC(D)
|
||
|
||
UDIR1: PUSHJ P,ITAB(R)
|
||
TRNE J,-1 ;BLK NO RTN IN RH E
|
||
CAIN B,37
|
||
JRST UDOUT ;END OF EXTENSION
|
||
CAME B,TT
|
||
SOJA Q,UDIR1
|
||
SOJG Q,.-1
|
||
LDB B,[300500,,UTDBC(D)
|
||
DPB B,UTDIRP(D)
|
||
UDARET:
|
||
POPJ2: AOS (P)
|
||
POPJ1: AOS(P)
|
||
POPJ P,
|
||
|
||
UDOUT: JUMPN E,UDOUT5
|
||
CAIL D,NUTIC
|
||
JRST UDOUT1
|
||
MOVEI A,0 ;READ
|
||
MOVE B,TT
|
||
PUSHJ P,UTLOOK ;TAP NO IN C NAME IN A,B
|
||
JUMPE B,POPJ1 ;EOF OR ADR OF FIRST WD
|
||
UDOUT6: DPB A,[220500,,UTDBC(D) ;FILE NO
|
||
UDOUT4: DPB A,[300500,,UTDBC(D)
|
||
MOVSI A,1_5
|
||
XORM A,UTDBC(D)
|
||
JRST UDOUT2
|
||
|
||
|
||
UDOUT3: TLNN B,200000 ;DIRECTORY DOUBLE LOCKED
|
||
CAIL D,NUTIC
|
||
POPJ P,
|
||
JRST UDOUT2
|
||
|
||
UDOUT1: CLEARB A,B
|
||
PUSHJ P,UTLOOK
|
||
JUMPE B,POPJ1 ; FILE DIR FULL
|
||
LDB J,[300500,,UTDBC(D)
|
||
MOVEM J,1(B)
|
||
JRST UDOUT4
|
||
|
||
UDOUT5: LDB A,[220500,,UTDBC(D)
|
||
LSH A,1
|
||
ADD A,UDIRO(C)
|
||
SKIPE -2(A)
|
||
JRST UDARET
|
||
MOVE A,-1(A)
|
||
JRST UDOUT6
|
||
|
||
UTLK3: SKIPA Q,UDIRO(I)
|
||
UTLOOK: MOVE Q,UDIRO(C)
|
||
HRLI Q,-23.
|
||
PUSH P,[1
|
||
UTLK2: CAMN A,(Q)
|
||
CAME B,1(Q)
|
||
AOJA Q,UTLK1
|
||
MOVE B,Q
|
||
POPAJ: POP P,A
|
||
POPJ P,
|
||
|
||
UTLK1: AOS(P)
|
||
AOBJN Q,UTLK2
|
||
MOVEI B,0
|
||
JRST POPAJ
|
||
|
||
|
||
ITAB: AOSA J,UTDBC(D)
|
||
JRST UAR
|
||
|
||
UAF: ILDB B,UTDIRP(D)
|
||
POPJ P,
|
||
|
||
UAR: MOVSI B,50000
|
||
ADD B,UTDIRP(D)
|
||
SKIPGE B
|
||
SUB B,[430000,,1
|
||
MOVEM B,UTDIRP(D)
|
||
LDB B,B
|
||
SOS J,UTDBC(D)
|
||
POPJ P,
|
||
|
||
; T S UTAPE ROUTINES PI SERV
|
||
|
||
LUTCP=20 ;LENGTH UTC PDL
|
||
NUNITS==4
|
||
JDENB=40000
|
||
20MSEN=5000
|
||
|
||
;TABLE AREAS
|
||
|
||
DEFINE TAG A
|
||
IRPS B,,A
|
||
B=.-1
|
||
TERMIN
|
||
TERMIN
|
||
|
||
TAG ULCTM:, REPEAT NUNITS,-1 ;LAST TIME EUPOS RECOMPUTED
|
||
;IF DG2=0 OR -1 AND UDIR .NE. 0 THEN ACT POS =EUPOS+<TIME-ULCTM>*UDIR
|
||
TAG DRTM:, REPEAT NUNITS,SETZ-1 ; SETZ-1 => NO TIMING OP
|
||
;N => DEAD RECKON UNTIL T=N
|
||
|
||
TAG UDIR:, BLOCK NUNITS ;0=>STOP -1=>BACK 1=>FORW
|
||
TAG UGOAL:, REPEAT NUNITS,-1;POSIT GOAL OR -1 IF UNIT FREE
|
||
TAG EUPOS:, BLOCK NUNITS ;ESTIMATED UNIT POSITION
|
||
;SEE ULCTM IF DGW .NE. 1
|
||
TAG DCHNT:, REPEAT NUNITS,-1;HEAD CHANNEL LIST OF UT OR -1 IF NO CHN ACT
|
||
TAG UMEMAD:, REPEAT NUNITS, BLKO DC, ;GOAL MEMADR-1
|
||
TAG URDWR:, BLOCK NUNITS ;0 READ -1 WRITE(LOADED OPERATION)
|
||
TAG DG2:, REPEAT NUNITS,-1;+ => ACCURATE
|
||
;0 => EUPOS FAIRLY ACCURATE
|
||
;-1 => DO NOT DEAD RECKON WITHOUT UTC
|
||
TAG UDIRO:, REPEAT NUNITS,-1;ORIGIN OF DIRECTORY
|
||
;OR -1 DIR NOT LOADED OR 4.9 DIR LOCKED OR 4.8+4.9 DIR DOUB LOCKED
|
||
;4.7 DIR CHANGED
|
||
;IF DIR LOCKED, IT MAY BE REFERENCED BUT NOT CHANGED
|
||
|
||
|
||
TAG ULDCH:, BLOCK NUNITS ;NUMBER OF LOADED CHANNEL LH,BUFFER NO OF DIR RH
|
||
;LH SIGN SET = LOW PRIORITY POSIT
|
||
|
||
|
||
|
||
TAG UFLAPF:, BLOCK NUNITS ;4.9 FLAPPING RQSTED OR IN PROGRESS
|
||
;4.8 RQ TO ABORT FLAPPING OPERATION
|
||
;4.7 DRIVE ACTUALLY ON THE WAY
|
||
;RH TIME TO STOP AFTER FLAP SHOULD HAVE TAKEN PLACE
|
||
|
||
SUNIT: 0 ;SELECTED UNIT OR 0
|
||
SUNITL: 0 ;SAME _ 3
|
||
SMODE: -1 ;-1 POSIT 0 DATA
|
||
WRITE: 0 ;0 READ -1 WRITE
|
||
TAPCNT: 0
|
||
TAP1: 0
|
||
TAP2: 0
|
||
TAP3: 0
|
||
UTTM1: 0 ;UNIT COULD START IN SEARCH LOOP
|
||
UTTM2: 0 ;MOST PRESSING UNIT SO FAR
|
||
UTTM3: 0 ;TIME FOR ABOVE OR -1 IF NONE
|
||
UTTM4: 0 ;TAPE TO START FLAPPING
|
||
UTTM5: 0 ;TAPE TO STOP FLAPPING
|
||
FLPUNT: 0
|
||
DCFREE: -1 ;-1 => DC FREE
|
||
UIDLE: -1 ;-1 UTAPES COMPLETELY IDLE
|
||
UTCPDP: -LUTCP,,UTCP-1
|
||
UTCP: BLOCK LUTCP
|
||
|
||
UTACS: BLOCK P-A+1
|
||
UTENB: 0
|
||
LUTOTM: 0 ;TIME OF LAST UT OPER
|
||
UTHERR: 0 ;UT HANGUP ERR
|
||
USTSW: 0 ;UT START SWITCH
|
||
UDCC: 0 ;-1 IF UTAPE HAVE DC FOR BLK CYCLE
|
||
|
||
TAPE: 0
|
||
UTP1: 0 ;JRST PIPOS OR DATAI DC, OR JRST UTP3
|
||
SOS .-1
|
||
AOSGE TAPCNT
|
||
JRST 12,@TAPE
|
||
|
||
|
||
UTP3: CONO PI,1000+DCCHNA
|
||
SKIPN WRITE
|
||
CONO DC,DCCHN
|
||
JRST 12,@TAPE
|
||
|
||
PIPOS: MOVEM A,TAP1
|
||
MOVEM B,TAP2
|
||
MOVEM C,TAP3
|
||
MOVE C,SUNIT
|
||
DATAI DC,B
|
||
TDZE B,[1777#-1
|
||
JRST PIPOS7
|
||
MOVEM B, EUPOS(C)
|
||
HRRZM C, DG2(C)
|
||
SKIPGE UGOAL(C)
|
||
JRST PIPF1
|
||
SUB B,UGOAL(C)
|
||
JUMPE B,PIPOS2
|
||
ADD B,UDIR(C)
|
||
MOVMM B,UTENB
|
||
SKIPGE ULDCH(C)
|
||
JRST PIPOS3
|
||
JUMPN B,PIPOS3
|
||
PIPOSL: MOVE A,SUNITL ;HOLD DC
|
||
MOVE B,UDIR(C)
|
||
XCT UTST(B)
|
||
CONO DC,4010+DCCHN
|
||
PIPOS5: MOVE C,TAP3
|
||
MOVE B,TAP2
|
||
MOVE A,TAP1
|
||
JRST 12,@TAPE
|
||
|
||
|
||
|
||
PIPOS7: AOS BDBLKC
|
||
JRST PIPOSL
|
||
|
||
BDBLKC: 0
|
||
|
||
PIPOS3: MOVE A,UDIR(C)
|
||
LSH A,2
|
||
SUB B,A
|
||
XOR B,UDIR(C)
|
||
MOVE A,SUNITL
|
||
JUMPG B,PIPOS4 ;GOING WRONG DIR
|
||
PIPF2: TRO A,JDENB ;ENB JD SO NEXT BREAK TO UTC ON BLOCK
|
||
PIPOS6: MOVE B,TIME
|
||
MOVEM B,ULCTM(C)
|
||
ADD B,UTENB
|
||
MOVEM B,DRTM(C)
|
||
MOVE B,UDIR(C)
|
||
XCT UTST(B)
|
||
CONO PI,1000+DCCHNA
|
||
CLEARM UDCC
|
||
SETOM DCFREE
|
||
CONO DC,0
|
||
JRST PIPOS5
|
||
|
||
|
||
|
||
PIPF1: MOVE A,SUNITL
|
||
JRST PIPF2
|
||
|
||
PIPOS4: CLEARM DG2(C)
|
||
MOVNS UDIR(C)
|
||
TRO A,6000
|
||
JRST PIPOS6
|
||
|
||
PIPOS2: HLRZ A,ULDCH(C)
|
||
SKIPL ULDCH(C)
|
||
SKIPGE UTRAC(A)
|
||
JRST PIPOS3 ;CHANNEL LOCKED
|
||
SETOM UTLDD(A) ;CHANNEL ACTUALLY LOADED TRANSFERR IMMINENT
|
||
AOS SMODE
|
||
CLEARM UDCC
|
||
MOVE A,SUNITL
|
||
MOVE B,UMEMAD(C)
|
||
SKIPGE URDWR(C)
|
||
TROA A,400
|
||
TLZ B,(BLKO-BLKI)
|
||
SKIPL UDIR(C)
|
||
JRST TAPFOR
|
||
TRO A,10000
|
||
ADD B,[DATAI-BLKI 200
|
||
MOVEM B,UTP1
|
||
MOVNI B,200
|
||
MOVEM B,TAPCNT
|
||
|
||
|
||
TAP4: CONO UTC,360300+UTCCHN(A)
|
||
SKIPGE B,URDWR(C)
|
||
CONO DC,3410+DCCHN
|
||
MOVEM B,WRITE
|
||
MOVE C,TAP3
|
||
MOVE B,TAP2
|
||
MOVE A,TAP1
|
||
JRST 12,@TAPE
|
||
|
||
|
||
TAPFOR: HRRM B,TAPCNT
|
||
HRRI B,TAPCNT
|
||
MOVEM B,40+DCCHN*2
|
||
MOVE B,[-200,,UTP3
|
||
HRRM B,UTP1
|
||
HLLM B,TAPCNT
|
||
JRST TAP4
|
||
UTERR: CONI UTS,E
|
||
SKIPL SMODE
|
||
JRST UDATER
|
||
SKIPGE UDCC
|
||
JRST UTER4
|
||
UTER5: SKIPN C,SUNIT
|
||
JRST 4,.
|
||
SETOM DG2(C)
|
||
MOVE B,UDIR(C)
|
||
TRZ E,7650
|
||
JUMPE E,JDB3
|
||
TRNN E,2
|
||
JRST UTER1
|
||
UTER2: MOVNS B,UDIR(C)
|
||
MOVEI A,0
|
||
SKIPGE B
|
||
MOVEI A,1103
|
||
MOVEM A,EUPOS(C)
|
||
MOVE A,TIME
|
||
MOVEM A,ULCTM(C)
|
||
MOVEM A,DRTM(C)
|
||
UTER1: JRST UTER3 ;GIVE MAX DELAY
|
||
|
||
UDATER: SKIPGE DCFREE
|
||
JRST UDATE1
|
||
CONO PI,1000+DCCHNA
|
||
SETOM DCFREE
|
||
UDATE1: SETOM SMODE
|
||
HLRZ D,ULDCH(C)
|
||
CLEARM UTLDD(C)
|
||
JRST JDB3
|
||
|
||
UTER4: SETOM UDCC
|
||
SETOM DCFREE
|
||
JRST UTER5
|
||
|
||
UTCBRK: 0
|
||
MOVEM P,UTACS+P-A
|
||
MOVE P,[A,,UTACS
|
||
BLT P,UTACS+P-1-A
|
||
MOVE P,UTCPDP
|
||
MOVE C,SUNIT
|
||
CONSZ UTC,4000
|
||
CONSO UTS,20
|
||
JRST JDBRK
|
||
MOVE A,SUNITL
|
||
MOVE B,UDIR(C)
|
||
AOSN UTHERR ;HANG UP ERROR SENT FOR SLOW CLOCK ROUTINE
|
||
JRST UTERR
|
||
AOSN USTSW
|
||
JRST DCGBL1
|
||
AOSN USTPF
|
||
JRST JDB7D
|
||
MOVEI C,0
|
||
EXCH C,FLPUNT
|
||
JUMPN C,JDF8
|
||
EXCH C,STPUNT
|
||
JUMPN C,JDB4B
|
||
JRST JDB3
|
||
|
||
|
||
JDDT3: MOVE A,EUPOS(C)
|
||
SUB A,UGOAL(C)
|
||
MOVMS E,A
|
||
ADD A,TIME
|
||
MOVEM A,DRTM(C)
|
||
MOVE C,[-NUNITS,,1
|
||
MOVM B,DRTM(C)
|
||
CAMGE B,TIME
|
||
JRST JDB3 ;SOMETHING ELSE DUE
|
||
AOBJN C,.-3
|
||
MOVE C,SUNIT
|
||
MOVE B,UDIR(C)
|
||
MOVE A,SUNITL
|
||
SOJLE E,DCGBL1 ;RELOADING FOR NEXT BLOCK
|
||
JRST JDB3
|
||
|
||
|
||
ILLP: MOVEM D,UGOAL(C) ;LOW PRIORITY POSIT ENTRY
|
||
MOVSI A,(SETZ)
|
||
IORM A,ULDCH(C)
|
||
|
||
UTDC: SKIPGE UGOAL(C)
|
||
POPJ P, ;UNIT IDLE
|
||
SKIPGE DG2(C)
|
||
JRST UTDC3
|
||
UTDC1: MOVE A,EUPOS(C) ;ESTIMATE UNIT TIME AND UPDATE EUPOS
|
||
SKIPG DG2(C) ;SKIP ON EXACT POS KNOWN
|
||
SKIPN UDIR(C) ;SKIP ON UNIT RUNNING
|
||
JRST UTDC4
|
||
MOVE B,TIME
|
||
SUBM B,ULCTM(C)
|
||
EXCH B,ULCTM(C)
|
||
IMUL B,UDIR(C)
|
||
ADD A,B ;ACTUAL ESTIMATED POSITION
|
||
MOVEM A,EUPOS(C) ;UPDATE EUPOS
|
||
UTDC4: SUB A,UGOAL(C)
|
||
MOVM B,A
|
||
CAIG B,2
|
||
JRST UTDC2
|
||
ADD A,UDIR(C)
|
||
MOVMS A
|
||
CAMLE A,B
|
||
CLEARB A,B ;GOING WRONG DIR
|
||
UTDC2: ADD B,TIME
|
||
MOVEM B,DRTM(C)
|
||
POPJ P,
|
||
|
||
UTDC3: MOVEI B,0 ;NOT KNOWN EXACT POS REQUIRES IMMEDIATE ATTENTION
|
||
JRST UTDC2
|
||
|
||
JDBRK: CONSZ UTC,7
|
||
CONSO UTS,17
|
||
JRST POPRET ;NOT UTC
|
||
CONSZ UTS,16
|
||
JRST UTERR
|
||
JDBK1: SKIPL SMODE
|
||
JRST JDDTA ;DATA MODE
|
||
JUMPE C,JDB3
|
||
MOVE A,UDIR(C)
|
||
ADDM A,EUPOS(C)
|
||
MOVE A,TIME
|
||
MOVEM A,ULCTM(C)
|
||
PUSHJ P,UTDC ;COMPUTE DELAY
|
||
|
||
|
||
JDB3: HRLOI B,177777
|
||
MOVEM B,UTTM2
|
||
SETOM UTTM3 ;UNIT MOST URGENT
|
||
CLEARM UTTM1 ;UNIT COULD START
|
||
SETOM UTTM4 ;TAPE TO START FLAPPING
|
||
SETOM UTTM5 ;TAPE TO STOP FLAPPED
|
||
MOVE C,[-NUNITS,,1
|
||
JDBRK7: SKIPGE B,UFLAPF(C)
|
||
JRST JDF1 ;FLAPPING OP
|
||
JDF2: SKIPL ULDCH(C) ;SKIP ON LOW PRIOR POSIT
|
||
SKIPGE UGOAL(C)
|
||
JRST JDB6 ;UNIT FREE
|
||
SKIPGE DG2(C)
|
||
SKIPN UDIR(C)
|
||
JRST JDS1
|
||
MOVEM C,UTTM1 ;UNIT IS RUNNING BLIND (OR NOT RUNNING)
|
||
JRST JDBRK6
|
||
JDS1: SKIPE UDIR(C)
|
||
JRST JDBRK4
|
||
SKIPN UTTM1
|
||
HRRZM C,UTTM1
|
||
JRST JDBRK6
|
||
JDBRK4: SKIPN UDIR(C)
|
||
JRST ULLP ;TAPE MAY NOT BE RUNNING IF IDLE
|
||
MOVE B,DRTM(C)
|
||
SUB B,TIME
|
||
MOVE E,B
|
||
SUB E,UTTM2
|
||
JUMPL B,JDCV1 ;ALREADY OVERDUE
|
||
MOVM D,E
|
||
CAIG B,20. ;CONFLICT MORE THAN 20 BLKS AWAY
|
||
CAIL D,20. ;THEY ARE SEPARETED BY 20 BLKS
|
||
JRST JDCV1
|
||
HRRZS C ;RELIEVE CONFLICT BY STOPPING UNIT DUE LATEST
|
||
CAMG B,UTTM2
|
||
HRRZ C,UTTM3
|
||
JDF5: CAME C,SUNIT
|
||
SKIPN SUNIT
|
||
JRST JDB4B ;STOP UNIT
|
||
MOVEM C,STPUNT
|
||
JRST JDB7D ;DESLECT FIRST
|
||
JDCV1: JUMPGE E,ULLP
|
||
MOVEM B,UTTM2
|
||
HRRZM C,UTTM3
|
||
ULLP: SKIPGE ULDCH(C)
|
||
CAIL B,10
|
||
JRST JDBRK6
|
||
PUSHJ P,ULLP1 ;TERM LOW PRIORITY DIRECTORY POS (COMMIT TO ACTUAL WRITE)
|
||
|
||
|
||
|
||
JDBRK6: AOBJN C,JDBRK7
|
||
MOVE C,UTTM3 ;MOST PRESSING RUNNING UNIT
|
||
MOVE B,UTTM2
|
||
CAIGE B,30.
|
||
JRST JDB7 ;STAY WITH PRESSING UNIT
|
||
SKIPE UTTM1
|
||
JRST JDB5 ;START UNIT IF POSSIBLE
|
||
SKIPL D,UTTM4
|
||
JRST JDF3
|
||
JDF6A: SKIPL D,UTTM5
|
||
JRST JDF4
|
||
CAMG B,[10000000. ;SKIP ON IDLE
|
||
JRST JDB7
|
||
SKIPE SUNIT
|
||
JRST JDB7D
|
||
SETOM UIDLE
|
||
CONO UTC,0
|
||
JRST POPRET
|
||
|
||
|
||
|
||
JDF1: MOVE E,UDIRO(C)
|
||
AOJE E,JDF1A
|
||
TLNE E,100000
|
||
JRST JDF2
|
||
JDF1A: SKIPGE UGOAL(C)
|
||
SKIPGE ULDCH(C)
|
||
JRST JDF2 ;FILE DIR WRITE IN PROG
|
||
SKIPE UDIR(C)
|
||
SKIPG DG2(C)
|
||
JRST .+2
|
||
JRST JDF3A ;JUST READ IN TAPE POS
|
||
TLNN B,100000
|
||
HRRZM C,UTTM4 ;UNIT TO START FLAPPING
|
||
HRRZ D,B
|
||
TLNN B,100000
|
||
JRST .+3
|
||
CAMG D,TIME
|
||
HRRZM C,UTTM5 ;UNIT TO STOP FLAPPING
|
||
JRST JDBRK6
|
||
|
||
JDF3: MOVE C,D
|
||
HRRZ A,ULDCH(C)
|
||
AOSE UDIRO(C)
|
||
PUSHJ P,IBRTN
|
||
SETOM UDIRO(C)
|
||
SKIPGE DG2(C)
|
||
JRST JDF6
|
||
JDF3A: SETOM DG2(C)
|
||
MOVE E,EUPOS(C)
|
||
IMULI E,50.
|
||
IDIVI E,33.
|
||
ADDI E,30.
|
||
ADD E,TIME
|
||
HRRM E,UFLAPF(C)
|
||
MOVSI E,100000
|
||
IORM E,UFLAPF(C)
|
||
SKIPE SUNIT
|
||
CAMN C,SUNIT
|
||
JRST JDF8
|
||
MOVEM C,FLPUNT
|
||
JRST JDB7D
|
||
|
||
JDF8: LSH C,3
|
||
CONO UTC,235000+UTCCHN(C)
|
||
JRST JDF9
|
||
|
||
JDF6: SKIPL DCFREE
|
||
JRST JDF6A
|
||
SKIPE SUNIT
|
||
CAMN C,SUNIT
|
||
JRST .+2
|
||
JRST JDB7D
|
||
SETOM UDIR(C)
|
||
MOVEM C,SUNIT
|
||
DPB C,[30300,,SUNITL
|
||
JRST JDF6B
|
||
|
||
|
||
JDF4: MOVE C,D
|
||
CLEARM UFLAPF(C)
|
||
JRST JDF5
|
||
|
||
JDB5: HRRZ C,UTTM1
|
||
JDB7: EXCH C,SUNIT ;SELECT UNIT IN C
|
||
JUMPE C,JDB7A ;NO UNIT SELECTED
|
||
CAMN C,SUNIT
|
||
JRST JDB7A
|
||
PUSHJ P,URLS
|
||
JUMPGE E,JDB7C ;OK TO LEAVE IT ALONG, CLEAR SELECTION CYCLE
|
||
JDB4: SKIPN UDIR(C)
|
||
JRST JDB7D
|
||
JDB4B: HRRZM C,SUNIT ;ENTER UNIT STOPPING CYCLE
|
||
DPB C,[30300,,SUNITL
|
||
JDB4A: MOVE A,SUNITL
|
||
SKIPG UDIR(C)
|
||
TRO A,10000
|
||
CONO UTC,205000+UTCCHN(A) ;CLEAR GO BIT
|
||
CLEARM UDIR(C)
|
||
HRLOI B,377777
|
||
MOVEM B,DRTM(C)
|
||
SETOM DG2(C)
|
||
JDF9: SETOM USTPF ;UNIT STOPPING CYCLE
|
||
JRST POPRET
|
||
|
||
USTPF: 0
|
||
STPUNT: 0 ;UNIT TO STOP DUE TO CONFLICT
|
||
|
||
JDB7C:
|
||
JDB7D: CLEARM SUNIT ;DESELECT CYCLE
|
||
CONI UTC,A
|
||
TRZ A,200070
|
||
TRO A,5000
|
||
CONO UTC,(A)
|
||
JRST POPRET
|
||
|
||
|
||
JDB7A: MOVE C,SUNIT
|
||
MOVE A,EUPOS(C)
|
||
SUB A,UDIR(C)
|
||
SUB A,UDIR(C)
|
||
MOVEI B,1
|
||
CAML A,UGOAL(C)
|
||
MOVNI B,1
|
||
DPB C,[30300,,SUNITL
|
||
MOVE D,UDIR(C)
|
||
MOVEM B,UDIR(C)
|
||
CAME D,B
|
||
JRST JDS4 ;CHANGING DIR (OR STARTING), ALLOW RELAY DLYS
|
||
JDBK3A: MOVE E,DRTM(C)
|
||
SUB E,TIME
|
||
JDDT8: MOVE A,SUNITL
|
||
SKIPL D,DG2(C)
|
||
CAIG E,3
|
||
JRST JDB3B
|
||
CAIGE E,20
|
||
JUMPE D,JDB3B ;GETTING CLOSE READ BLOCK NO
|
||
JDB3A: TRO A,JDENB
|
||
JDB8A: XCT UTST(B)
|
||
JRST POPRET
|
||
|
||
|
||
|
||
|
||
JDB3B:
|
||
DCGBL1: AOSE DCFREE
|
||
JRST JDB3A
|
||
DCGBL: XCT UTST(B)
|
||
CONO DC,4010+DCCHN
|
||
MOVE C,[JSR TAPE
|
||
MOVEM C,40+2*DCCHN
|
||
MOVEM C,40+2*DCCHN+1
|
||
MOVE C,[JRST PIPOS
|
||
MOVEM C,UTP1
|
||
SETOM UDCC
|
||
CONO PI,2000+DCCHNA
|
||
|
||
POPRET: MOVE A,TIME
|
||
MOVEM A,LUTOTM
|
||
MOVS P,[A,,UTACS
|
||
BLT P,P
|
||
JRST 12,@UTCBRK
|
||
|
||
|
||
CONO UTC,330200+UTCCHN(A)
|
||
UTST: CONO UTC,5000+UTCCHN(A)
|
||
CONO UTC,320200+UTCCHN(A)
|
||
|
||
|
||
JDS4: JUMPN D,UTER3
|
||
MOVE D,TIME
|
||
MOVEM D,ULCTM(C)
|
||
JDF6B: SETOM USTSW ;STARTING OUT
|
||
UTER3: MOVE A,SUNITL
|
||
TRO A,6000
|
||
JRST JDB8A
|
||
|
||
|
||
|
||
URLS: SKIPE E,UDIR(C) ;SKIPN ON UNIT NOT RUNNING
|
||
SKIPG E,DG2(C) ;RELEASE UNIT IN C E HAS PREV STATE OF DG2
|
||
POPJ P,
|
||
JRST UTDC
|
||
;"SYSTEM" JOBS
|
||
|
||
SCOR: SKIPL SUPCOR
|
||
PUSHJ P,UFLS
|
||
PUSHJ P,SCOREX
|
||
CLEARM @SYSL
|
||
HRLZ A,SYSL
|
||
HRR A,SYSL
|
||
AOS A
|
||
MOVEI B,2000
|
||
ADD B,SYSL
|
||
BLT A,(B)
|
||
MOVEM B,SYSL
|
||
NMCU: CLEARM SUPCOR
|
||
JRST SCOR
|
||
|
||
SCOREX: MOVE B,SYSL
|
||
MOVEI U,0
|
||
LSH B,-10.
|
||
AOS B
|
||
PUSHJ P,ACORE
|
||
JRST NMCU
|
||
POPJ P,
|
||
|
||
|
||
SUBTTL RANDOM STORAGE
|
||
|
||
RADIX 10.
|
||
REPEAT SIOML,[CONC TRAN,\.RPCNT+1,: BLOCK SIOMT
|
||
] RADIX 8
|
||
|
||
U0: 0 ;TEMP STORAGE FOR FIRST LOW PRIORITY LOSER
|
||
PSAVE: 0
|
||
USER: -1 ;USER # OF CURRENT LOSER
|
||
CUSER: 0 ;USER OF CORE ALLOCATOR
|
||
DISUSR: -1 ;340 USER
|
||
USRHI: 0 ;HIGHEST LOC USED OF USER VARIABLE STORAGE
|
||
SYSL: SYSB*2000
|
||
SUPCOR: 0
|
||
SEAT1: 0
|
||
TIME: 0
|
||
CLKFL1: 0
|
||
CUQUAN: 0 ;CURRENT USER QUANTUM
|
||
CPDLP: -CPDLL,,LCPDL-1 ;CLOCK PDL POINTER
|
||
LCPDL: BLOCK CPDLL
|
||
ECPDL==.-5
|
||
SCRFLG: 0 ;CURRENT USER MUST BE INTERRUPTED, SAVE VARIABLES, MUNG AND RESTORE
|
||
SCRFG1: 0 ;LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE
|
||
UTTYST: -1 ;-1 OR TTY THAT WANTS TO BE STARTED
|
||
CRACF: -1 ;CORE ALLOCATOR FLAG (ONLY 1 AT A TIME)
|
||
SIOMTU: SIOMT ;AMOUNT USED OF I-O MAPPING TABLE
|
||
SLCLK: 0 ;SLOW CLOCK
|
||
SRCS: 0 ;RECYCLE FLAG FOR SEARCH
|
||
|
||
CONSTANTS
|
||
VARIABLES
|
||
SYSB==1+._-10.+IFN .&1777,1
|
||
MXC==MX1KB-SYSB
|
||
|
||
|
||
USRSTG==.
|
||
IOCHNM: REPEAT 20,0 ;IO CHANNEL ASSIGN
|
||
;RH INDEX INTO IOTTB AND CLSTB
|
||
;LH DEV CHNL AND/OR OTHER
|
||
SIOCHN: BLOCK 21
|
||
SIOCP: SIOCHN
|
||
UPC: 0 ;USER PC STORAGE
|
||
AC0S: BLOCK 15 ;SWAP OUT AC S
|
||
AC15S: 0
|
||
AC16S: 0
|
||
AC17S: 0
|
||
UUO:
|
||
SUEXIT: JRST 2,@UUOH ;USER UUO EXIT INS
|
||
SURSTR: 0 ;LOC FOR NEW USER PC STORAGE AFTER UFLS
|
||
SUUOH: 0 ;C(@41)
|
||
SAC17P: MOVEM U,0 ;AC17 IN SHAD MEM
|
||
AC14P: 0 ;PNTS TO AC 14 IN SHAD MEM
|
||
AC15P: 0 ;" "" 15
|
||
AC16P: 0 ; " " "" 16
|
||
40P: 0
|
||
41P: 0
|
||
UPR: 0 ;USER PROTECTION AND RELOCATION REGISTERS
|
||
APRC: APRCHN ;CONO TO APR
|
||
UQUAN: 0 ;USER QUANTUM
|
||
USTP: 0 ;0 RUNNABLE
|
||
BCSTOP=400000 ;BIT IN USTP FOR CORE MOVAGE
|
||
BUCSTP=200000 ;CORE STOPPING LOSER TO GIVE MORE CORE RQSTED BY ANOTHER LOSER
|
||
BUSRC=100000 ;USER CONTROL INTERUPT TO SUPERIOR PROCEDURE
|
||
BEXC=40000 ;SET BY UBO AND FRIENDS INHIBITS RELOCATION BY CORE ALLOCATOR
|
||
;MUST BE SET WITH CLKOFF MUST NOT BE SET IF CSTOP IS SET
|
||
PIRQC: 0 ; PI REQ AWAITING SERVICE
|
||
SUPPRO: 0 ;SUPERIOR PROCEDURE RH,INT BIT LH
|
||
PICLR: 1 ;PI IN PROGRESS FLAG
|
||
MSKST: 0 ;PI MASK REGISTER FOR USER
|
||
FLSINS: 0 ;USER I-O WAIT INS
|
||
; STATES => 0 => RUNABLE
|
||
;= JRST =EXEC FLUSH
|
||
; OTHERWISE IN IO WAIT IF NO SKIP SAFE TO RESTART AT "UUO"
|
||
MEMTOP: 0 ;TOP OF USER MEM (UNREL) (-METOV)
|
||
RMEMT: 0 ;AFIRST USER LOC NOT AVAILABLE 2000 IF LOSER HAS 1 BLOCK
|
||
SV40: 0 ;C(40) WHEN USER SWAPPED
|
||
UNAME: 0 ;USER NAME
|
||
JNAME: 0 ;JOB NAME
|
||
TTYTBL: 0 ;TTY ASSIGNED THIS USER
|
||
;4.9 DOES NOT HAVE TTY NOW
|
||
;4.8 NEVER HAD IT
|
||
;4.7 TAKEN AWAY
|
||
;3.4 3.1 SAVED TTYSTS IF TAKEN AWAY OR GIVEN AWAY
|
||
;RH USER NO GAVE TTY AWAY TO OR TTY NO IF HAS IT OR
|
||
;TTY TAKEN FROM ME IF 400000
|
||
UILOOK: 0 ;POINTER TO USER CORE FROM SUPERIOR PROCEDURE (INPUT)
|
||
UOLOOK: 0 ;" (OUTPUT)
|
||
VALUE: 0 ;PROCEDURE "VALUE" RETURN
|
||
USRPDL: -LUPDL,,UPDL-1 ;USER PDL
|
||
UPDL: BLOCK LUPDL-3
|
||
EPDL: 0
|
||
EPDL1: 0
|
||
EPDL2: 0
|
||
|
||
LUBLK=.-USRSTG
|
||
L=LUBLK
|
||
|
||
|
||
|
||
END 69
|
||
|