@X @~
~L3 COUK1247
80
~V7 56 2 -5
~V9 -1
~P
~D10
~H                    MUSS
~
~
~D10
~HCONSYS52
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL
~
~
                                                             ISSUE 11~
~V9 -1
~P
~V9 1
~YCONSYS52
~X%|
~S1~M~OAP5 IMPLEMENTATION DESCRIPTION~
~S1~M~OSystem Configuration  Version 2~
~S1~OSystem Configuration - Gemstone MC68000s~
~S1~O1. General Description
~BThis configuration module applies to the Gemstone systems in use at
Manchester University.~
~S1~O2.1 Allocation of Segments~
~3
~
~
Common Segment Number  System Segment Number  Use~
    -                   0                      Blank~
   128                  1                      Locked system code~
   132                  2                      Locked system data~
   136                  3                      Paged system code~
                                               (Command level code~
                                               + task code)~
   140                  4                      Basic Library~
   144                  5                      Paged system data~
   148                  6                      PRB's~
   152                  7                      Message buffers~
   156                  8                      AUL~
   160                  9                      Process zero~
                                               stack segment~
   164                  10                     Documentation Utilities~
   168                  11                     Complier Writer~
                                               Utilities~
   172                  12                     Initialization code~
   176                  13                     Basic system Directory~
   180 - 183            14 - 17                Page Table segments~
   184                  18                     File system workspace~
   188 - 199                                   Spare~
   200                  19                     Math functions~
   204                  20                     MURD~
   208 - 209            21 - 22                MUTL~
   212                  23                     MUSL~
   216                  24                     Basic utilities~
   220                  -                      Floppy Manager~
   224                  -                      MUSS C Utilities~
   228                  -                      UNIX Shell~
   232                  25                     FIO~
   236                  26                     PIO~
   240                  27                     BIO~
   244                  28                     CIO~
   248                  29                     Graphics pixel store~
    -                   30                     Disc copy facility~
    -                   31                     Initial paged data~
~0
~S1~O2.2 Allocation of Disc Space~
~S~ONote~
~T% 5
~
1)~I0* indicates Sector 0 all other disc addresses are in page size
units starting from Sector 32.~
~
2)~IIf this layout is changed there are several places in the
source which will need to be changed accordingly.  They are~
~
~IROM compile jobs (sections 4.4, 4.5)~
~ICONSYS.SYS14/1~
~Iand SYM011 (the DOWNLD library)~
~3
~
MUSS Disc Address              Contents~
~
~M~OBOOTSTRAP UTILITIES~
~
0 - 5                        Disc copy utility~
6 - 13                       Monitor~
~
~M~OV1 SYSTEM~
~
   16 -    63                Locked system code (48K)~
   64 -   111                Locked system data (48K)~
  112 -   127                Initial paged system data (16K)~
  128 -   195                Paged system code (64K)~
  196 -   211                Initialisation code (16K)~
  212 -   223                Library directory (8K)~
  224 -   291                Basic library (64K)~
  296 -   359                Compiler writers utilities (64K)~
  360 -   427                Documentation utilities (64K)~
  432 -   451                Mathematical functions (20K)~
  456 -   519                MURD (64K)~
  520 -   587                MUSL (64K)~
  592 -   719                MUTL (128K)~
  720 -   763                FIO (40K)~
  768 -   799                PIO (32K)~
  800 -   871                BIO (64K)~
  872 -   939                Basic utilities (64K)~
  944 -   975                CIO (32K)~
  976 -  1007                SPARE (32K)~
~
~M~OV2 SYSTEM~
~
 1008 -  1055                Locked system code (48K)~
 1056 -  1103                Locked system data (48K)~
 1104 -  1119                Initial paged system data (16K)~
 1120 -  1187                Paged system code (64K)~
 1188 -  1203                Initialisation code (16K)~
 1208 -  1215                Library directory (8K)~
 1216 -  1283                Basic library (64K)~
 1288 -  1351                Compiler writers utilities (64K)~
 1352 -  1419                Documentation utilities (64K)~
 1424 -  1443                Mathematical functions (20K)~
 1448 -  1511                MURD (64K)~
 1512 -  1579                MUSL (64K)~
 1584 -  1711                MUTL (128K)~
 1712 -  1755                FIO (40K)~
 1760 -  1791                PIO (32K)~
 1792 -  1863                BIO (64K)~
 1864 -  1931                Basic utilities (64K)~
 1936 -  1967                CIO (32K)~
 1968 -  1999                SPARE (32K)~
~0
~S1~O2.3 Core Layout after Bootstrapping~
~
~
~X%`
~BThe table below descibes the layout of core after bootstrapping. Some areas
of core are accessed through virtual addresses in common segments 128 and 132.
These virtual addresses are given. The size of most areas depends on the configu
ration of the system. The datavec SYSTEM.SPEC (see chart CONSYS) contains some o
f these
sizes.~
~3
~
Physical Virtual  Size                 Contents~
address  address~
%2000    -        %C00 bytes           Interrupt vectors~
                                       and ROM workspaces~
%2C00    %840C00  see SYSTEM.SPEC      Locked data~
                                       (TLSEG 3 in SYS compile)~
%E000    %84C000  1 page               SST PT (see CONSYS.SYS14)~
%10000   %84E000  depends on number    I/O buffers~
                  of I/O devices       (see CONSYS.SYS19)~
%20000   %85E000  depends on core      Store size dependent tables~
                  size                 (see CONSYS.SYS02 & CONSYS.SYS14)~
%30000   %86E000  depends on disc      Disc size dependent tables~
                  size                 (see CONSYS.SYS03)~
%40000   %800000  see SYSTEM.SPEC      Locked code~
                                       (TLSEG 1 in SYS compile)~
%50000   -        2 pages              Initial page tables~
                                       (see CONSYS.SYS14)~
%54000   -        1 page               Process zero PRB~
                                       (see CONSYS.SYS14)~
%58000   -        see SYSTEM.SPEC      Initial paged data~
                                       (see CONSYS.SYS14)~
%60000   -        %4000 bytes          Initialisation code~
                                       (TLSEG 5 in SYS compile)~
~0
~
~BLiterals corresponding to these addresses can be found on chart CONSYS.
~


~X%%
~BThe start of the system data area contains variables
which are accessed by appendix code written in machine code
as well as MUSL. Placing these variables here provides the
means by which their locations are known, for the machine
code inserts. The present allocation is as follows:~
~3
         Bootstrap version number~
         Bootstrap drive number~
         Bootstrap disc type~
         Gemstone RS232 driver workspace~
         APP LINK (used by CPU appendix)~
         FIXED ADDRESS (used by CPU appendix)~
         SAVE LINK (used by CPU appendix)~
         Three pointers used by the input/output system~
         V.EXEC.MC.CONTROL~
         Five pointers used by the memory management system~
         Three variables used by the raw interrupt processing~
         Two statistics variables~
         Four locations used for address translation~
         Interrupt Level Activity Stacks~
         REGISTER STACK (used to save registers on interrupt)~
         System Configuration Information~
~0
~
~ONOTE:
~BAny change to this allocation may necessitate changes to the
addresses used by the machine code inserts.~
~P~S1~O4. Compile Jobs
~S1~O4.1 System Compile (ALL GEMSTONE MACHINES)~
~X%`
~X{|
~
~OFiles produced~
~
List of file names~
BSYS\?1 BSYS\?2 BSYS\?3 BSYS\?4~
BSYS\?5 BSYS\?6 BSYS\?7 DIR1\?~
~
::BEGIN COMPSYS\?~
DO 0 SYS\?LOG %200 %40000~
LIB MTLX\~
LIB MSLX~
LIB L2X\~
OPENDIR MUSMS~
FLIP MU6S:CONSYS52 1~
CONSYS~
ED~
(FD-::LOCUST -)E **FOR LOCUST**~
(FD-::WREN -)E **FOR WREN**~
**DI 4 0~
MUSL %0 BSYS\? %70F~
*INFORM %2400;~
**TLSEG 0 %10000 %880000 -1 0~
**TLSEG 1 %A000 %800000 -1 0~
**TLSEG 3 %7400 %840C00 -1 0~
**TLSEG 4 %5000 %86E000 -1 0~
**TLSEG 5 %4000 %60000 -1 0~
**TLSEG 6 %100 %8C0606 -1 0~
**TLSEG 7 %1400 %84E000 -3 0~
**TLSEG 8 %4000 %900000 -1 0~
**TLSEG 9 %400 %84C000 -3 0~
**TLSEG 10 %100 %0 -3 0~
*TLLOAD 1 2; :: SYSINT CODE~
*TLLOAD 0 4; :: SYSTSK CODE~
*TLLOAD 3 5; :: LOCKED DATA~
*TLLOAD 3 6; :: LOCKED AT THE MOMENT DATA~
*TLLOAD 8 12; :: SYS19 DATA~
*TLLOAD 5 7; :: INITIALIZATION CODE~
*TLLOAD 1 11; :: COMMON INT/CMD LEVEL CODE~
*TLLOAD 0 15; :: COMMON COMMAND LEVEL PROCEDURES~
*TLLOAD 0 16; :: VIRTUAL STORE COMMANDS~
*TLLOAD 0 17; :: MESSAGE COMMANDS~
*TLLOAD 0 18; :: I/O AND CONFIGURATION COMMANDS~
*TLLOAD 0 19; :: PROCESS COMMANDS~
*TLLOAD 0 20; :: FILE COMMANDS~
*TLLOAD 0 21; :: MISCELLANEOUS COMMANDS~
*TLLOAD 10 22; :: PW0 ETC~
*TLLOAD 1 23; :: I/O APPENDIX~
*TLLOAD 6 27; :: LIB DATAVEC~
*TLLOAD 0 25; :: MAGNETIC TAPE COMMANDS~
*TLLOAD 0 26; :: DRUM MANAGER COMMANDS~
*TLLOAD 8 28; :: FILE DATA~
*TLLOAD 7 24; :: I/O BUFFERS~
*TLLOAD 9 8; :: SST PT~
*TLLOAD 3 29; :: STORE SIZE DEPENDENT DATA~
*TLLOAD 4 30; :: DRUM DATA~
**SELECTINPUT 4~
FLIP MU6S:AP5013 1~
AP501~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:AP5023 1~
AP502~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:AP1031 1~
AP103~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:AP5042 1~
AP504.GEM~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
DEL~
MUSL %0 %0 %F00~
MODULE (V.MT.CONTROL, V.MT.COUNT, V.MT.ADDRESS);
*GLOBAL 5;
LOGICAL [1] DUMMY;
LOGICAL32 [1]  DUMMY32;
VSTORE V.MT.CONTROL [1] DUMMY;
VSTORE V.MT.COUNT [1] DUMMY;
*VTYPE LOGICAL32;
VSTORE V.MT.ADDRESS [1] DUMMY32;
*VTYPE LOGICAL;
*END
FLIP MU6S:SYS011 1~
SYS01~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS023 1~
SYS02~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS034 1~
SYS03~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS052 1~
SYS05~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS061 1~
SYS06~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS081 1~
SYS08~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
MUSL %0 %0 %F00~
MODULE SYS09 (START.GR.OPERATION, GR.READ, GR.WRITE,~
   STOP.GR.OPERATION, TINI.GRS);~
*CODE 25;~
LSPEC START.GR.OPERATION (INTEGER);~
LSPEC GR.READ (INTEGER, ADDR, INTEGER, INTEGER);~
LSPEC GR.WRITE (INTEGER, ADDR, INTEGER, INTEGER);~
LSPEC STOP.GR.OPERATION (INTEGER);~
PROC START.GR.OPERATION (P1);~
END~
PROC GR.READ (P1, P2, P3, P4);~
END~
PROC GR.WRITE (P1, P2, P3, P4);~
END~
PROC STOP.GR.OPERATION (P1);~
END~
*CODE 19;~
PSPEC TINI.GRS (INTEGER);~
PROC TINI.GRS (P1);~
END~
*END~
FLIP MU6S:SYS101 1~
SYS10~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS111 1~
SYS11~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS121 1~
SYS12~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS145 1~
SYS14~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS151 1~
SYS15~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS163 1~
SYS16~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS172 1~
SYS17~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS181 1~
SYS18~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS193 1~
SYS19~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS131 1~
SYS13~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS073 1~
SYS07~
SAVE SUBMOD1~
FLIP MU6S:SYS074 1~
SYS07~
SAVE SUBMOD2~
FLIP MU6S:SYS075 1~
SYS07~
SAVE SUBMOD3~
ED MU6S:SYS072~
S{TITLE SYS07{~
D{::SUB1 {~
D{::SUB2 {~
D{::SUB3 {~
C{TITLE SYS07/4{~
(4D{::SUB1 {)~
(4D{::SUB2 {)~
(2D{::SUB3 {)~
(2D{::SUB1 {)~
(2D{::SUB2 {)~
(2D{::SUB1 {)~
(2D{::SUB2 {)~
(2D{::SUB3 {)~
E~
FLIP 0 1~
SYS07~
**DI 4 0~
MUSL %0 %0 %F00~
**TLMODE %101~
**SELECTINPUT 4~
DEL SUBMOD1~
DEL SUBMOD2~
DEL SUBMOD3~
FLIP MU6S:SYS201 1~
SYS20~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS211 1~
SYS21~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS231 1~
SYS23~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:SYS221 1~
SYS22~
**DI 4 0~
MUSL %0 %0 %F00
**SELECTINPUT 4~
ENDINPUT 4~
FLIP MU6S:AP5991 1~
AP599~
**DI 4 0~
MUSL %0 %0 %B00~
**SELECTINPUT 4~
ENDINPUT 4~
CF BSYS\? DIR1\?~
DEL BSYS\?~
STOP~
::END COMPSYS\?~
~S4.2 GEM Monitor Compile
~
~
::BEGIN CGEM MONITOR~
DO 0 ROM5LOGS %200~
LIB MTLX5~
LIB MSLX~
LIB L2X5~
OUTFN AP5112~
FLIP MU6S:AP5112 1~
AP511~
DEFINE.INPUT 4 0~
MUSL %0 BMON %70B~
**TLMODE %101~
*INFORM %2400;~
**TLSEG 0 %2000 %0 -1 0~
**TLSEG 1 %1000 %3800 -1 0~
**TLSEG 2 %0 %2000 -3 0~
**TLSEG 4 %0 %10000 -3 0~
**TLSEG 5 %C00 %2000 -1 0~
*TLLOAD 1 2;~
*TLLOAD 2 3;~
*TLLOAD 4 5;~
*TLLOAD 5 8;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
MUSL %0 %0 %F0B~
MODULE (NO.V1.SEGS, NO.V2.SEGS, SYS14.PAGE.SHIFT,~
   MUSS.ROM.START, OLAY.ADDR,~
   V1.DISC.ADDR, V1.CORE.ADDR, V1.TRAN.SIZE,~
   V2.DISC.ADDR, V2.CORE.ADDR, V2.TRAN.SIZE);~
LITERAL NO.V1.SEGS = 4, NO.V2.SEGS = 4, SYS14.PAGE.SHIFT = 10;~
LITERAL / ADDR MUSS.ROM.START = %0000, OLAY.ADDR = %3800;
*GLOBAL 1;~
DATAVEC V1.DISC.ADDR (ADDR)~
   64 16 196 112~
END~
DATAVEC V1.TRAN.SIZE (LOGICAL)~
   29 48 16 16~
END~
DATAVEC V1.CORE.ADDR (ADDR)~
   %2C00 %40000 %60000 %58000~
END~
DATAVEC V2.DISC.ADDR (ADDR)~
   1056 1008 1188 1104~
END~
DATAVEC V2.TRAN.SIZE (LOGICAL)~
   29 48 16 16~
END~
DATAVEC V2.CORE.ADDR (ADDR)~
   %2C00 %40000 %60000 %58000~
END~
*END~
MUSL %0 %0 %F0B~
MODULE (SUPP.MENU, SUPPT.SIZE, OPTION.ADDRS, SUPP.OPTIONS);~
*GLOBAL 1;~
LITERAL / LOGICAL8 LF = 10;~
DATAVEC SUPP.MENU (LOGICAL8)~
   LF "8) Copy Disc." LF~
END~
LITERAL SUPPT.SIZE = 15;~
DATAVEC OPTION.ADDRS (INTEGER)~
   32~
END~
LITERAL SUPP.OPTIONS = 1~
*END~
FLIP MU6S:AP5123 1~
AP512~
DEFINE.INPUT 4 0~
MUSL %0 %0 %F0B~
*INFORM %2400;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
FLIP MU6S:SYS501 1~
SYS50~
ED~
(FD/::SMS/)~
E~
ED~
(FD/::GEM/)~
E~
DEFINEINPUT 4 0~
MUSL %0 %0 %F0B~
*INFORM %2400;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
ED MU6S:SYS511~
(FD/::GEM/)E~
FLIP 0 1~
SYS51~
DEFINEINPUT 4 0~
MUSL %0 %0 %F0B~
*INFORM %2400;~
**TLSEG 6 %10000 %8000 -3 0~
**TLSEG 7 %C00 %3800 -1 0~
*TLLOAD 6 7;~
*TLLOAD 7 6;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
MUSL 0 0 %B0B~
MODULE (SERVICE.ROUTINE);~
*CODE 2;~
PSPEC SERVICE.ROUTINE ();~
PROC SERVICE.ROUTINE;~
END~
*END~
DEL BMON~
~
STOP~
::END~
~Y
~V9 -1
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H     CONSYS        52
~V9 -1
~F
@TITLE CONSYS(52,11)
@COL 1S-2R-3R-4R-5R-6F
@FLOW 1-2-3-4-5-6
@BOX 1.0
CONFIGURATION MODULE
@BOX 3.0
SPECIFICATION OF CONFIGURATION PARAMETERS
FOR GEMSTONE MC68000
@BOX 6.0
END
@BOX 1.1
#CONSYS/1
#CONSYS/2
@BOX 3.1
*GLOBAL 22;
ADDR PW0, PW1, PW2, PW3, PW4, PW5, PW6;
LOGICAL64 PWW1, PWW2, PWW3, PWW4;
@BOX 4.1
::GENERAL PARAMETERS
LITERAL / INTEGER NO.OF.COMMANDS = 88, BYTES.PER.WORD = 2, BITS.PER.WORD = 16,
   RESERVED.STACK.BOTTOM = 8192, RESERVED.STACK.TOP = 512;
LITERAL / ADDR REAL.STORE.ADDRESS = 0;
@BOX 5.1
*GLOBAL 5;
INTEGER VERSION.NO; :: ACCESSED BY THE BOOTSTRAP;
INTEGER BOOT.DRIVE.NO; :: ACCESSED BY THE BOOTSTRAP
INTEGER BOOT.DISC.TYPE; :: AND BY THE DRUM APPENDIX
DATAVEC FIXED.ADDRESSES (ADDR)
   0 :: GEMSTONE RS232 WORKSPACE POINTER
   0 :: APP.LINK
   0 :: FIXED.ADDRESS
   0 :: SAVE.LINK
   0 :: INPUT CHARACTER TABLE PTR
   0 :: SPARE
   0 :: OUTPUT CHARACTER TABLE PTR
   0 :: V.EXEC.MC.CONTROL
   0 ::
   0 :: SST PT PTR
   0 :: PT DESCRIPTOR PTR
   0 :: MSST PTR
   0 :: FIXED ADDRESS 2
   0 :: INTERRUPT TRAP
   0 0 :: INTERRUPT PROCEDURE TABLE PTR
   0 :: V.VM.TIMER
   0 :: V.BUS.ERRORS
   0 [4] ::V.CURRENT.SEGS
END
LOGICAL PADDING;
DATAVEC INTERRUPT.STACKS (LOGICAL8)
   0 [%2AA0]
END
DATAVEC REGISTER.STACK (ADDR)
 0 [15]
END
DATAVEC SYSTEM.SPEC (ADDR)
   %8000 :: LOCKED DATA SIZE (IN BYTES)
   %A000 :: LOCKED CODE SIZE (IN BYTES)
   %100000 :: STORE SIZE (IN BYTES)
   %0000 :: DISC 0: DRIVE NO./TYPE
   %0000 :: DISC 1: DRIVE NO./TYPE
   0 :: NO. OF I/O DEVICES - NOT USED AT PRESENT
   0 :: NO. OF COMMS DEVICES - NOT USED AT PRESENT
   %2000 :: PAGED DATA SIZE (IN BYTES)
   0 [8]
END
LITERAL / INTEGER PAGE.SIZE =1024, PAGE.SHIFT = 10, BITS.PER.STORE.PAGE = 76;
LITERAL / ADDR LOCKED.DATA.START = %2000, SST.PT.START = %E000,
   IO.BUFF.START = %10000, STORE.SIZE.DEPT.DATA.START = %20000,
   DISC.SIZE.DEPT.DATA.START = %30000, LOCKED.CODE.START = %40000,
   INIT.PAGE.TABLES.START = %50000, LOCKED.DATA.SEG.ADDR = %840000;
*CODE 7;
*GLOBAL 5;
*#%4FF9 %0007 %0000; ::SET SF;
*#%4E4F; ::TRAP;
#CONSYS.APP
#CONSYS.SYS01
#CONSYS.SYS02
#CONSYS.SYS03
#CONSYS.SYS05
#CONSYS.SYS06
#CONSYS.SYS10
#CONSYS.SYS11
#CONSYS.SYS12
#CONSYS.SYS13
#CONSYS.SYS14
#CONSYS.SYS15
#CONSYS.SYS16
#CONSYS.SYS17
#CONSYS.SYS18
#CONSYS.SYS19
#CONSYS.SYS20
#CONSYS.SYS21
#CONSYS.SYS23
@BOX 6.1
*END
@END



@TITLE CONSYS/1(52,11)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
OTHER MODULES REFERENCED
@BOX 4.0
SYS03 DRUM MANAGER
SYS05 EXCHANGEABLE MEDIA STORAGE MANAGEMENT
SYS06 PROCESS SCHEDULER
SYS07 I/O MANAGEMENT
SYS08 REAL TIME CLOCK
SYS13 PROCESS MANAGEMENT
SYS14 VIRTUAL STORE MANAGEMENT
SYS16 FILE SYSTEM
SYS19 CONFIGURATION MANAGER
SYS20 PROCESS ZERO
SUP01 JOB SUPERVISOR
SUP02 FILE MANAGER
LIB10 OPERATOR UTILITIES
@BOX 1.1
::EXTERNAL ENVIRONMENT
@BOX 3.1
PSPEC GEM.I.CONTROL (INTEGER, INTEGER, ADDR, INTEGER, LOGICAL32) / LOGICAL32;
PSPEC GEM.O.CONTROL (INTEGER, INTEGER, ADDR, INTEGER, LOGICAL32) / LOGICAL32;
PSPEC EMPTY.ACTIVITY ();
PSPEC SET.BIT (ADDR [LOGICAL8], INTEGER);
@BOX 4.1
PSPEC SYS02.RELEASE.PAGE (INTEGER, INTEGER);
PSPEC SYS03.DRUM.INTERRUPT ();
PSPEC SYS03.DRUM.TASK ();
PSPEC SYS03.INITIALISE.DRUM.SEGMENT (INTEGER, LOGICAL32, INTEGER, INTEGER);
PSPEC SYS05.ED.INTERRUPT ();
PSPEC SYS06.PROCESS.SCHEDULER ();
PSPEC SYS07.IO.INTERRUPT ();
PSPEC SYS07.IO.TASK ();
PSPEC SYS08.CLOCK.INTERRUPT ();
PSPEC SYS13.PROCESS.ACTIVITY ();
PSPEC SYS13.INT.GET.PRB (INTEGER) / ADDR;
PSPEC SYS13.TERM.PROC.TASK ();
PSPEC SYS13.INIT.SUP.TASK ();
TYPE SYS14.CMT.TYPE IS
   LOGICAL16 SSN
   INTEGER16 BLOCK
OR
   LOGICAL32 ENTRY;
TYPE SYS14.LST.TYPE IS
   LOGICAL8 ACCESS, SSN
OR
   LOGICAL16 LST.ENTRY;
TYPE SYS14.SEG.VARS IS
   SYS14.LST.TYPE [64] LST
   SYS14.LST.TYPE [32] XST
   INTEGER SSN1, BLK1, SSN2, BLK2;
TYPE SYS14.SST.TYPE IS
   INTEGER LIMIT, COUNT, PAGE.COUNT
   LOGICAL8 STATUS
OR
   INTEGER SST.LINK;
SYS14.SST.TYPE [128] SYS14.SST;
LOGICAL32 [128] SYS14.SST.PT;
SYS14.LST.TYPE [128] SYS14.CST;
ADDR [SYS14.CMT.TYPE] SYS14.CMT;
ADDR [INTEGER16] SYS14.LOCKIN;
ADDR [INTEGER8] SYS14.USAGE.COUNT;
PSPEC SYS14.CORE.REJECT ();
PSPEC SYS16.FILE.TASK ();
PSPEC SYS16.INIT.FILE.TASK ();
PSPEC SYS19.INIT.DEV.TASK ();
PSPEC SYS17.INIT.ACCOUNTS.TASK ();
PSPEC SYS20.SET.TASK (INTEGER, INTEGER);
PSPEC SYS20.TASK.LOOP ();
PSPEC JOB ();
PSPEC FILMAN ();
PSPEC FLOPPY ();
PSPEC SET.UP ();
@END
@TITLE CONSYS/2(52,11)

@COL 1S
@BOX 1.0
EXPORT LIST
@BOX 1.1
MODULE (PW0, PW1, PW2, PW3, PW4, PW5, PW6, PWW1, PWW2, PWW3, PWW4,
   NO.OF.COMMANDS, BYTES.PER.WORD, BITS.PER.WORD, NO.OF.LOCKED.PTS,
   REAL.STORE.ADDRESS, RESERVED.STACK.BOTTOM, RESERVED.STACK.TOP, TICKS.PER.SECO
ND,
   NO.OF.GEM.CHANNELS, NO.OF.GEM.DEVICES, DISC.CHANNEL, DISC.PORT,
   DISC.VEC, DRIVE.SIZE, SECT.SIZE, VEC.ADDR,
   I.CH.TABLE, O.CH.TABLE, WRITE.PROCS, POLL.PROCS,
   OVERRUN.SIZE, OVERRUN.AREA.SIZE, COMMAND.ADDR, PACKET.ADDR,
   SYS01.INT.ACTIVITIES, INT.ACTIVITIES, CHECKPOINT.HALT, NO.OF.ACTIVITIES,
   NO.OF.HALTS, SYS01.NO.OF.ACTIVITIES, SYS01.NO.OF.INT.ACTIVITIES, SYS01.CORE.H
ALT, SYS01.DTQ.HALT,
   SYS01.ESM.HALT, SYS01.PAGING.HALT, SYS01.TASK.HALT, SYS01.PAGING.ACTIVITY,
   SYS01.DRUM.ACTIVITY, SYS01.DISC.ACTIVITY, SYS01.TAPE.ACTIVITY, SYS01.PROC.SCH
EDULER.ACTIVITY,
   SYS01.IO.ACTIVITY, SYS01.CLOCK.ACTIVITY, SYS01.PZ.ACTIVITY, ACTIVITY.LINK,
   NO.OF.PAGES.BIT.VEC.SIZE, NO.OF.CORE.PAGES.BIT.VEC.SIZE,
   NO.OF.CORE.PAGES, NO.OF.PAGES, LOG.MAX.SIZE, LINK, SYS02.CORE.PAGE.SIZE,
   PAGED.DATA.SEG, PAGED.DATA.MAPPED.SEG,
   DRUM.ALLOCATIONS, DRUM.SIZES, FREE.BLOCKS, FREE.SUB.TABLES,
   NO.OF.DRUM.SECTIONS, DISC.SIZES, MAX.SECTORS,
   DRUM.SECTION.SIZE, DRUM.SECTION.AVAILABLE,
   NO.OF.DISC.TYPES, DRUM.BLOCK.SIZE, SUB.TABLE.SIZE, MAX.SEG.SIZE, DISC.INIT,
   MAX.BLOCKS.DRUM.XFER, NO.OF.BAD.BLOCKS, BAD.BLOCK.TABLE.ADDR,
   DRUM.BLK.SHIFT, DRUM.BLOCK.SIZE.BIT.VEC.SIZE, BLOCK.TABLE.ENTRY.SIZE,
   NO.OF.DISCS, SECTOR.SIZE, BLOCK.AREA.ADDR, TABLE.AREA.ADDR,
   SECTOR.BUFF.VA, SECTOR.BUFF.RA,
   CORE.TABLE.AREA.RA, CORE.TABLE.AREA.VA, CLEAR.PAGE.ADDR, SYS05.NO.OF.ED.UNITS
,
   NO.OF.UNITS, NO.OF.MT.UNITS, FIRST.MT.UNIT, NO.OF.ED.UNITS, ED.BLOCK,
   FIRST.ED.UNIT, MAX.MT.TRANSFER, MT.PAR, MAX.BLOCKS.MT.XFER,
   INTERACTIVE.TS, BATCH.TS, BATCH.NO, CMD.SUS, TERM.SUS,
   SYS06.TERM.SUS, SYS06.KILL.SUS, MESSAGE.SUS, SYS06.MESSAGE.SUS, SYS06.IO.SUS,
   IO.BUF.SEG, IO.BUF.BLK, IO.MSEG,
   WORKSPACE,
   INITIAL.TIMER, SYS11.INITIAL.TIMER, ABORT.CPU, DEFAULT.CPU, TRAPPING.CPU, CPU
.RUNOUT,
   ILLEGAL.ORDER,
   NO.OF.SUPS, SUP.NAME, SUP.START, PRIVI.UID, PRBS.PER.SEG, PRB.SIZE, PRB.SEG,
   PZ.PRB.RA, PRB.MAPPED.SEG, CPRB.MAPPED.SEG, NO.OF.PROCS, SYS13.NO.OF.PROCS,
   SEG.SIZE, SEG.SHIFT, X.SEG.SIZE, PAGE.SIZE, PAGE.SHIFT, PAGE.FIELD,
   PAGE.STATUS, IN.CORE, ON.DRUM, LOCKOUT, ALTERED, VALID, PROTECTED, NO.OF.INIT
IAL.SEGS,
   NO.OF.LOCAL.SEGS, NO.OF.X.SEGS, NO.OF.COMMON.SEGS, NO.OF.SYS.SEGS,
   FIRST.X.SEG, FIRST.COMMON.SEG, RESERVED.BLOCK1, RESERVED.BLOCK2,
   SYS14.FIRST.COMMON.SEG, SYS14.NO.OF.COMMON.SEGS, SYS14.REAL.STORE.ADDRESS,
   SYS14.PAGE.SHIFT, SYS14.NO.OF.SYS.SEGS, SYS14.NO.OF.LOCAL.SEGS,
   SYS14.NO.OF.X.SEGS, LOCKED.SIZE,  SYS14.ON.DRUM, SYS14.PT.SIZE,
   SYS14.IO.BUF.SEG, SYS14.IO.BUF.SEG.2, SYS14.SEG.SHIFT, SYS14.SEG.SIZE,
   SYS14.X.SEG.SIZE, SYS14.PAGE.SIZE, REAL.STORE.ADDRESS, PT.SEG, PT.SEG.SSN, SY
S14.PT.SEG,
   NO.OF.BUFFERS, NO.OF.BUFFERS.BIT.VEC.SIZE, MBUFS.PER.SEG,
   MBUF.SEG, MBUF.MAPPED.SEG, RESPONSE.TIME,
   NO.OF.DIRS, SYS.MB.FILLER.SIZE, SYS.MB.START.ADDR, USER.MB.START.ADDR,
   DIR.ENTRY.SIZE, USER.MB.ENTRY.SIZE,
   MAX.PERMITTED.USERS, BLOCK.SIZE, MAPPED.UMB.TABLE.SIZE,
   NO.OF.REMOTE.DIRS, NO.OF.SYS.REMOTE.DIRS,
   FILE.SEG, FILE.MAPPED.SEG, PERMIT.MAPPED.SEG, CATALOGUE.MAPPED.SEG,
   NO.OF.RESOURCES, NO.OF.USER.PARAMS, NO.OF.CONSUMABLES, NO.OF.REUSABLES, NO.OF
.USERS,
   CPU.TIME, SYS17.NO.OF.RESOURCES, SYS17.NO.OF.USER.PARAMS, SYS17.NO.OF.CONSUMA
BLES,
   SYS17.NO.OF.REUSABLES, SYS17.CPU.TIME, SYS17.FILE.STORE, SYS17.NO.OF.FILES, D
AILY.LIMIT,
   ACCS.MAPPED.SEG, AUL.CORE.SEG, AUL.CORE.BLK, AUL.BLK.SIZE, AUL.DRUM.SITE.1,
AUL.DRUM.SITE.2,
   AUL.MAPPED.SEG, AUL.FILLER.SIZE, AUL.INT.MAPPED.SEG, PRIVI.USER.NAMES, PRIVI.
USER.PASSWDS,
   PRIVI.USER.SUPERS, PRIVI.SYS.UPS, PRIVI.SYS.UPS.SIZE, SUBORDS, NO.OF.DEFAULT.
USERS,
   MAX.BALANCE, AUL.UPDATE.PERIOD,
   NO.OF.MCS, MC.CHANNEL, MC.NAME, NO.OF.SUP.PROCS,
   SUP.PROC.NAME, SUP.MC.NAME, SUP.SPN, SUP.PID, SUP.CH,
   PERI.BUFF.VA, PERI.BUFF.RA, PERI.BUFF.SIZE, SYS19.NO.OF.P.DEV.TYPES,
   NO.OF.P.DEV.TYPES, NO.OF.DEVICE.CLASSES, DEVICES.PER.P.DEV.TYPE,
   SYS19.MAX.DATA.TRANSFER, SYS19.PERI.BUFF.SIZE, NO.OF.PRESET.DEVICES,
   SYS19.NO.OF.COMMS.DEVICES, COMMS.BUFFER.VA, COMMS.BUFFER.RA,
   NO.OF.DEVICES, SYS19.NO.OF.DEVICES, CONFIG.TABLE, CONFIG.SIZE, NO.OF.PERI.PRO
CS,
   SYS19.TALK.IN.DEVICE.CLASS, SYS19.TALK.OUT.DEVICE.CLASS,
   SYS19.NO.OF.GROUPS, NO.OF.PERI.CHANNELS, NO.OF.PERI.REROUTES, PERI.NAME,
   PERI.SPN, SYS19.NO.OF.PERI.CHANNELS, SYS19.OPR.IN.DEV.NO,
   SYS20.INIT.ACCOUNTS.TASK, SYS20.TERM.PROC.TASK, SYS20.INIT.SUP.TASK, SYS20.FI
LE.TASK,
   SYS20.DRUM.TASK, SYS20.IO.TASK, SYS20.INIT.FILE.TASK, SYS20.SET.UP.TASK,
   SYS20.INIT.DEV.TASK, NO.OF.TASKS, TASK.PROC, TASK.PROCS,
   NO.OF.STATS,
   INITIAL.DATA.SEG, INITIAL.DATA.MAPPED.SEG, NO.OF.INITIAL.DATA.SEGS,
   DRUM.ADDRS.1, DRUM.ADDRS.2, LIMITS, VERSION.NO,
   NO.OF.OP.PARAMS);
@END

@TITLE CONSYS.APP(52,11)

@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
APPENDIX CONFIGURATION
@BOX 2.0
APPENDIX DECLARATIONS
@BOX 4.0
INITIALIZATION CODE
@BOX 1.1
::APPENDIX CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.PROCS = 32, SYS13.NO.OF.PROCS = NO.OF.PROCS;
LITERAL / INTEGER TICKS.PER.SECOND = 60;
@BOX 4.1
*CODE 7;
#CONSYS.APP/2
#CONSYS.APP/1
PSPEC APP.INITIALISE ();
APP.INITIALISE ();
PROC APP.INITIALISE;
INTEGER PTR;
*VTYPE LOGICAL8;
VSTORE V.CLOCK.CONTROL %406022;
VSTORE V.CLOCK.STATUS %406020;
*VTYPE LOGICAL16;
VSTORE INT.VEC.TABLE [%300] %2000;
*VTYPE LOGICAL;
VSTORE INT.TRAP %840C3A;
VSTORE OLD.VERSION.NO %A0000;
OLD.VERSION.NO => VERSION.NO;
FOR PTR < 256 DO
%4EF9 => INT.VEC.TABLE [PTR * 3];
%0084 => INT.VEC.TABLE [PTR * 3 + 1];
%0C3A => INT.VEC.TABLE [PTR * 3 + 2];
OD
%4E73 => INT.TRAP;
0 => V.CLOCK.CONTROL;
V.CLOCK.STATUS;
END
@END

@TITLE CONSYS.APP/1(52,11)

@COL 1S-2R
@FLOW 1-2

@BOX 1.0
I/O APPENDIX CONFIGURATION
@BOX 2.0
INITIALISE APPENDIX
I/O VARIABLES
@BOX 1.1
::I/O APPENDIX CONFIGURATION

LITERAL / INTEGER NO.OF.GEM.CHANNELS =  4, NO.OF.GEM.DEVICES = NO.OF.GEM.CHANNEL
S * 2;
LITERAL / INTEGER OVERRUN.SIZE = %80,
   OVERRUN.AREA.SIZE = OVERRUN.SIZE * NO.OF.GEM.CHANNELS;
DATAVEC I.CH.TABLE (LOGICAL8)
   4 [2]   %C      %46   4 [4]   %24     4       5       4        5
   %15     4 [3]   %84   4       %84     4 [107] %24     4 [128]
END
DATAVEC O.CH.TABLE (LOGICAL8)
   0 [10]   %20  0   %40   0 [243]
END
DATAVEC PACKET.ADDR (ADDR)
   %40DE80
   %40DE00
   %40DD80
   %40DD00
   %40D480
   %40D500
   %40D580
   %40D600
END
DATAVEC COMMAND.ADDR (ADDR)
   %6D5C00
   %6C5C00
   %6A5C00
   %695C00
   %685400
   %695400
   %6A5400
   %6B5400
END
DATAVEC VEC.ADDR (ADDR)
   %21A6
   %21A0
   %2194
   %218E
   %21D0
   %21D6
   %21DC
   %21E2
END
PSPEC WRITE.PROC (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;;
PSPEC DUMMY.WRITE.PROC = WRITE.PROC;
DATAVEC WRITE.PROCS (ADDR WRITE.PROC)
   DUMMY.WRITE.PROC
   GEM.I.CONTROL
   GEM.O.CONTROL
END
PSPEC DUMMY.POLL.PROC ();
DATAVEC POLL.PROCS (ADDR DUMMY.POLL.PROC)
   DUMMY.POLL.PROC [3]
END
*CODE 2;
PROC DUMMY.POLL.PROC;
END
*CODE 7;
@BOX 2.1
BEGIN
*VTYPE ADDR;
VSTORE I.CH.TABLE.PTR %840C16;
VSTORE O.CH.TABLE.PTR %840C1E;
*VTYPE LOGICAL;
VSTORE IO.CLEAR %704000;
VSTORE ABORT.CMD %685C00;
VSTORE ABORT.LM [2] %40DC80;
0 => IO.CLEAR;
%1400 => ABORT.LM [0];
0 => ABORT.LM [1];
0 => ABORT.CMD;
WHILE ABORT.LM [1] /= %7000 DO OD
BYTE (^I.CH.TABLE) => I.CH.TABLE.PTR;
BYTE (^O.CH.TABLE) => O.CH.TABLE.PTR;
END
@END
@TITLE CONSYS.APP/2(52,11)
@COL 1S-2R-3R-4R-5R-6F

@FLOW 1-2-3-4-5-6

@BOX 1.0
INITIALISE MEMORY MANAGEMENT SYSTEM
@BOX 2.0
CLEAR PAGE DESCRIPTORS
AND SEGMENT DESCRIPTORS
@BOX 3.0
INITIALISE REAL STORE MAPPING
@BOX 4.0
INITIALISE MAPPING OF
LOCKED CODE AND DATA
@BOX 5.0
TURN ADDRESS TRANSLATION ON!
@BOX 6.0
END
@BOX 1.1
LITERAL / INTEGER NO.OF.LOCKED.PTS = 1024; ::REAL STORE;
PSPEC INIT.MMU ();
INIT.MMU ();

PROC INIT.MMU;
INTEGER J, K;
ADDR I, DESC;
*VTYPE LOGICAL16;
VSTORE MMU.ON %506000;
VSTORE MMU.CLEAR %586000;
VSTORE PAGE.PTR [4096] %402000;
*VTYPE LOGICAL32;
VSTORE CURRENT.SEGS [4] %2C4E;
VSTORE SEG.PTR [%100000] %400000;
@BOX 2.1
FOR J < 4096 DO
0 => PAGE.PTR [J];
OD
0 => I;
FOR J < 64 DO
   FOR K < 32 DO
      0 => SEG.PTR [I + K];
   OD
   %4000 +> I;
OD
@BOX 3.1
FOR J < 1024 DO
   %4000 + J => PAGE.PTR [J];
OD
%0F3F0000 => DESC;
%1B => I;
FOR J < 64 DO
   DESC => SEG.PTR [I];
   %4000 +> I;
   64 +> DESC;
OD
@BOX 4.1
%0000006C => CURRENT.SEGS [1];
%FFC00070 => CURRENT.SEGS [2];
%FF80007C => CURRENT.SEGS [3];
%0D3F0100 => SEG.PTR [%1C] => SEG.PTR [%1E];
%053F0100 => SEG.PTR [%1D];
%801C => I;
%0C3F0180 => SEG.PTR [I] => SEG.PTR [I + 2];
%043F0180 => SEG.PTR [I + 1];
%0C3F01C0 => SEG.PTR [I + %4000] => SEG.PTR [I + %4002];
%043F01C0 => SEG.PTR [I + %4001];
%1001C => I;
%0F3F0008 => DESC;
FOR J < 4 DO
   DESC => SEG.PTR [I] => SEG.PTR [I + 2]
      & %F7FFFFFF => SEG.PTR [I + 1];
   %4000 +> I;
   64 +> DESC;
OD
@BOX 5.1
0 => MMU.CLEAR;
%9B1B => MMU.ON;
@BOX 6.1
END
@END

@TITLE CONSYS.SYS01(52,11)

@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS01 CONFIGURATION
@BOX 2.0
SYS01 PARAMETERS
@BOX 4.0
INITIALISE KERNEL STACK
AND ACTIVITY LINKS
@BOX 1.1
::SYS01 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.ACTIVITIES = 16, NO.OF.INT.ACTIVITIES = 8, NO.OF.HALTS =
 6,
   SYS01.NO.OF.ACTIVITIES = NO.OF.ACTIVITIES, SYS01.NO.OF.INT.ACTIVITIES = NO.OF
.INT.ACTIVITIES,
   CHECKPOINT.HALT = 0, SYS01.CORE.HALT = 1, SYS01.DTQ.HALT = 2,
   SYS01.PAGING.HALT =  3, SYS01.TASK.HALT = 4, SYS01.ESM.HALT = 5;
LITERAL / LOGICAL INT.ACTIVITIES = %FF00, SYS01.INT.ACTIVITIES = INT.ACTIVITIES,
   SYS01.PAGING.ACTIVITY = %4000, SYS01.DRUM.ACTIVITY = %2000, SYS01.DISC.ACTIVI
TY = %1000,
   SYS01.TAPE.ACTIVITY = %1000, SYS01.IO.ACTIVITY = %0800, SYS01.CLOCK.ACTIVITY
= %0400,
   SYS01.PROC.SCHEDULER.ACTIVITY = %0200, SYS01.PZ.ACTIVITY = %0080;
ADDR [NO.OF.ACTIVITIES] ACTIVITY.LINK;
@BOX 4.1
*CODE 7;
PSPEC INITIALISE.SYS01 ();
INITIALISE.SYS01 ();
PROC INITIALISE.SYS01;
DATAVEC INITIAL.KERNEL.STACK (ADDR)
   %840D00  %843700  %841000  %841C00
   %841300  %841600  %841900  %840D00
   %841F00  %842200  %842500  %842800
   %842B00  %842E00  %843100  %843400
END
PSPEC INT.PROC ();
DATAVEC ACTIVITY.ENTRY (ADDR INT.PROC)
   EMPTY.ACTIVITY
   SYS14.CORE.REJECT
   SYS03.DRUM.INTERRUPT
   SYS05.ED.INTERRUPT
   SYS07.IO.INTERRUPT
   SYS08.CLOCK.INTERRUPT
   SYS06.PROCESS.SCHEDULER
   EMPTY.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
   SYS13.PROCESS.ACTIVITY
END
INTEGER I;
ADDR INIT.FP;
ADDR [ADDR] INIT.FRAME;
FOR I < NO.OF.ACTIVITIES DO
   MAKE (ADDR, 2, INITIAL.KERNEL.STACK [I] - 8 => INIT.FP) => INIT.FRAME;
   BYTE (ACTIVITY.ENTRY [I]) => INIT.FRAME^ [1];
   INIT.FP => ACTIVITY.LINK [I] + 8 => INIT.FRAME^ [0];
OD
END
*CODE 7;
@END

@TITLE CONSYS.SYS02(52,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS02 CONFIGURATION
@BOX 2.0
SYS02 PARAMETERS
@BOX 3.0
INITIALISE SYS02 VARIABLES
@BOX 1.1
:: SYS02 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER SYS02.CORE.PAGE.SIZE = 512, LOG.MAX.SIZE = 10;
*GLOBAL 5;
INTEGER NO.OF.CORE.PAGES, NO.OF.PAGES, NO.OF.PAGES.BIT.VEC.SIZE,
   CORE.PAGES.PER.PAGE;
INTEGER [LOG.MAX.SIZE] LINK;
@BOX 3.1
PSPEC INITIALISE.SYS02 ();
PSPEC FREE.STORE (ADDR, ADDR, ADDR);
#CONSYS.SYS02.1
PROC FREE.STORE (AREA.ADDR, AREA.SIZE, AMOUNT.USED);
INTEGER I, START, COUNT;
AMOUNT.USED + PAGE.SIZE - 1 ->> PAGE.SHIFT => AMOUNT.USED;
AREA.ADDR ->> PAGE.SHIFT + AMOUNT.USED => START;
AREA.SIZE ->> PAGE.SHIFT - AMOUNT.USED => COUNT;
FOR I < COUNT DO
   SYS02.RELEASE.PAGE (START + I * CORE.PAGES.PER.PAGE, CORE.PAGES.PER.PAGE);
OD
END
INITIALISE.SYS02 ();
@END

@TITLE CONSYS.SYS02.1(52,11)
@COL 1S-2R-4R-5R-6F
@FLOW 1-2-4-5-6
@BOX 1.0
INITIALISE SYS02
@BOX 2.0
DETERMINE NUMBER OF PAGES IN STORE
@BOX 4.0
INITIALISE LINK LIST
@BOX 5.0
NOTE PAGES FREE FOR USE
@BOX 6.0
END
@BOX 1.1
PROC INITIALISE.SYS02;
INTEGER I;
@BOX 2.1
SYSTEM.SPEC [2] ->> PAGE.SHIFT ->> 3
   => NO.OF.PAGES.BIT.VEC.SIZE
   <<- 3 => NO.OF.PAGES;
PAGE.SIZE / SYS02.CORE.PAGE.SIZE => CORE.PAGES.PER.PAGE;
NO.OF.PAGES * CORE.PAGES.PER.PAGE
   => NO.OF.CORE.PAGES;
@BOX 4.1
FOR I < LOG.MAX.SIZE DO
   -1 => LINK [I];
OD
@BOX 5.1
FREE.STORE (LOCKED.DATA.START, %C000, SYSTEM.SPEC [0]);
FREE.STORE (SST.PT.START, %2000, PAGE.SIZE);
FREE.STORE (LOCKED.CODE.START, %10000, SYSTEM.SPEC [1]);
FREE.STORE (STORE.SIZE.DEPT.DATA.START, %10000,
   NO.OF.PAGES * BITS.PER.STORE.PAGE + 7 ->> 3);
FREE.STORE (%80000, SYSTEM.SPEC [2] - %80000, 0);
@BOX 6.1
END
@END

@TITLE CONSYS.SYS03(52,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS03 CONFIGURATION
@BOX 2.0
SYS03 PARAMETERS
@BOX 3.0
INITIALISATION CODE
@BOX 1.1
:: SYS03 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER DRUM.BLOCK.SIZE = 8192 / PAGE.SIZE,
   SUB.TABLE.SIZE = 16, MAX.SEG.SIZE = 256, DRUM.BLOCK.SIZE.BIT.VEC.SIZE = 2,
   BLOCK.TABLE.ENTRY.SIZE = 4, NO.OF.DRUM.SECTIONS = 1;
LITERAL / INTEGER  NO.OF.BAD.BLOCKS = 0;
LITERAL / INTEGER NO.OF.DISCS = 2;
LITERAL / ADDR BAD.BLOCK.TABLE.ADDR = %F0000;
*GLOBAL 5;
INTEGER SECTOR.SIZE, CLEAR.PAGE.ADDR, SECTOR.BUFF.RA;
ADDR SECTOR.BUFF.VA;
ADDR CORE.TABLE.AREA.VA;
INTEGER32 CORE.TABLE.AREA.RA;
LOGICAL16 BLOCK.AREA.ADDR;
LOGICAL32 TABLE.AREA.ADDR;
ADDR [LOGICAL8] FREE.BLOCKS, FREE.SUB.TABLES;
DATAVEC DRUM.SECTION.AVAILABLE (LOGICAL8);
    1
END
DATAVEC DRUM.SECTION.SIZE (LOGICAL32)
::LOCUST 288288
::WREN 118284
END
DATAVEC DRUM.SIZES (INTEGER32)
::LOCUST    72072
::WREN    59142
END
DATAVEC ALLOCATIONS (INTEGER)
   3200
END
DATAVEC TABLE.AREA.SIZES (INTEGER)
   128
END
DATAVEC SECT.SIZE (INTEGER32)
::LOCUST    256
::WREN    512
   512
END
DATAVEC DISC.PORT (INTEGER32)
::LOCUST    6
::WREN    6
   7
END
DATAVEC DISC.CHANNEL (INTEGER32)
   0
   0
END
DATAVEC DRIVE.SIZE (INTEGER32)
::LOCUST    0
::WREN    59142
   0
END
DATAVEC DISC.VEC (INTEGER32)
::LOCUST    %21B2
::WREN    %2488
   %2188
END
DATAVEC DISC.SIZES (INTEGER32)
::LOCUST 320000
::WREN    236568
   1440
END
DATAVEC MAX.SECTORS (INTEGER32)
%4000
1
END
@BOX 3.1
*CODE 7;
PSPEC INITIALISE.SYS03 ();
#CONSYS.SYS03.1
INITIALISE.SYS03 ();
@END

@TITLE CONSYS.SYS03.1(52,11)
@COL 1S-2T-6T-5R-4R-8F
@FLOW 1-2NO-6NO-5-4-2
@FLOW 2YES-8
@FLOW 6YES-2
@BOX 1.0
INITIALISE SYS03
@BOX 2.0
INITIALISATION COMPLETE?
@BOX 4.0
CREATE POINTERS TO TABLES
@BOX 5.0
SET DRUM INFORMATION
@BOX 6.0
EXCHANGEABLE DISC?
@BOX 8.0
END
@BOX 1.1
PROC INITIALISE.SYS03;
INTEGER DISC.NO, D.SIZE;
ADDR TEMP, RSRVD.AREA;
-1 => DISC.NO;
@BOX 2.1
IF 1 +> DISC.NO = NO.OF.DISCS
@BOX 4.1
MAKE (LOGICAL8, DRUM.SIZES [DISC.NO] / 8 - BLOCK.AREA.ADDR / 8 => D.SIZE,
   DISC.SIZE.DEPT.DATA.START + RSRVD.AREA - LOCKED.DATA.START
   + LOCKED.DATA.SEG.ADDR) =>  FREE.BLOCKS;
D.SIZE +> RSRVD.AREA;
MAKE (LOGICAL8, 1024 / SUB.TABLE.SIZE / 4 * TABLE.AREA.SIZES [DISC.NO] / 8
   => TEMP, DISC.SIZE.DEPT.DATA.START + RSRVD.AREA - LOCKED.DATA.START
   + LOCKED.DATA.SEG.ADDR)  => FREE.SUB.TABLES;
FREE.STORE (DISC.SIZE.DEPT.DATA.START, %10000, RSRVD.AREA + TEMP);
@BOX 5.1
SECT.SIZE [DISC.NO] => SECTOR.SIZE;
ALLOCATIONS [DISC.NO] * 1024 / SECTOR.SIZE
   => TABLE.AREA.ADDR;
TABLE.AREA.SIZES [DISC.NO] * 1024
   + (TABLE.AREA.ADDR * SECTOR.SIZE) / PAGE.SIZE / DRUM.BLOCK.SIZE
   => BLOCK.AREA.ADDR;
%86 * 128 + PAGE.SIZE - 1 ->> PAGE.SHIFT => RSRVD.AREA;
DISC.SIZE.DEPT.DATA.START ->> PAGE.SHIFT + RSRVD.AREA => CLEAR.PAGE.ADDR
    + 1 * PAGE.SIZE => TEMP / SECTOR.SIZE => SECTOR.BUFF.RA;
SECTOR.BUFF.RA * SECTOR.SIZE  - LOCKED.DATA.START
   + LOCKED.DATA.SEG.ADDR => SECTOR.BUFF.VA;
%820000 => CORE.TABLE.AREA.VA;
%60000 => CORE.TABLE.AREA.RA;
2 + RSRVD.AREA * PAGE.SIZE => RSRVD.AREA;
@BOX 6.1
IF DISC.NO > 0
@BOX 8.1
END
@END


@TITLE CONSYS.SYS05(52,9)
@COL 1S
@BOX 1.1

LITERAL / INTEGER NO.OF.UNITS = 2, NO.OF.MT.UNITS = 1, FIRST.MT.UNIT = 0,
   NO.OF.ED.UNITS = 1, ED.BLOCK = 1, FIRST.ED.UNIT = NO.OF.MT.UNITS,
   SYS05.NO.OF.ED.UNITS = NO.OF.ED.UNITS;
LITERAL / INTEGER MAX.MT.TRANSFER = 1, MAX.BLOCKS.MT.XFER = 1,
   MT.PAR = 0;
@END

@TITLE CONSYS.SYS06(52,11)

@COL 1S-2R

@FLOW 1-2

@BOX 1.0
SYS06 CONFIGURATION
@BOX 2.0
SYS06 PARAMETERS
@BOX 1.1
::SYS06 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER INTERACTIVE.TS = 1, BATCH.TS = 1, BATCH.NO = 7,
   CMD.SUS = 4, TERM.SUS = 1, SYS06.TERM.SUS = TERM.SUS, SYS06.KILL.SUS = %FFFE,
   MESSAGE.SUS = 2, SYS06.MESSAGE.SUS = MESSAGE.SUS, SYS06.IO.SUS = 8;
@END
@TITLE CONSYS.SYS10(52,11)

@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS10 CONFIGURATION
@BOX 2.0
SYS10 PARAMETERS
@BOX 1.1
:: SYS10 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER WORKSPACE = -256;
@END
@TITLE CONSYS.SYS11(52,11)

@COL 1S-2R

@FLOW 1-2

@BOX 1.0
SYS11 CONFIGURATION
@BOX 2.0
SYS11 PARAMETERS
@BOX 1.1
::SYS11 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER INITIAL.TIMER = 20, ABORT.CPU = 2,
   TRAPPING.CPU = 10, DEFAULT.CPU = 250, CPU.RUNOUT = 1;
LITERAL / INTEGER SYS11.INITIAL.TIMER = INITIAL.TIMER;
@END
@TITLE CONSYS.SYS12(52,11)

@COL 1S-2R

@FLOW 1-2

@BOX 1.0
SYS12 CONFIGURATION
@BOX 2.0
SYS12 PARAMETERS
@BOX 1.1
::SYS12 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER ILLEGAL.ORDER = 2;
@END

@TITLE CONSYS.SYS13(52,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS13 CONFIGURATION
@BOX 2.0
SYS13 PARAMETERS
@BOX 3.0
SYS13 DATAVECS
@BOX 1.1
:: SYS13 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER PRIVI.UID = 1, PRBS.PER.SEG = 64,
   PRB.SIZE = 1024, NO.OF.SUPS = 3;
LITERAL / LOGICAL32 PZ.PRB.RA = %54000;
@BOX 3.1
DATAVEC SUP.NAME (LOGICAL64)
   "JOB"
   "FILMAN"
   "FLOPPY"
END

*GLOBAL 27;
PSPEC START.PROC ();
DATAVEC SUP.START (ADDR START.PROC)
   JOB
   FILMAN
   FLOPPY
END
*GLOBAL 5;
@END

@TITLE CONSYS.SYS14(52,11)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS14 CONFIGURATION
@BOX 2.0
SYS14 PARAMETERS
@BOX 3.0
SYS14 DATAVECS
   #CONSYS14/1
@BOX 4.0
SEGMENT TABLE INITIALIZATION
@BOX 1.1
:: SYS14 CONFIGURATION
@BOX 2.1
*GLOBAL 5;
LITERAL / INTEGER NO.OF.LOCAL.SEGS = 64, NO.OF.X.SEGS = 32;
LITERAL / INTEGER NO.OF.COMMON.SEGS = 128, NO.OF.SYS.SEGS = 128, NO.OF.INITIAL.S
EGS = 30,
   FIRST.COMMON.SEG = 128;
LITERAL / INTEGER FIRST.X.SEG = 64;
LITERAL / INTEGER NO.OF.INITIAL.DATA.SEGS = 32, PT.SEG = 180;
LITERAL / ADDR SEG.SIZE = %10000, X.SEG.SIZE =  DRUM.BLOCK.SIZE * MAX.SEG.SIZE;
LITERAL / ADDR SYS14.SEG.SIZE = %10000,
   SYS14.X.SEG.SIZE = DRUM.BLOCK.SIZE * MAX.SEG.SIZE;
LITERAL / INTEGER SEG.SHIFT = 16, LOCKED.SIZE = 0;
LITERAL / INTEGER SYS14.SEG.SHIFT = SEG.SHIFT,
   SYS14.PAGE.SIZE = PAGE.SIZE, SYS14.PAGE.SHIFT = PAGE.SHIFT,
   SYS14.NO.OF.LOCAL.SEGS = NO.OF.LOCAL.SEGS, SYS14.NO.OF.SYS.SEGS = NO.OF.SYS.S
EGS,
   SYS14.NO.OF.X.SEGS = NO.OF.X.SEGS,
   SYS14.NO.OF.COMMON.SEGS = NO.OF.COMMON.SEGS, SYS14.FIRST.COMMON.SEG = FIRST.C
OMMON.SEG,
   SYS14.PT.SEG = PT.SEG;
LITERAL / LOGICAL32 PAGE.FIELD = %1FFFFF, PAGE.STATUS = %1800000,
   IN.CORE = %800000, LOCKOUT = %1800000,
   ALTERED = %4000000, VALID = %80000000, PROTECTED = 1,
   SYS14.ON.DRUM = 0;
LITERAL / INTEGER SYS14.IO.BUF.SEG = 0, SYS14.IO.BUF.SEG.2 = 0,
   PAGED.DATA.SEG = 144, PAGED.DATA.MAPPED.SEG = 0,
   PRB.SEG = 148, PRB.MAPPED.SEG = 0, CPRB.MAPPED.SEG = PRB.MAPPED.SEG,
   MBUF.SEG = 152, MBUF.MAPPED.SEG = 0,
   INITIAL.DATA.SEG = 0, INITIAL.DATA.MAPPED.SEG = 0,
   FILE.SEG = 184, FILE.MAPPED.SEG = 0,
   CATALOGUE.MAPPED.SEG = 0, PERMIT.MAPPED.SEG = 0,
   AUL.CORE.SEG = 156, AUL.MAPPED.SEG = 0,
   AUL.INT.MAPPED.SEG = 0, ACCS.MAPPED.SEG = 0,
   RESERVED.BLOCK1 = 1, RESERVED.BLOCK2 = 2;
*GLOBAL 5;
@BOX 3.1
*CODE 7;
-> INIT.SYS14;
*CODE 2;
*GLOBAL 7;
#CONSYS.SYS14/1
*GLOBAL 5;
@BOX 4.1
*CODE 7;
PSPEC INITIALISE.SYS14 ();
#CONSYS.SYS14.1
INIT.SYS14: INITIALISE.SYS14 ();
@END

@TITLE CONSYS.SYS14.1(52,11)
@COL 1S-2R-3R-4R-5R-6F
@FLOW 1-2-3-4-5-6
@BOX 1.0
INITIALISE SYS14
@BOX 2.0
CREATE POINTERS FOR STORE SIZE
DEPENDANT TABLES
@BOX 3.0
CLEAR TABLES
@BOX 4.0
INITIALISE SEGMENTS
@BOX 5.0
INITIALISE STORE DATA FOR PZ PRB
AND INITIAL PAGED DATA
@BOX 6.0
END
@BOX 1.1
PROC INITIALISE.SYS14;
INTEGER SEG, D.ADDR, I, TEMP, K.PER.PAGE, PAGE.NO;
ADDR START;
ADDR [LOGICAL32] STORE;
@BOX 2.1
STORE.SIZE.DEPT.DATA.START + NO.OF.PAGES.BIT.VEC.SIZE
   - LOCKED.DATA.START + LOCKED.DATA.SEG.ADDR => START;
MAKE (SYS14.CMT.TYPE, NO.OF.PAGES, START) => SYS14.CMT;
4 * NO.OF.PAGES +> START;
MAKE (INTEGER8, NO.OF.PAGES, START) => SYS14.USAGE.COUNT;
NO.OF.PAGES +> START;
MAKE (INTEGER16, NO.OF.PAGES, START) => SYS14.LOCKIN;
2 * NO.OF.PAGES +> START;
@BOX 3.1
FOR I < NO.OF.PAGES DO
   0 => ENTRY OF SYS14.CMT^ [I] => SYS14.USAGE.COUNT^ [I];
   1 => SYS14.LOCKIN^ [I];
OD
@BOX 4.1
PAGE.SIZE / 1024 => K.PER.PAGE;
FOR SEG < NO.OF.INITIAL.SEGS DO
   IF VERSION.NO = 0 THEN
      DRUM.ADDRS.1 [SEG] => D.ADDR;
   ELSE
      DRUM.ADDRS.2 [SEG] => D.ADDR;
   FI
   0 => PAGE.COUNT OF SYS14.SST [SEG];
   IF CORE.ADDRS [SEG] /= 0 THEN
      CORE.ADDRS [SEG] / K.PER.PAGE => PAGE.NO
         * CORE.PAGES.PER.PAGE ! VALID ! IN.CORE !> SYS14.SST.PT [SEG];
      14 => SSN OF SYS14.CMT^ [PAGE.NO];
      SEG => BLOCK OF SYS14.CMT^ [PAGE.NO];
   FI
   LIMITS [SEG] / K.PER.PAGE => LIMIT OF SYS14.SST [SEG];
   SEG => SSN OF SYS14.CST [CSN [SEG] - FIRST.COMMON.SEG];
   ACCESS [SEG] => ACCESS OF SYS14.CST [CSN [SEG] - FIRST.COMMON.SEG];
   SYS03.INITIALISE.DRUM.SEGMENT (SEG, D.ADDR / 8, LIMITS [SEG] / K.PER.PAGE,
      PRE.LOADED [SEG]);
OD
FREE.STORE (INIT.PAGE.TABLES.START, %1000, PAGE.SIZE);
FREE.STORE (INIT.PAGE.TABLES.START + %1000, %3000, PAGE.SIZE);
@BOX 5.1
MAKE (LOGICAL32, %7FFF, INIT.PAGE.TABLES.START + REAL.STORE.ADDRESS)
   => STORE;
INIT.PAGE.TABLES.START + %4000 ->> PAGE.SHIFT => TEMP;
TEMP * CORE.PAGES.PER.PAGE ! IN.CORE ! VALID !> STORE^ [0];
6 => SSN OF SYS14.CMT^ [TEMP];
0 => BLOCK OF SYS14.CMT^ [TEMP];
1 => PAGE.COUNT OF SYS14.SST [6];
FREE.STORE (INIT.PAGE.TABLES.START + %4000, %4000, PAGE.SIZE);
INIT.PAGE.TABLES.START + %8000 ->> PAGE.SHIFT => TEMP
FOR I < SYSTEM.SPEC [7] + PAGE.SIZE - 1 ->> PAGE.SHIFT DO
   TEMP + I * CORE.PAGES.PER.PAGE ! IN.CORE ! VALID !> STORE^ [%400 + I];
   5 => SSN OF SYS14.CMT^ [TEMP + I];
   I => BLOCK OF SYS14.CMT^ [TEMP + I];
   0 => SYS14.LOCKIN^ [TEMP + I];
   1 +> PAGE.COUNT OF SYS14.SST [5];
OD
FREE.STORE (INIT.PAGE.TABLES.START + %8000, %8000, SYSTEM.SPEC [7]);
@BOX 6.1
END
@END


@TITLE CONSYS.SYS14/1(52,11)

@COL 1S
@BOX 1.0
DATAVECS FOR SEGMENT TABLE INITIALIZATION
@BOX 1.1
DATAVEC CSN (INTEGER16)
   128 128 132 136
   140 144 148 152
   156 160 164 168
   172 176 180 181
   182 183 184 200
   204 208 209 212
   216 232 236 240
   244 248 255 255
END

DATAVEC LIMITS (INTEGER16)
   0  32 32 64
   64 64 64 64
   16 64 64 64
   16 8  64 64
   64 64 64 20
   64 64 64 64
   64 40 32 64
   32 64 4  64
END
DATAVEC CORE.ADDRS (INTEGER16)
   0   0   0   0
   0   324 320 0
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0
END
DATAVEC ACCESS (LOGICAL8)
   %00 %85 %86 %85
   %8D %86 %86 %86
   %86 %86 %8D %8D
   %80 %8C %86 %86
   %86 %86 %86 %8D
   %8D %8D %8D %8D
   %8D %8D %8D %8D
   %8D %8E %00 %00
END
DATAVEC PRE.LOADED (INTEGER8)
   0 1 1 1
   1 0 0 0
   0 0 1 1
   1 1 0 1
   0 0 0 1
   1 1 1 1
   1 1 1 1
   1 1 1 1
END
*GLOBAL 5;
DATAVEC DRUM.ADDRS.1 (INTEGER)
   0    16   64   128
   224  2000 2064 2128
   2256 2272 360  296
   196  216  0    0
   0    0    2528 432
   456  592  656  520
   872  720  768  800
   944  0    12   112
END
DATAVEC DRUM.ADDRS.2 (INTEGER)
   0    1008 1056 1120
   1216 2000 2064 2128
   2256 2272 1352 1288
   1188 1208 0    0
   0    0    2528 1424
   1448 1584 1648 1512
   1864 1712 1760 1792
   1936 0    12   1104
END
@END

@TITLE CONSYS.SYS15(52,11)

@COL 1S-2R

@FLOW 1-2

@BOX 1.0
SYS15 CONFIGURATION
@BOX 2.0
SYS15 PARAMETERS
@BOX 1.1
::SYS15 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.BUFFERS = 512, MBUFS.PER.SEG = 512,
   RESPONSE.TIME = 300,
   NO.OF.BUFFERS.BIT.VEC.SIZE = NO.OF.BUFFERS + 7 / 8;
@END
@TITLE CONSYS.SYS16(52,11)

@COL 1S-2R

@FLOW 1-2

@BOX 1.0
SYS16 CONFIGURATION
@BOX 2.0
SYS16 PARAMETERS
@BOX 1.1
::SYS16 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.DIRS = 63,
   SYS.MB.FILLER.SIZE = 892, MAX.PERMITTED.USERS = 8,
   NO.OF.REMOTE.DIRS = 8,  NO.OF.SYS.REMOTE.DIRS = 32,
   BLOCK.SIZE = PAGE.SIZE * DRUM.BLOCK.SIZE,
   MAPPED.UMB.TABLE.SIZE = 1,
   DIR.ENTRY.SIZE = %28, USER.MB.ENTRY.SIZE = %1C,
    SYS.MB.START.ADDR = 2616, USER.MB.START.ADDR = 2632;
@END

@TITLE CONSYS.SYS17(52,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS17 CONFIGURATION
@BOX 2.0
SYS17 PARAMETERS
@BOX 3.0
SYS17 DATAVECS
@BOX 1.1
::SYS17 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.CONSUMABLES = 2, NO.OF.REUSABLES = 3, NO.OF.USERS = 128;
LITERAL / INTEGER NO.OF.RESOURCES = NO.OF.CONSUMABLES + NO.OF.REUSABLES;
LITERAL / INTEGER NO.OF.USER.PARAMS = NO.OF.RESOURCES + NO.OF.CONSUMABLES;
LITERAL / INTEGER CPU.TIME = 1, SYS17.FILE.STORE = 5, SYS17.NO.OF.FILES = 4;
LITERAL / INTEGER SYS17.NO.OF.RESOURCES = NO.OF.RESOURCES, SYS17.NO.OF.USER.PARA
MS = NO.OF.USER.PARAMS,
   SYS17.NO.OF.CONSUMABLES = NO.OF.CONSUMABLES, SYS17.NO.OF.REUSABLES = NO.OF.RE
USABLES;
LITERAL / INTEGER SUBORDS = 6, NO.OF.DEFAULT.USERS = 7, SYS17.CPU.TIME = CPU.TIM
E;
LITERAL / INTEGER PRIVI.SYS.UPS.SIZE = NO.OF.CONSUMABLES * 2 + NO.OF.REUSABLES *
 NO.OF.DEFAULT.USERS;
LITERAL / INTEGER AUL.CORE.BLK = 0, AUL.BLK.SIZE = 8, DAILY.LIMIT = 2, MAX.BALAN
CE = %7FFF;
LITERAL / INTEGER AUL.DRUM.SITE.1 = 2600, AUL.DRUM.SITE.2 = 2608;
LITERAL / INTEGER AUL.FILLER.SIZE = 1012, AUL.UPDATE.PERIOD = 60;
@BOX 3.1
DATAVEC PRIVI.USER.NAMES (LOGICAL64)
   "SYSTEM"
   "PRIVI"
   "MU6S"
   "MU6C"
   "MUSM"
   "UTIL"
   "MUSS"
END
DATAVEC PRIVI.USER.PASSWDS (LOGICAL64)
   "MANAGER"
   "LEGED"
   "RULES"
   "X"
   "MSUM"
   "ITIES"
   "X"
END
DATAVEC PRIVI.USER.SUPERS (INTEGER8)
   -1
   0 [6]
END
DATAVEC PRIVI.SYS.UPS (INTEGER)
   ::USER "SYSTEM"
   %7FFF::OUTPUT BAL
   %7FFF::CPUTIME BAL
   %7FFF::OUTPUT INC
   %7FFF::CPUTIME INC
   %7FFF::NO.FILES
   %7FFF::FILESTORE
   %7FFF::SUBORDS
   ::USER "PRIVI"
   %7FFF [4]
   150
   %7FFF [2]
   ::USER "MU6S"
   %7FFF [4]
   150
   %7FFF [2]
   ::USER "MU6C"
   %7FFF [4]
   150
   %7FFF [2]
   ::USER "MUSM"
   %7FFF [4]
   150
   %7FFF [2]
   ::USER "UTIL"
   %7FFF [4]
   150
   %7FFF [2]
   ::USER "MUSS"
   %7FFF [4]
   150
   %7FFF [2]
END
@END

@TITLE CONSYS.SYS18(52,11)

@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS18 CONFIGURATION
@BOX 2.0
SYS18 PARAMETERS
@BOX 3.0
SYS18 DATAVECS
@BOX 1.1
:: SYS18 CONFIGURATION
@BOX 2.1
LITERAL NO.OF.MCS = 16;
@BOX 3.1
DATAVEC MC.CHANNEL (INTEGER)
   %0104 :: MACHINE 0 - 11/34
   %0104 :: MACHINE 1 - VAX
   %0104 :: MACHINE 2 - 11/44
   %0104 :: MACHINE 3 - MU5
   %0004 :: MACHINE 4 - MC68000
   0 [11]
END
DATAVEC MC.NAME (LOGICAL64)
   "PDP34"
   "VAX"
   "PDP44"
   "MU5"
   "MILSTONE"
   0 [11]
END
LITERAL NO.OF.SUP.PROCS = 8;
DATAVEC SUP.PROC.NAME (LOGICAL64)
   "JOB"
   "JOB" "FILMAN"
   "JOB"
   "JOB"
   "JOB"
   0 [2]
END
DATAVEC SUP.MC.NAME (LOGICAL64)
   "PDP34"
   "VAX" "VAX"
   "PDP44"
   "MU5"
   "MC68000"
   0 [2]
END
DATAVEC SUP.SPN (INTEGER)
   %0200
   %0201 %0401
   %0202
   %0203
   %0204
   0 [2]
END
DATAVEC SUP.PID (INTEGER)
   1
   1 2
   1
   1
   1
   0 [2]
END
DATAVEC SUP.CH (INTEGER)
8 [6]
0 [2]
END
@END
@TITLE CONSYS.SYS19(52,11)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS19 CONFIGURATION
@BOX 2.0
SYS19 PARAMETERS
@BOX 3.0
SYS19 DATAVECS
@BOX 4.0
INITIALISE
@BOX 1.1
::SYS19 INITIALIZATION
@BOX 2.1
LITERAL / INTEGER NO.OF.DEVICES = 22, NO.OF.PERI.CHANNELS = 11,
   NO.OF.PERI.REROUTES = 2, NO.OF.PRESET.DEVICES =  3;
LITERAL / INTEGER CONFIG.SIZE = NO.OF.PRESET.DEVICES * 4;
LITERAL /  INTEGER NO.OF.P.DEV.TYPES = 3, NO.OF.DEVICE.CLASSES = 6,
   PERI.BUFF.SIZE = %80;
LITERAL / INTEGER SYS19.NO.OF.DEVICES = NO.OF.DEVICES,
   SYS19.NO.OF.PERI.CHANNELS = NO.OF.PERI.CHANNELS,
   SYS19.OPR.IN.DEV.NO = 1, SYS19.PERI.BUFF.SIZE = PERI.BUFF.SIZE;
LITERAL / INTEGER SYS19.NO.OF.P.DEV.TYPES = NO.OF.PDEV.TYPES;
LITERAL / INTEGER SYS19.TALK.IN.DEVICE.CLASS = 4, SYS19.TALK.OUT.DEV.NO = 0;
LITERAL / INTEGER SYS19.NO.OF.GROUPS = NO.OF.DEVICES - 1 / 16 + 1;
LITERAL / INTEGER SYS19.TALK.OUT.DEVICE.CLASS = 5, SYS19.NO.OF.COMMS.DEVICES = 4
;
LITERAL / ADDR COMMS.BUFFER.VA = %84E000;
LITERAL / LOGICAL32 COMMS.BUFFER.RA = %10000;
::PERI BUFFERS FOLLOW APPENDIX COMMS BUFFERS
LITERAL / ADDR PERI.BUFF.VA = %84E020;
LITERAL / LOGICAL32 PERI.BUFF.RA = %10020;
@BOX 3.1
*CODE  2;
-> L;
*GLOBAL 12;
#CONSYS.SYS19/1
*GLOBAL 5;
L:
LITERAL / INTEGER NO.OF.PERI.PROCS = 8;
DATAVEC PERI.NAME (LOGICAL64)
   "LPT"
   "OPR"
   "LPTVAX"
   "OPRVAX"
   0 [4]
END
DATAVEC PERI.SPN (LOGICAL)
   %0304
   %0304
   %1301
   %1701
   0 [4]
END
DATAVEC DEVICES.PER.P.DEV.TYPE (INTEGER)
   0::EMPTY
   NO.OF.GEM.DEVICES ::GEM INPUT
   NO.OF.GEM.DEVICES ::GEM OUTPUT
END
DATAVEC SYS19.MAX.DATA.TRANSFER (INTEGER)
   %10 ::CHARACTER INPUT
   %400::CHARACTER OUTPUT
   %10 ::COMMUNICATIONS INPUT
   %200::COMMUNICATIONS OUTPUT
END
*GLOBAL 24;
LITERAL PERI.BUFF.AREA.SIZE = PERI.BUFF.SIZE * NO.OF.DEVICES,
   COMMS.BUFF.SIZE = SYS19.NO.OF.COMMS.DEVICES * 8;
LOGICAL8 [COMMS.BUFF.SIZE] COMMS.BUFFERS;
LOGICAL8 [PERI.BUFF.AREA.SIZE] IO.BUFFERS;
*GLOBAL 5;
@BOX 4.1
*CODE 7;
FREE.STORE (IO.BUFF.START, %10000, OVERRUN.AREA.SIZE
   + COMMS.BUFF.SIZE + PERI.BUFF.AREA.SIZE);
@END
@TITLE CONSYS.SYS19/1(52,11)

@COL 1S
@BOX 1.0
CONFIG TABLE
@BOX 1.1
::DEVICE CLASSES ARE:
::0 = CHAR.IN, 1 = CHAR.OUT, 2 = COMMS.IN, 3 = COMMS.OUT
::4 = TALK.IN, 5 = TALK.OUT
DATAVEC CONFIG.TABLE (LOGICAL32)
:: LOGICAL.DEV.ID        PHYSICAL.DEV.ID        PHYSICAL.DEV.MODE   PAIR DEV NO
       %00502                 %0000                   %00000             %F(8)
       %1002C                 %0100                   %148F1             2
       %1012E                 %0201                   %14830             1
END
@END

@TITLE CONSYS.SYS20(52,11)
@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
SYS20 CONFIGURATION
@BOX 2.0
SYS20 PARAMETERS
@BOX 4.0
INITIALISE PROCESS ZERO PRB
@BOX 1.1
::SYS20 INITIALIZATION
@BOX 2.1
LITERAL / INTEGER NO.OF.TASKS = 9;
LITERAL / INTEGER IO.BUF.SEG = 0, IO.BUF.BLK = 1, IO.MSEG = 1;
PSPEC TASK.PROC ();
PSPEC LIB10.SET.UP.TASK ();
DATAVEC TASK.PROCS (ADDR TASK.PROC)
   SYS03.DRUM.TASK
   SYS17.INIT.ACCOUNTS.TASK
   SYS16.INIT.FILE.TASK
   SYS16.FILE.TASK
   SYS07.IO.TASK
   SYS19.INIT.DEV.TASK
   LIB10.SET.UP.TASK
   SYS13.TERM.PROC.TASK
   SYS13.INIT.SUP.TASK
END;
LITERAL / LOGICAL SYS20.DRUM.TASK = %8000, SYS20.INIT.ACCOUNTS.TASK = %4000,
   SYS20.INIT.FILE.TASK = %2000, SYS20.FILE.TASK = %1000,
   SYS20.IO.TASK = %0800, SYS20.INIT.DEV.TASK = %0400,
   SYS20.SET.UP.TASK = %0200, SYS20.TERM.PROC.TASK = %0100,
   SYS20.INIT.SUP.TASK = %80;
*GLOBAL 27;
DATAVEC LIB.TASK.PROCS (ADDR TASK.PROC)
   SET.UP
END
*GLOBAL 5;
*CODE 4;
PROC LIB10.SET.UP.TASK;
ADDR TASK.PROC T.PROC;
   LIB.TASK.PROCS [0] => T.PROC;
   T.PROC^ ();
END
@BOX 4.1
*CODE 7;
PSPEC INITIALISE.SYS20 ();
INITIALISE.SYS20 ();
SYS20.SET.TASK (SYS20.SET.UP.TASK, 0);
PROC INITIALISE.SYS20;
INTEGER I;
ADDR TASK.PROC TSK.PROC;
ADDR [ADDR] PZ.REGS;
ADDR SYS14.SEG.VARS PZ.SEG.VARS;
   MAKE (ADDR, 21, REAL.STORE.ADDRESS + PZ.PRB.RA) => PZ.REGS;
   BYTE (^SYS20.TASK.LOOP => TSK.PROC) => PZ.REGS^ [3];
   %1F00 => PZ.REGS^ [18] => PZ.REGS ^ [19];
   %10000 => PZ.REGS^ [0]; :: 1 => DUMPED.V.EXEC.MC.CONTROL!
   MAKE (SYS14.SEG.VARS, 0, SYS13.INT.GET.PRB (14) + PZ.PRB.RA) => PZ.SEG.VARS;
   9 => SSN OF LST [0] OF PZ.SEG.VARS^;
   %8E => ACCESS OF LST [0] OF PZ.SEG.VARS^;
END
@END


@TITLE CONSYS.SYS21(52,11)

@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS21 CONFIGURATION
@BOX 2.0
SYS21 PARAMETERS
@BOX 1.1
:: SYS21 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.STATS = 22;
@END

@TITLE CONSYS.SYS23(52,11)

@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS23 CONFIGURATION
@BOX 2.0
SYS23 PARAMETERS
@BOX 1.1
::SYS23 CONFIGURATION
@BOX 2.1
LITERAL NO.OF.OP.PARAMS = 16;
@END

