@X @~
~L3 COUK1247
80
~V7 56 2 -5
~D10
~H                       MUSS
~
~
~HAPPENDIX15
~D18
~M~OMOTOROLA CONFIGURATION
~D7
~MUNIVERSITY OF MANCHESTER~
~V9 -1
~P
~V9 1
~D10
~S1~MAppendix 15  CONTENTS~
~
~
~M Introduction~
~
~M CONSYS51 -  System Configuration (ATV, PTV, DTV)~
~
~N CONSYS52 -  System Configuration (Gemstone)~
~
~N CONLIB   -  Library Compile Jobs~
~
~N CONLIB52 -  Library Configuration (PTV, DTV, Gemstone)~
~V9 -1
~P
~S1~M~OIntroduction
~BThis Manual is concerned with the compilation and
configuration of the Motorola implementation of MUSS.  The
jobs streams for the compiling the 'SYS' files are
in CONSYS51 and CONSYS52 and those for compiling the 'LIB' files
are in CONLIB.  Job streams for other components
are normally kept with the first module, e.g. in
NMSL011 for MUSL.
~BA MUSS system is compiled in a series of compile jobs and the
linkage between the sections which are separately compiled is
mainly through the library mechanism. The only exceptions are that
the addresses of some library procedures (e.g. JOB) must be known
to the 'SYS' part of MUSS, and some linkages are made dynamically. For the first
 special linkage the 'SYS'
compilation assumes that a DATAVEC containing the addresses
of the library procedures in question will be placed at
a fixed address in the Library segment.
Dynamic linkage of a restricted form is possible through the
library procedure LINK and this is used by some independent
sections of library to link into other sections e.g. to link DRAW to the graphic
s procedures.
~BThe composition of the library in the version of MUSS being compiled
(the target system) may in general be different from that in the
system running the compilation (the host system). Also it is
necessary to avoid compiling linkages to the libraries of the
host system. Thus the first stage in compiling
a MUSS system is to compile the Library Interface module
(LIB02) of the target system, to be used as a library
on the compiling system. Next with this library open a suitable
MUTL can be compiled as a library (MUTLX), and with these two
libraries open, a suitable MUSL compiler (MUSLX) can be compiled.
These versions of MUSL and MUTL are known as the cross compiling
versions (hence the 'X') since they compile code which is not to be
run only with the target system, and maybe on a machine different to the host ma
chine.
For every machine for which cross compilations are required there must
be a version of MUTLX AND LIB02X e.g. MUSLX3,  MUTLX3 and LIB02X3 for VAX
and MUSLX5,  MUTLX5 and LIB02X5 for the MC68000. Like the MUSLX library these
should run with any version of MUSS on the given system, and when changes
are introduced which lead to incompatible library interfaces in different
versions of MUSS on a given machine some care will be needed to
compile the changes through all versions of MUSS.
When the above three libraries exist a basic MUSS system is
cross compiled in the following stages~
~3
~U 10
~
          SYSTEM COMPILATION
          I/O LIBRARY COMPILATION
          BASIC UTILITIES COMPILATION
          MATHFN COMPILATION
          MUTL COMPILATION
          MURD COMPILATION~
          MUSL COMPILATION
          DOCUMENTATION FACILITIES COMPILATION
          GRAPHICS/COMPILER UTILITIES COMPILATION
~0
~
~
A system created in this way has the ability to run jobs which
compile (rather than cross-compile) the rest of the system,
providing they use only the MUSL language.  The PASCAL compiler, which is
written in PASCAL has to be compiled using a cross compiling PASCAL
compiler as described below.
~BThe separate set of the basic compile jobs which is required for each
version of MUSS on a given system differ in a systematic
way, in that the version number appears in certain file names.
The command sequences to form the compile jobs which are given with the MUSS sou
rce contain '?' wherever the
version number is to be included.
Similarly '\' is used wherever the target machine number is to appear.
Another way in which some parameterisation of the compilation
command sequences is achieved, is that some commands have
comments such as '*FOR MC3'.  In the compilation for machine 3
(VAX) these comments are removed, whereas in the compilation for
another machine the complete line containing this comment is removed.
Actual compile jobs which edit out and run these
command sequences are normally kept under the user code MUSM
(or MUSM followed by a machine number the jobs which relate
to a different target machine).
The complete sequence of jobs needed to recompile MUSS
are as follows.~
~S1~OCompiling the Basic System
~BThe first three jobs in this group compile private libraries which are
then used by the remainder, to compile the binary files for the main
common segments of the MUSS system. These common segments are the ones
which are duplicated in the two versions of MUSS (V1 and V2) on the
disc. The final job updates the actual common segments from the new
binary files. At this point the newly compiled system will run and
(with the possible exception of PASCAL) is capable of running the
compile jobs in group 2, although normally these jobs will also be run
on the current system so that a clean change over can be made to a
complete new system. In fact if the library structures are compatible
a new basic system can be run using the previous versions of the
common segments created in group 2.
~T% 31
~
~
%CL2X5~
%CMTLX5~
%CMSLX~
%CSYS5v~
%CLIB5v~
%CMFN5v~
%CMTL5v~
%CMRD5v~
%CMSL5v~
%CDOC5v~
%CCWU5v~
%UPDATE5v~
~
This complete set of jobs can be input by the command~
~
%IN CJOBS5v
~BOnce a version of MUSS has been created any individual component
can be recompiled and updated providing it does not include new
library procedures.
~S1~OCompiling the System Superstructure
~BThese compile jobs produce the binary files for the common segments
which are shared between the two versions of MUSS, and some libraries
which are vital to the maintenance of the system. The former mainly
contain the high level language facilities, and the latter are mainly
concerned with cross compiling the system for other machines.
~
~
~MCCWUv~
%CFIO5v~
%CFTN5v~
%CPIOX5~
%CPASX~
%CPIO5v~
%CPAS5v~
%CMUC5v~
%UPDATEC~
%CTLC5v~
%CTLB5v~
%CTLP5v~
%CRDP5v~
%CSLP5v~
%CMBL5v~
~V9 -1
~P
~D10
~H                    MUSS
~
~
~D10
~HCONSYS        51
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL
~
~
                                                             ISSUE 11~
~V9 -1
~P
~V9 1
~YCONSYS51
~X%|
~S1~M~OAP5 IMPLEMENTATION DESCRIPTION~
~S1~M~OSystem Configuration  Version 1~
~S1~OSystem Configuration - All MU 68000s~
~S1~O1. General Description
~BThis configuration module applies to the following systems in use at
Manchester University~
~
~MATV - MC68000 with MMU, Graphics board and Disc control
~NPTV - MC68010 with MMU, ECD and disc controlled through PIT
~NDTV - MC68010 with MMU, ECD and DMA for Disc control.
~BEdits in the initial compile job stream select the appropriate
module options.  Other edits in the main job stream of this module
select minor configuration options such as RAM size and number of
COMMs lines.
~S1~O2.1 Allocation of Segments~
~3
~
~
Common Segment Number  System Segment Number  Use~
    -                  0                      Blank~
   32                  1                      Locked system code~
   33                  2                      Locked system data~
   34                  3                      Paged system code~
                                              (Command level code~
                                               + task code)~
   35                  4                      Basic Library~
   36                  5                      Paged system data~
   37                  6                      PRB's~
   38                  7                      Message buffers~
   39                  8                      AUL~
   40                  9                      Process zero~
                                              stack segment~
   41                  10                     Documentation Utilities~
   42                  11                     Complier Writer~
                                               Utilities~
   43                  12                     Initialization code~
   44                  13                     Basic system Directory~
   45                  14                     Page Table segments~
   46                  15                     FILESEG1~
   47 - 49             16 - 18                Spare~
~
   50                  19                     Math functions~
   51                  20                     MURD~
   52                  21                     MUTL~
   53                  22                     MUSL~
   54                  23                     Basic utilities~
   55                  24                     Floppy manager~
   56                  -                      MUSS C Utilities~
   57                  -                      UNIX Shell~
   58                  27                     FIO~
   59                  28                     PIO~
   60                  29                     BIO~
   61                  30                     CIO~
   62                  31                     Graphics pixel store~
    -                  32                     Disc copy facility~
    -                  33                     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~
~
12 - 15                      Disc copy utility~
~
~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)~
  940 -   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)~
 1932 -  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 32 and 33.
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~
%80000   -        %C00 bytes           Interrupt vectors~
                                       and ROM workspaces~
%80C00   %840C00  see SYSTEM.SPEC      Locked data~
                                       (TLSEG 3 in SYS compile)~
%8E000   %84E000  1 page               SST PT (see CONSYS.SYS14)~
%90000   %850000  depends on number    I/O buffers~
                  of I/O devices       (see CONSYS.SYS19)~
%A0000   %860000  depends on core      Store size dependent tables~
                  size                 (see CONSYS.SYS02 & CONSYS.SYS14)~
%B0000   %870000  depends on disc      Disc size dependent tables~
                  size                 (see CONSYS.SYS03)~
%C0000   %800000  see SYSTEM.SPEC      Locked code~
                                       (TLSEG 1 in SYS compile)~
%D0000   -        2 pages              Initial page tables~
                                       (see CONSYS.SYS14)~
%D4000   -        1 page               Process zero PRB~
                                       (see CONSYS.SYS14)~
%D8000   -        see SYSTEM.SPEC      Initial paged data~
                                       (see CONSYS.SYS14)~
%E0000   -        %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~
         SCC workspace pointer~
         APP LINK (used by CPU appendix)~
         FIXED ADDRESS (used by CPU appendix)~
         SAVE LINK (used by CPU appendix)~
         Three spare workspace pointers~
         padding (!)~
         Interrupt Level Activity Stacks~
         REGISTER STACK (used to save registers on interrupt)~
~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 PAGED 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 %20000~
LIB MTLX\~
LIB MSLX~
LIB L2X\~
OPENDIR MUSMS~
ED MU6S:CONSYS\1~
(FD/::SYSTEM3 /)EED          **FOR PTV**~
(FD/::SYSTEM4 /)EED          **FOR DTV**~
(FD/::SYSTEM1 /)EED          **FOR ATV**~
(FD/::1K PAGE /)E~
FLIP 0 1~
CONSYS~
**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 %870000 -1 0~
**TLSEG 5 %4000 %E0000 -1 0~
**TLSEG 6 %100 %8C0606 -1 0~
**TLSEG 7 %1400 %850000 -3 0~
**TLSEG 8 %4000 %900000 -1 0~
**TLSEG 9 %400 %84E000 -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~
ED MU6S:AP5011   **FOR ATV**~
ED MU6S:AP5012       **FOR PTV**~
ED MU6S:AP5012      **FOR DTV**~
(FD/::1K PAGE /)E~
FLIP 0 1~
AP501~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:AP5021 1 **FOR ATV**~
FLIP MU6S:AP5025 1 **FOR PTV**~
FLIP MU6S:AP5024 1 **FOR DTV**~
AP502~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
FLIP MU6S:AP1031 1~
AP103~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
ED MU6S:AP5041             **FOR ATV**~
(FD/::SYSTEM1 /)E          **FOR ATV**~
FLIP 0 1                   **FOR ATV**~
FLIP MU6S:AP5041 1         **FOR DTV**~
FLIP MU6S:AP5041 1         **FOR PTV**~
AP504.SCC~
**DI 4 0~
MUSL %0 %0 %F00~
**SELECTINPUT 4~
DEL~
MUSL %0 %0 %F00~
MODULE (V.MT.CONTROL, V.MT.COUNT, V.MT.ADDRESS);
VSTORE V.MT.CONTROL [1] %F(8);
VSTORE V.MT.COUNT [1] %F(8);
*VTYPE LOGICAL32;
VSTORE V.MT.ADDRESS [1] %F(8);
*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:SYS051 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\?~
~S14.2 ROM Compile~
::BEGIN CROM FOR PAGED MACHINES~
DO 0 ROM5LOGS %200~
LIB MTLX5~
LIB MSLX~
LIB L2X5~
OUTFN AP5111~
ED MU6S:AP5111 0         *FOR ATV*~
(FD/::ATV/)E                *FOR ATV*~
FLIP 0 1                    *FOR ATV*~
FLIP MU6S:AP5111 1     *FOR PTV*   *FOR DTV*~
AP511~
DEFINE.INPUT 4 0~
MUSL %0 BROM5 %70B~
*INFORM %2400;~
**TLSEG 0 %2000 %0 -1 0~
**TLSEG 1 %1000 %81800 -1 0~
**TLSEG 2 %0 %80000 -3 0~
**TLSEG 4 %0 %90000 -3 0~
**TLSEG 5 %200 %80000 -1 0~
**TLSEG 8 %0 %40000 -3 0       *FOR ATV*~
**TLSEG 9 %0 %60000 -3 0      *FOR ATV*~
*TLLOAD 1 2;~
*TLLOAD 2 3;~
*TLLOAD 4 5;~
*TLLOAD 5 6;~
*TLLOAD 8 8;      *FOR ATV*~
*TLLOAD 9 9;      *FOR ATV*~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
MUSL %0 %0 %F0B~
MODULE (NO.V1.SEGS, NO.V2.SEGS, SYS14.PAGE.SHIFT, MUSS.ROM.START,~
        V1.DISC.ADDR, V1.CORE.ADDR, V1.TRAN.SIZE,~
         V2.DISC.ADDR, V2.CORE.ADDR, V2.TRAN.SIZE, OLAY.ADDR);~
LITERAL NO.V1.SEGS = 4, NO.V2.SEGS = 4, SYS14.PAGE.SHIFT = 10;~
LITERAL / ADDR MUSS.ROM.START = %40000, OLAY.ADDR = %81800;~
*GLOBAL 1;~
DATAVEC V1.DISC.ADDR (ADDR)~
   64 16 196 112~
END~
DATAVEC V1.TRAN.SIZE (LOGICAL)~
   29 40 16 16~
END~
DATAVEC V1.CORE.ADDR (ADDR)~
   %80C00 %C0000 %E0000 %D8000~
END~
DATAVEC V2.DISC.ADDR (ADDR)~
   1056 1008 1188 1104~
END~
DATAVEC V2.TRAN.SIZE (LOGICAL)~
   29 40 16 16~
END~
DATAVEC V2.CORE.ADDR (ADDR)~
   %80C00 %C0000 %E0000 %D8000~
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)~
   48~
END~
LITERAL SUPP.OPTIONS = 1~
*END~
FLIP MU6S:AP512? 1~
AP512~
DEFINE.INPUT 4 0~
MUSL %0 %0 %F0B~
*INFORM %2400;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
ED MU6S:SYS501~
(FD-::SMS-)E~
FLIP 0 1~
SYS50~
DEFINE.INPUT 4 0~
MUSL %0 %0 %F0B~
*INFORM %2400;~
**SELECTINPUT 4~
ENDINPUT 4~
DEL~
MUSL 0 0 %F0B~
MODULE (SERVICE.ROUTINE);~
*CODE 2;~
PSPEC SERVICE.ROUTINE ();~
PROC SERVICE.ROUTINE;~
END~
*END~
ED MU6S:SYS511~
(FD/::PTV/)E~
FLIP 0 1~
SYS51~
DI 4 0~
MUSL %0 %0 %B0B~
**TLSEG 6 %1000 %81800 -1 0~
**TLSEG 7 %4000 %90000 -1 0~
*TLLOAD 6 6;~
*TLLOAD 7 7;~
*CODE 6;
**SI 4~
EI 4~
DEL BROM5~
DEL BROM510~
DEL BROM520~
~
STOP~
::END~
~Y
~V9 -1
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H     CONSYS        51
~V9 -1
~F
@TITLE CONSYS(51,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 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 = %80000;
@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 :: SCC WORKSPACE POINTER
   0 :: APP.LINK
   0 :: FIXED.ADDRESS
   0 :: SAVE.LINK
   0 :: INPUT CHARACTER TABLE PTR
   0 :: SCC CSR'S PTR
   0 :: OUTPUT CHARACTER TABLE PTR
   0 :: CST PTR
   0 :: LST PTR
   0 :: DESCRIPTOR PTR
   0 :: SST PT PTR
   0 :: ADDRESS SPACE PTR
   0 :: FIXED ADDRESS 2
   0 :: INTERRUPT TRAP
   0 0 :: INTERRUPT PROCEDURE TABLE PTR
   0 :: V.VM.TIMER
   0 :: V.BUS.ERRORS
   0 :: RAW.USER.TIME
   0 :: REAL.TIME
   0 [2]
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)
   %80000 :: STORE SIZE (IN BYTES)
   %0000 :: DISC 0: DRIVE NO./TYPE
   %0203 :: 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
::1K PAGE LITERAL / INTEGER PAGE.SIZE =1024, PAGE.SHIFT = 10,
::2K PAGE LITERAL / INTEGER PAGE.SIZE = 2048, PAGE.SHIFT = 11,
::4K PAGE LITERAL / INTEGER PAGE.SIZE = 4096, PAGE.SHIFT = 12,
    BITS.PER.STORE.PAGE = 76;
LITERAL / ADDR LOCKED.DATA.START = 0, 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,
   PAGED.DATA.SEG.ADDR = %900000;
*CODE 7;
*GLOBAL 5;
#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.2
#CONSYS.SYS20.3
#CONSYS.SYS21
#CONSYS.SYS23
@BOX 6.1
*END
@END



@TITLE CONSYS/1(51,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 SCC.I.CONTROL (INTEGER, INTEGER, ADDR, INTEGER, LOGICAL32) / LOGICAL32;
PSPEC SCC.O.CONTROL (INTEGER, INTEGER, ADDR, INTEGER, LOGICAL32) / LOGICAL32;
PSPEC EMPTY.ACTIVITY ();
PSPEC SET.BIT (ADDR [LOGICAL8], INTEGER);
PSPEC SYSTEM.ERROR.INTERRUPT (INTEGER);
PSPEC FAULT.INTERRUPT (INTEGER);
PSPEC CMD.ENTRY.EXIT.INTERRUPT (INTEGER);
PSPEC ENTER.INT.LEVEL.INTERRUPT (INTEGER);
PSPEC TICKER.INTERRUPT (INTEGER);
PSPEC BUS.ERROR.INTERRUPT (INTEGER);
PSPEC Q.DISC.INT (INTEGER);
PSPEC ED.POLL ();
@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.ESM.TASK ();
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 [32] 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 [32] 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.MANAGER ();
PSPEC SET.UP ();
@END
@TITLE CONSYS/2(51,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.PARS,
   REAL.STORE.ADDRESS, RESERVED.STACK.BOTTOM, RESERVED.STACK.TOP, TICKS.PER.SECO
ND,
   NO.OF.SCCS, NO.OF.SCC.CHANNELS, NO.OF.SCC.DEVICES,
   I.CH.TABLE, O.CH.TABLE, WRITE.PROCS, POLL.PROCS, SCC.WR0.ADDRS,
   OVERRUN.SIZE, OVERRUN.AREA.SIZE,
   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,
   DRIVE.NO, DISC.TYPE, DEV.FM, NO.OF.DRUM.SECTIONS, OFFSET,
   DRUM.SECTION.SIZE, DRUM.SECTION.AVAILABLE, DRUM.OFFSET,
   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, SYS20.ESM.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(51,9)

@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 = 20;
@BOX 4.1
*CODE 7;
#CONSYS.APP/2
#CONSYS.APP/1
PSPEC APP.INITIALIZE ();
APP.INITIALIZE ();
PROC APP.INITIALIZE;
INTEGER PTR;
ADDR [ADDR] SYS.SPEC;
*VTYPE LOGICAL16;
VSTORE INT.VEC.TABLE [256] %80000;
*VTYPE LOGICAL;
VSTORE INT.TRAP %840C3A
VSTORE OLD.VERSION.NO %A0000;
OLD.VERSION.NO => VERSION.NO;
::SYSTEM4 *VTYPE LOGICAL8;
::SYSTEM4 VSTORE V.DMAC.CSR %2900;
::SYSTEM4 VSTORE V.DMAC.CPR %292D;
::SYSTEM4 VSTORE V.DMAC.GCR %29FF;
FOR PTR < 64 DO
%4EF9 => INT.VEC.TABLE [PTR * 3];
%0084 => INT.VEC.TABLE [PTR * 3 + 1];
%0C3A => INT.VEC.TABLE [PTR * 3 + 2];
OD
%4E4F => INT.TRAP;
::SYSTEM4 0 => V.DMAC.CPR => V.DMAC.GCR;
::SYSTEM4 %F2 => V.DMAC.CSR;
END
@END

@TITLE CONSYS.APP/1(51,10)

@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

::SYSTEM1 LITERAL / INTEGER NO.OF.SCCS = 2;
::SYSTEM2 LITERAL / INTEGER NO.OF.SCCS = 2;
::SYSTEM3 LITERAL / INTEGER NO.OF.SCCS = 5;
::SYSTEM4 LITERAL / INTEGER NO.OF.SCCS = 5;
LITERAL / INTEGER NO.OF.SCC.CHANNELS =  2 * NO.OF.SCCS, NO.OF.SCC.DEVICES = NO.O
F.SCC.CHANNELS * 2;
LITERAL / INTEGER OVERRUN.SIZE = %80,
   OVERRUN.AREA.SIZE = OVERRUN.SIZE * NO.OF.SCC.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]   %28  0   %40   0 [243]
END
DATAVEC SCC.WR0.ADDRS (ADDR)
%02741
%02751
::SYSTEM3 %02761 %02771 %02781
::SYSTEM4 %02761 %02771 %02781
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
   SCC.I.CONTROL
   SCC.O.CONTROL
END
PSPEC DUMMY.POLL.PROC ();
DATAVEC POLL.PROCS (ADDR DUMMY.POLL.PROC)
   ED.POLL
   DUMMY.POLL.PROC [2]
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;
BYTE (^I.CH.TABLE) => I.CH.TABLE.PTR;
BYTE (^O.CH.TABLE) => O.CH.TABLE.PTR;
END
@END
@TITLE CONSYS.APP/2(51,11)

@COL 1S-2R-6R-7R-3F

@FLOW 1-2-6-7-3

@BOX 1.0
INITIALISE MMU
@BOX 2.0
DECLARATIONS
@BOX 3.0
END
@BOX 6.0
SET UP PAR FOR MMU
@BOX 7.0
SET UP REST OF LOCKED PARS
@BOX 1.1
::INITIALISE MMU
BEGIN
@BOX 2.1
*VTYPE LOGICAL8;
VSTORE V.AST.UD %FFFFC2;
VSTORE V.AST.UP %FFFFC4;
VSTORE V.AST.SD %FFFFCA;
VSTORE V.AST.SP %FFFFCC;
VSTORE V.AST.IA %FFFFCE;
*VTYPE LOGICAL16;
VSTORE V.LBA %FFFFE0;
VSTORE V.LAM %FFFFE2;
VSTORE V.PBA %FFFFE4;
*VTYPE LOGICAL8;
VSTORE V.ASN %FFFFE6;
VSTORE V.SR %FFFFE7;
VSTORE V.ASM %FFFFE8;
VSTORE V.DP %FFFFE9;
VSTORE V.READ.PAR %FFFFF1;
VSTORE V.LOAD.PAR %FFFFFF;
@BOX 3.1
END
@BOX 6.1
*#%4FF9 %000F %0000; ::LEA %F0000, A7
*#%4E4F; ::TRAP 15
:: SET UP PAR FOR MMU SEG
30 => V.DP;
%FFFC => V.LBA => V.LAM => V.PBA;
%80 => V.ASN;
%9F => V.ASM;
1 => V.SR;
V.LOAD.PAR;
::RESET PAR 31 FOR REAL STORE BELOW %100000
31 => V.DP;
0 => V.LBA => V.PBA;
%8000 => V.LAM;
%80 => V.ASN;
%9F => V.ASM;
1 => V.SR;
V.LOAD.PAR;
:: SET UP AST ENTRIES FOR SYSTEM
%E0 => V.AST.UD => V.AST.UP => V.AST.IA
   => V.AST.SP => V.AST.SD;
@BOX 7.1
PSPEC INIT.MMU ();
INIT.MMU ();
PROC INIT.MMU;
INTEGER I;
::SYSTEM3  LITERAL NO.OF.LOCKED.PARS = 2;
::SYSTEM1  LITERAL NO.OF.LOCKED.PARS =3;
::SYSTEM4  LITERAL NO.OF.LOCKED.PARS =2;
DATAVEC LOCKED.PARS (LOGICAL8)
::PAR  LBA      LAM      PBA      ASN  ASM  SSR
   29  %80 %00  %FC %00  %0C %00  %40  %40  %03 :: CODE SEG
   28  %84 %00  %FC %00  %08 %00  %40  %40  %01 :: DATA SEG
::SYSTEM1 27 %F8 %00 %FC %00 %04 %00 %20 %A0 %01 ::GRAPHICS RAM
END
-1 => I;
FOR NO.OF.LOCKED.PARS DO
   LOCKED.PARS [1 +> I] => V.DP;
   LOCKED.PARS [1 +> I] <<- 8 ! LOCKED.PARS [1 +> I] => V.LBA;
   LOCKED.PARS [1 +> I] <<- 8 ! LOCKED.PARS [1 +> I] => V.LAM;
   LOCKED.PARS [1 +> I] <<- 8 ! LOCKED.PARS [1 +> I] => V.PBA;
   LOCKED.PARS [1 +> I] => V.ASN;
   LOCKED.PARS [1 +> I] => V.ASM;
   LOCKED.PARS [1 +> I] => V.SR;
   V.LOAD.PAR;
OD
END
@END

@TITLE CONSYS.SYS01(51,10)

@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS01 CONFIGURATION
@BOX 2.0
SYS01 PARAMETERS
@BOX 4.0
INITIALIZE 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 INITIALIZE.SYS01 ();
INITIALIZE.SYS01 ();
PROC INITIALIZE.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(51,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,
::1K PAGE    LOG.MAX.SIZE = 2;
::2K PAGE    LOG.MAX.SIZE = 3;
::4K PAGE    LOG.MAX.SIZE = 4;
*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(51,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, %E000, 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);
@BOX 6.1
END
@END

@TITLE CONSYS.SYS03(51,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 = 32, MAX.SEG.SIZE = 256, DRUM.BLOCK.SIZE.BIT.VEC.SIZE = 2,
   BLOCK.TABLE.ENTRY.SIZE = 4, NO.OF.DRUM.SECTIONS = 2;
LITERAL / INTEGER  NO.OF.BAD.BLOCKS = 0;
LITERAL / INTEGER NO.OF.DISCS = 3,  NO.OF.DISC.TYPES = 5;
LITERAL / ADDR BAD.BLOCK.TABLE.ADDR = %F0000;
*GLOBAL 5;
INTEGER [NO.OF.DISCS] DRIVE.NO, DISC.TYPE, DEV.FM;
INTEGER SECTOR.SIZE, CLEAR.PAGE.ADDR, SECTOR.BUFF.RA;
ADDR SECTOR.BUFF.VA;
ADDR CORE.TABLE.AREA.VA;
INTEGER32 CORE.TABLE.AREA.RA;
LOGICAL32 DRUM.OFFSET;
LOGICAL16 BLOCK.AREA.ADDR;
LOGICAL32 TABLE.AREA.ADDR;
ADDR [LOGICAL8] FREE.BLOCKS, FREE.SUB.TABLES;
LOGICAL8 [NO.OF.DRUM.SECTIONS] DRUM.SECTION.AVAILABLE;
LOGICAL32 [NO.OF.DRUM.SECTIONS] DRUM.SECTION.SIZE, OFFSET;
DATAVEC DRUM.SIZES (INTEGER)
   32760  ::4096 * 32 - 32 / 1K
   6072 10168
END
DATAVEC ALLOCATIONS (INTEGER)
   2700
   2680 2680
END
DATAVEC TABLE.AREA.SIZES (INTEGER)
   128
   64 64
END
DATAVEC SECTOR.SIZES (INTEGER)
   256
   128 [2]
   256 [2]
END
DATAVEC OFFSETS (LOGICAL32)
   0 0
   0 4032
   0 224
END

DATAVEC DISC.CONFIG (LOGICAL8)
::DISC PRESENT  DISC TYPE   DRIVE NO.
   1            0            0
   0            0            0
   1            2            2

   1            3            1
   1            4            1
   1            3            0

   1            3            1
   1            3            0
   0            0            0
END
DATAVEC SECTION.SIZES (LOGICAL32)
   131040  0
   20448   3840
   20448   20224
END
   DATAVEC DISC.0 (LOGICAL8)
   %C0 %00 %01 %FF %07 %1F
END
DATAVEC DISC.1 (LOGICAL8)
   %C0 %00 %01 %FF %03 %1F
END
DATAVEC DISC.2 (LOGICAL8)
   %C0 %43 %00 %4C %00 %19
END
DATAVEC DISC.3 (LOGICAL8)
   %C0 %41 %00 %4C %01 %19
END
DATAVEC DISC.4 (LOGICAL8)
   %C0 %43 %00 %4C %01 %19
END
DATAVEC DISC.5 (LOGICAL8)
   %C0 %41 %00 %4C %00 %19
END
DATAVEC DISC.INIT (ADDR [LOGICAL8])
   DISC.0 DISC.1 DISC.2
   DISC.3 DISC.4
END
DATAVEC DEV.FM.VALUES (INTEGER)
   0 0
   0 0
   0
END
@BOX 3.1
*CODE 7;
PSPEC INITIALISE.SYS03 ();
#CONSYS.SYS03.1
INITIALISE.SYS03 ();
@END

@TITLE CONSYS.SYS03.1(51,11)
@COL 1S-2T-3R-6T-5R-4R-8F
@FLOW 1-2NO-3-6NO-5-4-2
@FLOW 2YES-8
@FLOW 6YES-2
@BOX 1.0
INITIALISE SYS03
@BOX 2.0
INITIALISATION COMPLETE?
@BOX 3.0
NOTE DISC TYPE AND DRIVE NUMBER
@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, D.TYPE, START;
ADDR TEMP, RSRVD.AREA;
-1 => DISC.NO;
@BOX 2.1
IF 1 +> DISC.NO = NO.OF.DISCS
@BOX 3.1
BOOT.DISC.TYPE * NO.OF.DISCS + DISC.NO * 3 => START;
IF DISC.CONFIG [START] /= 0 THEN
   DISC.CONFIG [START + 1] => DISC.TYPE [DISC.NO]
     => D.TYPE;
   DISC.CONFIG [START + 2] => DRIVE.NO [DISC.NO];
   DEV.FM.VALUES [D.TYPE] => DEV.FM [DISC.NO];
   IF DISC.NO < NO.OF.DRUM.SECTIONS THEN
      1 => DRUM.SECTION.AVAILABLE [DISC.NO];
      SECTION.SIZES [BOOT.DISC.TYPE * NO.OF.DRUM.SECTIONS + DISC.NO]
         => DRUM.SECTION.SIZE [DISC.NO];
      OFFSETS [BOOT.DISC.TYPE * NO.OF.DRUM.SECTIONS + DISC.NO]
         => OFFSET [DISC.NO];
   FI
ELSE
   -1 => DISC.TYPE [DISC.NO];
FI
@BOX 4.1
MAKE (LOGICAL8, DRUM.SIZES [BOOT.DISC.TYPE] / 8 - BLOCK.AREA.ADDR / 8 => D.SIZE,
   DISC.SIZE.DEPT.DATA.START + RSRVD.AREA + %840000) => FREE.BLOCKS;
D.SIZE +> RSRVD.AREA;
MAKE (LOGICAL8, 1024 / SUB.TABLE.SIZE / 4 * TABLE.AREA.SIZES [BOOT.DISC.TYPE] /
8 => TEMP,
   DISC.SIZE.DEPT.DATA.START + RSRVD.AREA + %840000) => FREE.SUB.TABLES;
FREE.STORE (DISC.SIZE.DEPT.DATA.START, %10000, RSRVD.AREA + TEMP);
@BOX 5.1
SECTOR.SIZES [D.TYPE] => SECTOR.SIZE;
ALLOCATIONS [BOOT.DISC.TYPE] * 1024 / SECTOR.SIZE
   => TABLE.AREA.ADDR;
TABLE.AREA.SIZES [BOOT.DISC.TYPE] * 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 + REAL.STORE.ADDRESS => 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(51,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(51,9)

@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(51,9)

@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(51,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 = 1000, ABORT.CPU = 2,
   TRAPPING.CPU = 10, DEFAULT.CPU = 250, CPU.RUNOUT = 1;
LITERAL / INTEGER SYS11.INITIAL.TIMER = INITIAL.TIMER;
@END
@TITLE CONSYS.SYS12(51,9)

@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(51,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 NO.OF.PROCS = 8;
:: LITERAL / INTEGER SYS13.NO.OF.PROCS = NO.OF.PROCS;
LITERAL / INTEGER PRIVI.UID = 1, PRBS.PER.SEG = 256,
   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.MANAGER
END
*GLOBAL 5;
@END

@TITLE CONSYS.SYS14(51,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.LOCKED.PARS = 5;
LITERAL / INTEGER NO.OF.LOCAL.SEGS = 32, NO.OF.X.SEGS = 32;
LITERAL / INTEGER NO.OF.COMMON.SEGS = 32, NO.OF.SYS.SEGS = 128, NO.OF.INITIAL.SE
GS = 32,
   FIRST.COMMON.SEG = 32;
LITERAL / INTEGER FIRST.X.SEG = 64;
LITERAL / INTEGER NO.OF.INITIAL.DATA.SEGS = 34, PT.SEG = 45;
LITERAL / ADDR SEG.SIZE = %40000, X.SEG.SIZE = DRUM.BLOCK.SIZE * MAX.SEG.SIZE;
LITERAL / ADDR SYS14.SEG.SIZE = SEG.SIZE, SYS14.X.SEG.SIZE = X.SEG.SIZE;
LITERAL / INTEGER SEG.SHIFT = 18, 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 = 36, PAGED.DATA.MAPPED.SEG = 0,
   PRB.SEG = 37, PRB.MAPPED.SEG = 0, CPRB.MAPPED.SEG = PRB.MAPPED.SEG,
   MBUF.SEG = 38, MBUF.MAPPED.SEG = 0,
   INITIAL.DATA.SEG = 0, INITIAL.DATA.MAPPED.SEG = 0,
   FILE.SEG = 46, FILE.MAPPED.SEG = 0,
   CATALOGUE.MAPPED.SEG = 0, PERMIT.MAPPED.SEG = 0,
   AUL.CORE.SEG = 39, 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(51,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.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 [SEG - 1];
   ACCESS [SEG] => ACCESS OF SYS14.CST [SEG - 1];
   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(51,11)

@COL 1S
@BOX 1.0
DATAVECS FOR SEGMENT TABLE INITIALIZATION
@BOX 1.1
DATAVEC LIMITS (INTEGER16)
         0     32     32     64
        64     64     64    128
        16    256     64     64
        16      8      0     64
         0      0      0     20
        64    128     64     64
         0      0      0     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
         0      0
END
DATAVEC ACCESS (LOGICAL8)
       %00    %85    %86    %85
       %8D    %86    %86    %86
       %86    %86    %8D    %8D
       %80    %8C    %00    %86
       %00    %00    %00    %8D
       %8D    %8D    %8D    %8D
       %00    %00    %00    %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 0
 0 0 0 1
 1 1 1 1
 0 0 0 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   2528
         0      0      0    432
       456    592    520    872
         0      0      0    720
       768    800    940      0
        12    112
END
DATAVEC DRUM.ADDRS.2 (INTEGER)
         0   1008   1056   1120
      1216   2000   2064   2128
      2256   2272   1352   1288
      1188   1208      0   2528
         0      0      0   1424
      1448   1584   1512   1864
         0      0      0   1712
      1760   1792   1932      0
        12   1104
END
@END

@TITLE CONSYS.SYS15(51,9)

@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 = 1024, MBUFS.PER.SEG = 2048,
   RESPONSE.TIME = 300,
   NO.OF.BUFFERS.BIT.VEC.SIZE = NO.OF.BUFFERS + 7 / 8;
@END
@TITLE CONSYS.SYS16(51,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 = 64,
   SYS.MB.FILLER.SIZE = 1004, MAX.PERMITTED.USERS = 8,
   NO.OF.REMOTE.DIRS = 8,  NO.OF.SYS.REMOTE.DIRS = 16,
   BLOCK.SIZE = PAGE.SIZE * DRUM.BLOCK.SIZE,
   MAPPED.UMB.TABLE.SIZE = 1,
   DIR.ENTRY.SIZE = %28, USER.MB.ENTRY.SIZE = %1E,
::1K PAGE    SYS.MB.START.ADDR = 2608, USER.MB.START.ADDR = 2616;
::2K PAGE    SYS.MB.START.ADDR = 1304, USER.MB.START.ADDR = 1308;
::4K PAGE    SYS.MB.START.ADDR = 652, USER.MB.START.ADDR = 654;
@END

@TITLE CONSYS.SYS17(51,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 = 16;
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 = 6, 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 = 1, DAILY.LIMIT = 2, MAX.BALAN
CE = %7FFF;
::1K PAGE LITERAL / INTEGER AUL.DRUM.SITE.1 = 2600, AUL.DRUM.SITE.2 = 2601;
::2K PAGE LITERAL / INTEGER AUL.DRUM.SITE.1 = 1300, AUL.DRUM.SITE.2 = 1301;
::4K PAGE LITERAL / INTEGER AUL.DRUM.SITE.1 = 650, AUL.DRUM.SITE.2 = 651;
    ::300 FLOPPY, 2000 WINCHESTER
LITERAL / INTEGER AUL.FILLER.SIZE = 500, AUL.UPDATE.PERIOD = 60;
@BOX 3.1
DATAVEC PRIVI.USER.NAMES (LOGICAL64)
   "SYSTEM"
   "PRIVI"
   "MU6S"
   "MU6C"
   "MUSM"
   "UTIL"
END
DATAVEC PRIVI.USER.PASSWDS (LOGICAL64)
   "MANAGER"
   "LEGED"
   "RULES"
   "X"
   "MSUM"
   "ITIES"
END
DATAVEC PRIVI.USER.SUPERS (INTEGER8)
   -1
   0 [5]
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]
END
@END

@TITLE CONSYS.SYS18(51,9)

@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"
   "MC68000"
   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.1(51,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS19 CONFIGURATION
@BOX 2.0
SYS19 PARAMETERS
@BOX 3.0
SYS19 DATAVECS
@BOX 4.0
LOCATE WHICH DEVICES ARE PRESENT
@BOX 1.1
::SYS19 INITIALIZATION
@BOX 2.1
LITERAL / INTEGER NO.OF.DEVICES = 11, NO.OF.PERI.CHANNELS = 6,
   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 = 2
;
LITERAL / ADDR COMMS.BUFFER.VA = %880400;
LITERAL / LOGICAL32 COMMS.BUFFER.RA = %80400;
::PERI BUFFERS FOLLOW APPENDIX COMMS BUFFERS
LITERAL / ADDR PERI.BUFF.VA = SYS19.NO.OF.COMMS.DEVICES * 8 + COMMS.BUFFER.VA;
LITERAL / LOGICAL32 PERI.BUFF.RA = SYS19.NO.OF.COMMS.DEVICES * 8 + COMMS.BUFFER.
RA;
@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)
   %0904
   %0904
   %1301
   %1701
   0 [4]
END
DATAVEC DEVICES.PER.P.DEV.TYPE (INTEGER)
   0::EMPTY
   4::SCC I
   4::SCC O
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;
LOGICAL8 [PERI.BUFF.AREA.SIZE] IO.BUFFERS;
*GLOBAL 5;
@END
@TITLE CONSYS.SYS19.2(51,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 = %850000;
 LOCKED.DATA.SEG.ADDR + IO.BUFF.START;
LITERAL / LOGICAL32 COMMS.BUFFER.RA = %90000;
::PERI BUFFERS FOLLOW APPENDIX COMMS BUFFERS
LITERAL / ADDR PERI.BUFF.VA = %850020;
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.SCC.DEVICES::SCC I
   NO.OF.SCC.DEVICES::SCC O
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(51,10)

@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                 %000                   %00000             %F(8)
       %1002C                 %0102                   %148F1             2
       %1012E                 %0203                   %14820             1
END
@END

@TITLE CONSYS.SYS20.1(51,10)
@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
SYS20 CONFIGURATION
@BOX 2.0
SYS20 PARAMETERS
@BOX 4.0
INITIALIZE PROCESS ZERO PRB
@BOX 1.1
::SYS20 INITIALIZATION
@BOX 2.1
LITERAL / INTEGER NO.OF.TASKS = 10;
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
   SYS05.ESM.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, SYS20.ESM.TASK = %40;

*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 INITIALIZE.SYS20 ();
INITIALIZE.SYS20 ();
SYS20.SET.TASK (SYS20.SET.UP.TASK, 0);
PROC INITIALIZE.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;
   12 => SSN OF LST [0] OF PZ.SEG.VARS^;
   %8E => ACCESS OF LST [0] OF PZ.SEG.VARS^;
   %7FFF => STORE.LIMIT OF PZ.SEG.VARS^;
   FOR I < SYS14.NO.OF.MAPPED.SEGS DO
      INIT.MST [I] => MST [I] OF PZ.SEG.VARS^;
   OD
END
@END


@TITLE CONSYS.SYS20.3(51,10)
@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
SYS20 CONFIGURATION
@BOX 2.0
SYS20 PARAMETERS
@BOX 4.0
INITIALIZE PROCESS ZERO PRB
@BOX 1.1
::SYS20 INITIALIZATION
@BOX 2.1
LITERAL / INTEGER NO.OF.TASKS = 10;
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
   SYS05.ESM.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, SYS20.ESM.TASK = %40;
*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 INITIALIZE.SYS20 ();
INITIALIZE.SYS20 ();
SYS20.SET.TASK (SYS20.SET.UP.TASK, 0);
PROC INITIALIZE.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(51,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(51,9)

@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

