@X @~
~V7 56 2 -5
~D10
~H                       MUSS
~
~
~HAPPENDIX13
~D13
~M~OVAX CONFIGURATION
~D12
~MUNIVERSITY OF MANCHESTER~
~V9 -1
~P
~V9 1
~D10
~S1~MAppendix 13  CONTENTS~
~
~
~MIntroduction                                                       ~
~
~MCONSYS31  -  System Configuration - VAX11/750 Manchester University~
~
~NCONLIB31  -  Library Configuration - VAX11/750 Manchester University~
~
~NCONLIB    -  Library Compile Jobs~
~V9 -1
~P
~S1~M~OIntroduction
~BThis Manual is concerned with the compilation and
configuration of the VAX implementation of MUSS.  The
jobs streams for the compiling the 'SYS' files are
in CONSYS31 and those for compiling the 'LIB' files
are in CONLIB31.  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 MT68000.
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~
~Q 10
~
~T% 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~
~
~
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.
~
~
~MCL2X3  ~
~NCMTLX3~
~NCMSLX~
~NCSYS3v~
~NCLIB3v~
~NCMFN3v~
~NCMTL3v~
~NCMRD3v~
~NCMSL3v~
~NCDOC3v~
~NCCWU3v~
~NUPDATE3v~
~
This complete set of jobs can be input by the command~
~
~NIN CJOBS3v
~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~
~NCFIO3v~
~NCFTN3v~
~NCPIOX3~
~NCPASX~
~NCPIO3v~
~NCPAS3v~
~NCMUC3v~
~NUPDATEC~
~NCTLC3v~
~NCTLB3v~
~NCTLP3v~
~NCRDP3v~
~NCSLP3v~
~NCMBL3v~
~V9 -1
~P
~D10
~H                    MUSS
~

~D10
~HCONSYS        31
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
                                                           ISSUE 11~
~V9 -1
~P
~V9 1
~YCONSYS31
~X%|
~S1~M~OAP3 IMPLEMENTATION DESCRIPTION~
~S1~M~OSystem Configuration  Version 1~
~S1~OSystem Configuration - VAX11/750 Manchester University~
~S1~O1. Allocation of Segments~
~
~
Common Segment Number  System Segment Number  Use~
32767                  0                      Blank~
-                      1                      Locked system code~
-                      2                      Locked system data~
32764                  3                      Paged system code~
                                              (Command level code~
                                               + task code)~
32763                  4                      Basic Library~
32762                  5                      Paged system data~
32761                  6                      PRB's~
32760, 32759           7, 8                   Message buffers~
32758                  9                      Process zero~
                                              stack segment~
32757                  10                     Bootstrap~
32756                  11                     Post mortem~
32755                  12                     Initialization code~
32754                  13                     Basic system Directory~
32753, 32752           14, 15                 Page Table segments~
32751                  16                     File Work Segment~
32750                  17                     -~
32749                  18                     -~
32748                  19                     AUL Segment~
~
32746                  21                     FLIP DRAW TEXT~
32745 - 32743          22 - 24                FORTRAN~
32742                  25                     MUSL~
32741                  26                     MUTL~
32740                  27                     MUTL~
32739 - 32736          28 - 31                PASCAL~
32735                  32                     Math functions directory~
32734                  33                     Math functions code~
32733                  34                     Compiler writer~
                                               utilities~
32732                  35                     FORTRAN I/O directory~
32731                  36                     MURD~
32730                  37                     Screen Editor~
32729                  38                     Initial bootstrap~
32728                  39                     Disc copy program~
32727                  40                     Monitor~
32726                  -                      MUSS C Utilities~
32725                  -                      UNIX Shell~
~BThe virtual address space above segment 32768 (%80000000)
is defined to be the system address space, and this is mapped
by a single (large) page table at the top of the memory.  The
system address space is assigned as follows:~
~T| 25
~
~
80000000  -  80002000|Unibus address space~
80002000  -  80003000|Unibus - Vax map resgiters~
80003000  -  80003200|Page table for mapping the local~
|segments of the current process~
|(equivalent to a segment table)~
80010000  -  80020000|Segment local to the current process~
80020000  -  80030000|Locked system code~
80003000  -  80040000|locked system data~
80040000  -|Real store.~
~S1~O2. Allocation of Disc Space~
~
~
MUSS Disc Address          Contents~
0                          Initial Bootstrap~
1 - 16                     Monitor~
17 - 32                    Disc Copy (with bad block table)~
33 - 48                    Disc format~
49 - 52                    Post-mortem dump~
~
~M~OV1 System~
~
   80 -   207                Locked system code (64K)~
  208 -   335                Locked system data (64K)~
  336 -   367                Initial paged system data (16K)~
  368 -   399                Initialisation code (16K)~
  400 -   527                Paged system code (64K)~
  528 -   543                Library directory (8K)~
  544 -   671                Basic library (64K)~
  672 -   799                Basic utilities (64K)~
  800 -   863                Mathematical functions (32K)~
  864 -   991                MURD (64K)~
  992 -  1119                MUSL (64K)~
 1120 -  1247                MUTL (64K)~
 1248 -  1311                MUTL (32K)~
 1312 -  1439                Documentation utilities (64K)~
 1440 -  1567                Compiler writers utilities (64K)~
~
~M~OV2 System~O~
~
 1680 -  1807                Locked system code (64K)~
 1808 -  1935                Locked system data (64K)~
 1936 -  1967                Initial paged system data (16K)~
 1968 -  1999                Initialisation code (16K)~
 2000 -  2127                Paged system code (64K)~
 2128 -  2143                Library directory (8K)~
 2144 -  2271                Basic library (64K)~
 2272 -  2399                Basic utilities (64K)~
 2400 -  2463                Mathematical functions (32K)~
 2464 -  2591                MURD (64K)~
 2592 -  2719                MUSL (64K)~
 2720 -  2847                MUTL (64K)~
 2848 -  2911                MUTL (32K)~
 2912 -  3039                Documentation utilities (64K)~
 3040 -  3167                Compiler writers utilities (64K)~
~
~M~OCommon Areas~
~
 3312 -  3439                Paged system data (64K)~
 3440 -  3567                PRB's (64K)~
 3568 -  3695                Message buffers (64K)~
 3696 -  3823                Message buffers (64K)~
 3824 -  3951                Process zero stack segment (64K)~
 3952 -  4079                File work segment (64K)~
 4080 -  4143                AUL segment (32K)~
~
~S1~O3. Core Layout after Bootstrapping~
~
~
~X%`
~BThe table below descibes the layout of core after bootstrapping. The size of m
ost areas depends on the configuration of the system. The datavec SYSTEM.SPEC (s
ee chart CONSYS) contains some of these
sizes.~
~
Physical Virtual   Size                 Contents~
address  address~
%00000   -         see SYSTEM.SPEC      Monitor~
%03000   -         %400 bytes           SCB~
%03400   -         %400 bytes           Interrupt procedure addresses~
%04000   %80044000 2 pages              SST PT (see CONSYS.SYS14)~
%04400   -         1 page               Process zero PRB~
                                        (see CONSYS.SYS14)~
%04600   -         2 pages              Initial page tables~
                                        (see CONSYS.SYS14)~
%08000   -         see SYSTEM.SPEC      Initial paged data~
                                        (see CONSYS.SYS14)~
%10000   %80020000 see SYSTEM.SPEC      Locked code~
                                        (TLSEG 1 in SYS compile)~
%20000   %80030000 see SYSTEM.SPEC      Locked data~
                                        (TLSEG 3 in SYS compile)~
%30000   %80070000 depends on number    I/O buffers and vars.~
                   of I/O devices       (see CONSYS.SYS19)~
%40000   %80080000 depends on core      Store size dependent tables~
                   size                 (see CONSYS.SYS14)~
%50000   %80090000 depends on disc      Disc size dependent tables~
                   size                 (see CONSYS.SYS03)~
%60000   -         %200                 Bad block table(see AP2022)~
%68000   -         %4000 bytes          Initialisation code~
                                        (TLSEG 5 in SYS compile)~
~
~BLiterals corresponding to these addresses can be found on chart CONSYS.
~
~S1~O4. Compile Jobs
~S1~O4.1 System Compile (VAX)~
~X{`
~
~OFiles produced~
~
List of file names ( "?" represents version number
and "\" represents machine number)~
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~
FLIP MU6S:CONSYS31 1~
CONSYS~
**DI 4 0~
MUSL %0 BSYS\? %427~
*INFORM %2400;~
*TLSEG 0 %10000 %7FFC0000 %F(8) 0;~
*TLSEG 1 %F000 %80020000 %F(8) 0;~
*TLSEG 2 %10000 %0 %F(7)D 0;~
*TLSEG 3 %B000 %80030000 %F(8) 0;~
*TLSEG 4 %4000 %7FFA0000 %F(8) 0;~
*TLSEG 5 %4000 %68000 %F(8) 0;~
*TLSEG 6 %10000 %7FFB0804 %F(8) 0;~
*TLSEG 7 %10000 %80044000 %F(7)D 0;~
*TLSEG 8 %8000 %80078000 %F(7)D 0;~
*TLSEG 9 %2800 %80090000 %F(7)D 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 4 12; :: DEFINITELY PAGED DATA~
*TLLOAD 5 7; ::INITIALISATION 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 2 22; ::PW0 ETC~
*TLLOAD 1 23; :: I/O APPENDIX~
*TLLOAD 3 24; ::IO OVERRUN BUFFERS~
*TLLOAD 6 27; :: LIB DATAVEC~
*TLLOAD 0 25; :: MAGNETIC TAPE COMMANDS~
*TLLOAD 0 26; ::DRUM MANAGER~
*TLLOAD 7 8; :: SST.PT DATA~
*TLLOAD 4 28; :: FILE DATA~
*TLLOAD 8 29; ::I/O VARS~
*TLLOAD 9 30; ::DRUM DATA~
**SELECTINPUT 4~
DEL~
MUSL %0 %0 %C10~
MODULE (GCT.INT, SYS09.TINI.GRS, SYS09.GR.INTERRUPT);~
PSPEC GCT.INT (INTEGER);~
PSPEC SYS09.TINI.GRS (INTEGER);~
PSPEC SYS09.GR.INTERRUPT ();~
PROC GCT.INT (DUMMY);~
END~
PROC SYS09.TINI.GRS (DUMMY);~
END~
PROC SYS09.GR.INTERRUPT;~
END~
*END~
FLIP MU6S:AP3011 1~
AP301~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP2023 1~
AP202.VAX~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP1031 1~
AP103~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP3041 1~
AP304.DZ11~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP3071 1~
AP307.LP11~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP2101 1~
AP210.VAX~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:AP3081 1~
AP308.CONS~
**DI 4 0~
MUSL %0 %0 %C10~
**SELECTINPUT 4~
FLIP MU6S:SYS011 1~
SYS01~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS023 1~
SYS02~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS034 1~
SYS03~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS051 1~
SYS05~
**DI 4 0~
MUSL %0 %0 %C00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS061 1~
SYS06~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS081 1~
SYS08~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS101 1~
SYS10~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS111 1~
SYS11~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS121 1~
SYS12~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS145 1~
SYS14~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS151 1~
SYS15~
**DI 4 0~
MUSL %0 %0 %C00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS163 1~
SYS16~
**DI 4 0~
MUSL %0 %0 %C00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS172 1~
SYS17~
**DI 4 0~
MUSL %0 %0 %C00~
**TLMODE %101~
**SELECTINPUT 4~
**TLMODE %100~
FLIP MU6S:SYS181 1~
SYS18~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS193 1~
SYS19~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS131 1~
SYS13~
**DI 4 0~
MUSL %0 %0 %C00~
**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 %C00~
**SELECTINPUT 4~
DEL SUBMOD1~
DEL SUBMOD2~
DEL SUBMOD3~
FLIP MU6S:SYS201 1~
SYS20~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS211 1~
SYS21~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS221 1~
SYS22~
**DI 4 0~
MUSL %0 %0 %C00~
**SELECTINPUT 4~
FLIP MU6S:SYS231 1~
SYS23~
**DI 4 0~
MUSL %0 %0 %C00
**SELECTINPUT 4~
FLIP MU6S:AP3991 1~
AP399~
**DI 4 0~
MUSL %0 %0 %820~
**SELECTINPUT 4~
ENDINPUT 4~
CF BSYS\? DIR1\?~
DEL BSYS\?~
STOP~
::END COMPSYS\?~
~S1~O4.2 VAX Monitor Compile~
~
~
~BThe monitor software and the supplementary utilities run
with real addressing.  The store layout is as follows:~
~T# 5 7 13 16 24
~
Initial bootstrap~
##0#-#%200~IBootstrap code~
###-#%1000~IStack~
~
Monitor and Post-mortem~
##0#-#%800~IPost-mortem~
#%800#-##Monitor Global data~
###-#%1000~IStack~
#%1000#-#%3000~IMonitor code~
#%40000##~IDisc buffer for downloading~
~
Copy utility~
##0#-#~IGlobal data~
###-#%1000~IStack~
#%10000#-#%12000~ICopy code~
#%18000#-#%18400~IBad block tables~
#%20000#-#%25800~IDisc buffers~
~
Disc formatter~
##0#-#~IGlobal data~
###-#%1000~IStack~
#%10000#-#%12000~IFormatter code~
#%18200#-#%18400~IBad block table~
#%22C00#-#%25800~IDisc buffer~
~
::BEGIN VAX MONITOR
DO 0 MON3LOG %200~
LIB MTLX3~
LIB MSLX~
LIB L2X3~
FLIP MU6S:AP3201 1~
AP320~
**DI 4 0~
MUSL %0 BPMD\? %12~
**TLSEG 1 %400 %0 %F(8) 0~
*TLLOAD 1 2; :: POST MORTEM ROUTINE~
*INFORM %2400;~
**SELECTINPUT 4~
DEL BPMD\?~
FLIP MU6S:AP3511 1~
AP351.INIT~
ED~
C/SELECT.DRIV/I/::/~
C/DISC.STATUS/I/::/E~
DI 4~
MUSL %0 BBST\? %20B~
*INFORM %2400;~
**TLSEG 0 %200 %0 -1 0~
*CODE 1;~
**SI 4~
EI 4~
DEL~
MUSL %0 BMON\? %60B~
*INFORM %2400;~
**TLSEG 0 %2000 %1000 -1 0~
**TLSEG 1 %100 %10000 -1 0~
**TLSEG 2 %1000 %800 -3 0~
**TLSEG 4 %0 %40000 -3 0~
**TLSEG 6 %2000 %10000 -1 0~
**TLSEG 7 %2000 %10000 -1 0~
**TLSEG 8 %1000 %0 -3 0~
*TLLOAD 8 2;~
*TLLOAD 2 3;~
*TLLOAD 4 5;~
*TLLOAD 6 6;~
*TLLOAD 7 7;~
*TLLOAD 2 20;~
*TLLOAD 1 8;~
PSPEC MONITOR (INTEGER);~
MODULE (NO.V1.SEGS, NO.V2.SEGS, SYS14.PAGE.SHIFT,~
   SYS14.PAGE.SIZE, OLAY.ADDR, SYS.SIZE, MUSS.ROM.START,~
   V1.DISC.ADDR, V1.CORE.ADDR, V1.TRAN.SIZE,~
   V2.DISC.ADDR, V2.CORE.ADDR, V2.TRAN.SIZE,
   BAD.BLOCK.TABLE, BAD.BLOCK.TABLE.SIZE, BAD.BLOCK.CORE.ADDR);~
LITERAL NO.V1.SEGS = 5, NO.V2.SEGS = 5, SYS14.PAGE.SHIFT = 9,~
   SYS14.PAGE.SIZE = 512, SYS.SIZE = 200;~
LITERAL / ADDR MUSS.ROM.START = %20000, OLAY.ADDR = %10000;~
LITERAL / INTEGER32 BAD.BLOCK.TABLE = 107536;~
LITERAL / INTEGER BAD.BLOCK.TABLE.SIZE = 22;~
LITERAL / INTEGER32 BAD.BLOCK.CORE.ADDR = %60000;~
*CODE 1;~
*#%D0 %8F %00 %10 %00 %00 %5E; ::MOVL #1000, SP;
MONITOR (0);~
*GLOBAL 1;~
DATAVEC V1.DISC.ADDR (ADDR)~
   208 80  368 336 49~
END~
DATAVEC V1.TRAN.SIZE (LOGICAL)~
   128 128  32  8  4~
END~
DATAVEC V1.CORE.ADDR (ADDR)~
   %20000 %10000 %68000 %8000 %0~
END~
DATAVEC V2.DISC.ADDR (ADDR)~
   1808 1680 1968 1936 49~
END~
DATAVEC V2.TRAN.SIZE (LOGICAL)~
   128 128  32  8  4~
END~
DATAVEC V2.CORE.ADDR (ADDR)~
   %20000 %10000 %68000 %8000 %0~
END~
*END~
FLIP MU6S:AP3501 1~
AP350~
DI 4~
MUSL %0 %0 %E0B~
**SI 4~
EI 4~
DEL~
MUSL %0 %0 %E0B~
MODULE (SUPP.MENU, SUPPT.SIZE, OPTION.ADDRS, SUPP.OPTIONS);~
*GLOBAL 1;~
LITERAL / LOGICAL8 LF = 10;~
DATAVEC SUPP.MENU (LOGICAL8)~
   "8) Copy Disc." LF~
   "9) Format RK07 Disc." LF~
END~
LITERAL SUPPT.SIZE = 35;~
DATAVEC OPTION.ADDRS (INTEGER)~
   34 66~
END~
LITERAL SUPP.OPTIONS = 2~
*END~
FLIP MU6S:AP3511 1~
AP351~
DI 4~
MUSL %0 %0 %E0B~
*INFORM %2400;~
**SI 4~
EI 4~
DEL~
FLIP MU6S:SYS501 1~
SYS50~
DI 4~
MUSL %0 %0 %E0B~
*INFORM %2400;~
**SI 4~
EI 4~
DEL~
FLIP MU6S:SYS513 1~
SYS51~
DI 4~
MUSL %0 %0 %E0B~
*INFORM %2400;~
LITERAL / ADDR BUFF.ADDR = %20000, BUFF.ADDR2 = BUFF.ADDR + %2C00,~
   TABLE.BUFF1 = %18000, TABLE.BUFF2 = %18200;~
**SI 4~
**EI 4~
DEL~
MUSL %0 %0 %A0B~
MODULE (SERVICE.ROUTINE);~
*CODE 8;~
PSPEC SERVICE.ROUTINE ();~
PROC SERVICE.ROUTINE;~
END~
*END~
DEL BBST\?~
DEL BMON\?~
STOP~
::END VAX MONITOR~
~X{{
~
~Y
~V9-1
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H        CONSYS31
~V9 -1
~F
@TITLE CONSYS(31,11)
@COL 1S-2R-3R-4R-5R-6F
@FLOW 1-2-3-4-5-6
@BOX 1.0
SYSTEM CONFIGURATION MODULE
@BOX 3.0
SPECIFICATION OF CONFIGURATION PARAMETERS
FOR VAX11/750
@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 BYTES.PER.WORD = 4, BITS.PER.WORD = 32;
LITERAL / INTEGER RESERVED.STACK.BOTTOM = 256, RESERVED.STACK.TOP = 512;
LITERAL / INTEGER UNIBUS.ADDR = %80000000;
VSTORE STORE [%7FFFFFFF] %80040000;
@BOX 5.1
*GLOBAL 5;
DATAVEC FIXED.ADDRESSES (INTEGER)
   0 :: INT.ENTRY.ADDRESS
   0 :: CONSOLE TERMINAL USE
   0 :: FIXED.ADDRESS
   0 :: SAVE.LINK
END
INTEGER VERSION.NO; :: ACCESSED BY THE BOOTSTRAP;
DATAVEC REGISTER.STACK (LOGICAL)
 0 [16]
END
:: NEQ INTERRUPT FIXED ADDRESSES
LOGICAL NEQ.VIRTUAL.ADDRESS, NEQ.FAIL.STATUS;
ADDR I.CH.TABLE.PTR, O.CH.TABLE.PTR;
ADDR DL11.WORKSPACE.PTR, DL11.CSR;
ADDR LP11.WORKSPACE.PTR, LP11.CSR;
ADDR CONS.I.WORKSPACE.PTR, CONS.O.WORKSPACE.PTR;
INTEGER CALL.LINK.TIME, RAW.USER.TIME;
::REMOVE NEW FIXED ADDRESSES FROM THIS DATAVEC
DATAVEC SPARE.FIXED.ADDRESSES (INTEGER)
   0 [%19]
END
DATAVEC SYSTEM.SPEC (INTEGER)
   %B000 :: LOCKED DATA SIZE
   %F000 :: LOCKED CODE SIZE
   0 :: AVAILABLE DRIVES
   0 :: NOT USED
   %2000 :: INITIAL PAGED DATA SIZE
   %3000 :: MONITOR SIZE
END
LITERAL / INTEGER LOCKED.DATA.START = %20000, LOCKED.CODE.START = %10000,
   IO.DATA.START = %30000, STORE.DATA.START = %40000, DRUM.DATA.START = %50000;
DATAVEC INTERRUPT.STACKS (LOGICAL)
   0 [%E00]
END
INTEGER NO.OF.PAGES, PT.SIZE, NO.OF.PAGES.BIT.VEC.SIZE,
   SSDD.AREA.START, SSDD.AREA.SIZE;
LITERAL / INTEGER PAGE.SIZE = 512, PAGE.SHIFT = 9;
LITERAL / ADDR PAGED.DATA.SEG.ADDR = %7FFA0000;
*CODE 7;
*#%00;::DEBUG HALT
*#%D0 %8F %00 %F0 %03 %00 %5E;
::SET STACK POINTER TO
::SCRATCH WORKING SPACE
#CONSYS.APP
::SET STACK POINTER TO
::INTERRUPT LEVEL AREA 0
*#%D0 %8F %00 %03 %03 %80 %5E;
LITERAL / INTEGER REAL.STORE.ADDRESS = %80040000;
*GLOBAL 5;
#CONSYS.SYS01
#CONSYS.SYS02
#CONSYS.SYS03
#CONSYS.SYS05
#CONSYS.SYS06
::#CONSYS.SYS09
#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(31,8)
@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
SYS20 PROCESS ZERO
SUP01 JOB SUPERVISOR
SUP02 FILE MANAGER
LIB10 SET UP
@BOX 1.1
::EXTERNAL ENVIRONMENT
@BOX 3.1
PSPEC SYS13.PROCESS.ACTIVITY ();
PSPEC EMPTY.ACTIVITY ();
PSPEC SET.BIT (ADDR [LOGICAL8], INTEGER);
PSPEC CHECK.ADDRESS (LOGICAL) / LOGICAL;
@BOX 4.1
PSPEC INIT.AP301 ();
PSPEC CONS.I.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC CONS.O.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC DZ11.O.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC DZ11.I.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC LP11.O.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC RK07.POLL ();
PSPEC DZ11.POLL ();
PSPEC LP11.POLL ();
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 SYS05.MT.INTERRUPT ();
PSPEC SYS05.ESM.TASK ();
PSPEC SYS06.PROCESS.SCHEDULER ();
PSPEC SYS07.IO.INTERRUPT ();
PSPEC SYS07.IO.TASK ();
PSPEC SYS08.CLOCK.INTERRUPT ();
PSPEC SYS09.GR.INTERRUPT ();
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.SST.TYPE IS
   INTEGER LIMIT, COUNT, PAGE.COUNT
   LOGICAL8 STATUS
OR
   INTEGER SST.LINK;
TYPE SYS14.SEG.VARS IS
   SYS14.LST.TYPE [64] LST
   SYS14.LST.TYPE [16] XST
   INTEGER SSN1, BLK1, SSN2, BLK2;
LITERAL / INTEGER CF.NO.OF.SYS.SEGS = 256, CF.NO.OF.COMMON.SEGS = 55;
SYS14.SST.TYPE [CF.NO.OF.SYS.SEGS] SYS14.SST;
LOGICAL [CF.NO.OF.SYS.SEGS] SYS14.SST.PT;
SYS14.LST.TYPE [CF.NO.OF.COMMON.SEGS] SYS14.CST;
ADDR [SYS14.CMT.TYPE] SYS14.CMT;
ADDR [INTEGER8] SYS14.USAGE.COUNT;
ADDR [INTEGER16] SYS14.LOCKIN;
PSPEC SYS14.CORE.REJECT ();
PSPEC SYS16.FILE.TASK ();
PSPEC SYS16.INIT.FILE.TASK ();
PSPEC SYS17.INIT.ACCOUNTS.TASK ();
PSPEC SYS19.INIT.DEV.TASK ();
PSPEC SYS20.SET.TASK (INTEGER, INTEGER);
PSPEC SYS20.TASK.LOOP ();
PSPEC JOB ();
PSPEC FILE.MANAGER ();
PSPEC FILE.MANAGER10 ();
PSPEC SET.UP ();
@END
@TITLE CONSYS/2(31,11)

@COL 1S
@BOX 1.0
EXPORT LIST
@BOX 1.1
MODULE (PW0, PW1, PW2, PW3, PW4, PW5, PW6, PWW1, PWW2, PWW3, PWW4,
   BYTES.PER.WORD, BITS.PER.WORD, STORE.SIZE, UNIBUS.ADDR, RESERVED.STACK.BOTTOM
, RESERVED.STACK.TOP,
   PCB.TYPE, PCBS, HST, C.HST, P0.BASE, P0.LIMIT, P1.BASE, P1.LIMIT, NO.OF.COMMA
NDS,
   NO.OF.DZ11S, NO.OF.DZ11.CHANNELS, NO.OF.DZ11.DEVICES,
   I.CH.TABLE, O.CH.TABLE, WRITE.PROCS, POLL.PROCS, DZ11.ADDRS, LP11.ADDRS,
   OVERRUN.SIZE, DZ11.OVERRUN.AREA.SIZE, CONS.OVERRUN.AREA.SIZE, NO.OF.LP11S,
   NO.OF.RK07S, NEQ.VIRTUAL.ADDRESS, NEQ.FAIL.STATUS,
   INITIAL.KERNEL.STACK, 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.GR.ACTIVITY, SYS01.GR.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, FREE.BLOCKS, FREE.SUB.TABLES, NO.OF.DRUM.SECTIONS,
   DRUM.SECTION.SIZE, DRUM.SECTION.AVAILABLE,
   DRUM.SIZES, DRUM.BLOCK.SIZE, MAX.SEG.SIZE, SUB.TABLE.SIZE, DRUM.BLOCK.SIZE.BI
T.VEC.SIZE,
   MAX.BLOCKS.DRUM.XFER, DRUM.FIRST.UNIBUS.PAGE.NO, V.DRUM.PAGE.MAP, V.DRUM.BDP.
CSR,
   CORE.TABLE.AREA.RA, CORE.TABLE.AREA.VA, BLOCK.AREA.ADDR, TABLE.AREA.ADDR,
   SECTOR.BUFF.VA, SECTOR.BUFF.RA, CLEAR.PAGE.ADDR, SECTOR.SIZE, BLOCK.TABLE.ENT
RY.SIZE,
   NO.OF.BAD.BLOCKS, BAD.BLOCK.TABLE.ADDR, BAD.BLOCK.DATA.ADDR,
   UNIT.PRESENT, NO.OF.UNITS, NO.OF.MT.UNITS, SYS05.NO.OF.MT.UNITS, FIRST.MT.UNI
T,
   NO.OF.ED.UNITS, FIRST.ED.UNIT, ED.BLOCK, MAX.MT.TRANSFER, MT.PAR, MAX.BLOCKS.
MT.XFER,
   NO.OF.MT.BLOCKS, MT.FIRST.UNIBUS.PAGE.NO, V.MT.PAGE.MAP, V.MT.BDP.CSR,
   INTERACTIVE.TS, BATCH.TS, BATCH.NO, CMD.SUS, TERM.SUS,
   SYS06.TERM.SUS, SYS06.KILL.SUS, MESSAGE.SUS, SYS06.MESSAGE.SUS,
   SYS06.IO.SUS, 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, S
TART.PROC,
   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,
   MAX.PERMITTED.USERS, BLOCK.SIZE, MAPPED.UMB.TABLE.SIZE,
   NO.OF.REMOTE.DIRS, NO.OF.SYS.REMOTE.DIRS, DIR.ENTRY.SIZE, USER.MB.ENTRY.SIZE,
   FILE.MAPPED.SEG, FILE.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.CONSUMABLES, SYS17.NO.OF.REUSABLES, SYS1
7.CPU.TIME, SYS17.FILE.STORE,
   SYS17.NO.OF.FILES, DAILY.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.U
SER.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,
   NO.OF.DEVICES, NO.OF.PERI.CHANNELS, NO.OF.PERI.REROUTES, NO.OF.PRESET.DEVICES
,
   PERI.BUFF.VA, PERI.BUFF.RA, PERI.BUFF.SIZE, SYS19.PERI.BUFF.SIZE, DEVICES.PER
.P.DEV.TYPE,
   NO.OF.P.DEV.TYPES, NO.OF.DEVICE.CLASSES, COMMS.BUFFER.VA, COMMS.BUFFER.RA,
   SYS19.NO.OF.DEVICES, SYS19.NO.OF.P.DEV.TYPES, SYS19.NO.OF.COMMS.DEVICES,
   SYS19.NO.OF.DEVICES, CONFIG.TABLE, CONFIG.SIZE, NO.OF.PERI.PROCS, SYS19.MAX.D
ATA.TRANSFER,
   SYS19.TALK.IN.DEVICE.CLASS, SYS19.TALK.OUT.DEVICE.CLASS,
   SYS19.TALK.OUT.DEV.NO, SYS19.TALK.PERI.CHANNEL, SYS19.NO.OF.GROUPS,
   PERI.NAME, PERI.SPN, SYS19.NO.OF.PERI.CHANNELS, SYS19.OPR.IN.DEV.NO,
   IO.BUF.SEG, IO.BUF.BLK, IO.MSEG, SYS20.DRUM.TASK, SYS20.IO.TASK, SYS20.INIT.D
EV.TASK,
   SYS20.INIT.ACCOUNTS.TASK, SYS20.TERM.PROC.TASK, SYS20.INIT.SUP.TASK, SYS20.FI
LE.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.ADDRS1, DRUM.ADDRS2, LIMITS, VERSION.NO, NO.OF.OP.PARAMS);
@END

@TITLE CONSYS.APP(31,10)

@COL 1S-2R-4R

@FLOW 1-2-4

@BOX 1.0
APPENDIX CONFIGURATION
@BOX 2.0
APPENDIX DECLARATIONS
@BOX 4.0
INITIALISATION CODE
@BOX 1.1
::APPENDIX CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.RK07S = 2;
TYPE PCB.TYPE IS
   LOGICAL [24] PCB;
LITERAL / INTEGER NO.OF.PROCS = 64;
LITERAL / INTEGER SYS13.NO.OF.PROCS = NO.OF.PROCS;
PCB.TYPE [SYS13.NO.OF.PROCS] PCBS;
LITERAL / INTEGER NO.OF.COMMANDS = 83;
@BOX 4.1
*CODE 7;
#CONSYS.APP/1
#CONSYS.APP/2
PSPEC APP.INITIALISE ();
APP.MMU.INITIALISE ();
APP.INITIALISE ();
INIT.AP301 ();
APP.IO.INITIALISE ();
PROC APP.INITIALISE;
INTEGER PTR, TEMP;
:: CLEAR STORE
FOR PTR < %280 DO
   0 => STORE [%1000 + PTR];
OD
IO.DATA.START + %8000 / 4 => TEMP;
FOR PTR < %2000 DO
   0 => STORE [TEMP + PTR];
OD
:: INITIALISE INTERRUPT VECTORS TO AN ILLEGAL ADDRESS
FOR PTR < %100 DO
   3 => STORE [%C00 + PTR];
OD
:: SET SYSTEM CONTROL BLOCK BASE
*#%DA %8F %00 %30; ::MTPR #%3000, #SCBB
*#%00 %00 %11;
END
@END

@TITLE CONSYS.APP/1(31,10)
@COL 1S-2R
@FLOW 1-2
@BOX 1.0
I/O APPENDIX CONFIGURATION
@BOX 2.0
INITIALISE IO VARIABLES
@BOX 1.1
LITERAL / INTEGER NO.OF.DZ11S = 4;
LITERAL / INTEGER NO.OF.DZ11.CHANNELS = 8 * NO.OF.DZ11S,
   NO.OF.DZ11.DEVICES = NO.OF.DZ11.CHANNELS * 2;
LITERAL / INTEGER OVERRUN.SIZE = %20,
   DZ11.OVERRUN.AREA.SIZE = OVERRUN.SIZE * NO.OF.DZ11.CHANNELS,
   CONS.OVERRUN.AREA.SIZE = OVERRUN.SIZE;
LITERAL / INTEGER NO.OF.LP11S = 1;
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
PSPEC DUMMY.WRITE.PROC (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
DATAVEC WRITE.PROCS (ADDR DUMMY.WRITE.PROC)
   DUMMY.WRITE.PROC
   CONS.I.CONTROL
   CONS.O.CONTROL
   DZ11.I.CONTROL
   DZ11.O.CONTROL
   LP11.O.CONTROL
END
PSPEC DUMMY.POLL.PROC ();
DATAVEC POLL.PROCS (ADDR DUMMY.POLL.PROC);
   DUMMY.POLL.PROC [2]
   RK07.POLL
   DZ11.POLL
   DUMMY.POLL.PROC
   LP11.POLL
END
ADDR [NO.OF.DZ11S] DZ11.ADDRS;
ADDR [NO.OF.LP11S] LP11.ADDRS;
*CODE 2;
PROC DUMMY.WRITE.PROC (P1, P2, P3, P4, P5);
END
PROC DUMMY.POLL.PROC;
END
*CODE 7;
@BOX 2.1
PSPEC APP.IO.INITIALISE ();
PROC APP.IO.INITIALISE;
BYTE (^I.CH.TABLE) => I.CH.TABLE.PTR;
BYTE (^O.CH.TABLE) => O.CH.TABLE.PTR;
*#%DA %1C %12 ::MTPR #1C, IPL;
IF CHECK.ADDRESS (%80000040 => DZ11.ADDRS [0]) = 0 THEN
   0 => DZ11.ADDRS [0];
FI
IF CHECK.ADDRESS (%80000048 => DZ11.ADDRS [1]) = 0 THEN
   0 => DZ11.ADDRS [1];
FI
IF CHECK.ADDRESS (%80000050 => DZ11.ADDRS [2]) = 0 THEN
   0 => DZ11.ADDRS [2];
FI
IF CHECK.ADDRESS (%80000058 => DZ11.ADDRS [3]) = 0 THEN
   0 => DZ11.ADDRS [3];
FI
IF CHECK.ADDRESS (%80001F4C => LP11.ADDRS [0]) = 0 THEN
   0 => LP11.ADDRS [0];
FI
*#%DA %1F %12 ::MTPR #1F, IPL;
END
@END
@TITLE CONSYS.APP/2(31,11)

@COL 1S-2R-3R-4R-5R-6F

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

@BOX 1.0
APP MMU INITIALISE
@BOX 2.0
CALCULATE SIZE OF STORE
@BOX 3.0
CREATE PAGE TABLES TO
MAP REAL STORE AND UNIBUS
@BOX 4.0
TURN ON MEMORY MANAGEMENT
@BOX 5.0
INITIALISE GLOBAL VARIABLES
DEPENDENT ON STORE SIZE
@BOX 6.0
END
@BOX 1.1
PSPEC APP.MMU.INITIALISE ();
PROC APP.MMU.INITIALISE;
INTEGER I, PAGE.NO, PTR, STORE.SIZ, PT.SIZ, PT.START;
ADDR [LOGICAL] PT;
ADDR [INTEGER16] AREA.SIZE;
ADDR [LOGICAL] PT.ENTRY;
LITERAL / INTEGER NO.OF.AREAS = 7;
VSTORE V.MEMORY.CSR.2 %F20008;
VSTORE FIXED %3F000;

DATAVEC AREA.SIZ (INTEGER16)
   16  8   1  231
   128 128 0
END
DATAVEC PT.ENTR (LOGICAL)
   %90007FF0 %90007980 0 0
   %D8000080 %C0000100 %C0000000
END
@BOX 2.1
^AREA.SIZ => AREA.SIZE;
^PT.ENTR => PT.ENTRY;
V.MEMORY.CSR.2 => I;
-2 => STORE.SIZ;
WHILE 2 +> STORE.SIZ < 16 AND
   I ->> STORE.SIZ & 3 /= 0 DO OD
256 *> STORE.SIZ;
STORE.SIZ ->> 7 + 4 =>PT.SIZ;
STORE.SIZ - PT.SIZ => PT.START;
PT.START + %C0000001 => PT.ENTRY^ [2];
STORE.SIZ => AREA.SIZE^ [6];
@BOX 3.1
MAKE (LOGICAL, PT.SIZ, PT.START * 512) => PT;
-1 => PTR;
FOR I < NO.OF.AREAS DO
   FOR PAGE.NO < AREA.SIZE^ [I] DO
      PT.ENTRY^ [I] + PAGE.NO => PT^ [1 +> PTR];
   OD
OD
@BOX 4.1
PT.START * 512 => FIXED;
*#%DA %9F %00 %F0 %03 %00 %0C; ::MTPR SBR;
PT.SIZ * 128 => FIXED;
*#%DA %9F %00 %F0 %03 %00 %0D; ::MTPR SLR;
PT.START + 4 * 512 + %80040000 => FIXED;
*#%DA %9F %00 %F0 %03 %00 %08; ::MTPR P0BR;
*#%DA %8F %00 %04 %00 %00 %09; ::MTPR P0LR;
*#%DA %01 %38; ::MTPR #1, MAP ENABLE;
*#%DA %00 %39; ::MTPR 0 TBIA;
@BOX 5.1
STORE.SIZ => NO.OF.PAGES ->> 3 => NO.OF.PAGES.BIT.VEC.SIZE;
PT.SIZ => PT.SIZE;
@BOX 6.1
END
@END



@TITLE CONSYS.SYS01(31,11)

@COL 1S-2R-4R
@FLOW 1-2-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 = 32, NO.OF.INT.ACTIVITIES = 16, NO.OF.HALTS
= 7,
   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, SYS01.GR.HAL
T = 6;
LITERAL / LOGICAL SYS01.INT.ACTIVITIES = %FFFF0000, INT.ACTIVITIES = SYS01.INT.A
CTIVITIES,
   SYS01.PAGING.ACTIVITY = %40000000, SYS01.DRUM.ACTIVITY = %20000000, SYS01.DIS
C.ACTIVITY = %10000000,
   SYS01.TAPE.ACTIVITY = %8000000, SYS01.PROC.SCHEDULER.ACTIVITY = %1000000,
   SYS01.IO.ACTIVITY = %4000000, SYS01.CLOCK.ACTIVITY = %2000000,
   SYS01.GR.ACTIVITY = %00800000, SYS01.PZ.ACTIVITY = %8000;
*CODE 7;
DATAVEC INITIAL.KERNEL.STACK (ADDR)
   %80030380 %800305C0 %80030800 %80031340
   %80030A40 %80030C80 %80030EC0 %80031100
   %80030380 [8]
   %80031580 %800317C0 %80031A00 %80031C40
   %80031E80 %800320C0 %80032300 %80032540
   %80032780 %800329C0 %80032C00 %80032E40
   %80033080 %800332C0 %80033500 %80033740
END
ADDR [NO.OF.ACTIVITIES] ACTIVITY.LINK;
PSPEC INT.PROC ();
DATAVEC ACTIVITY.ENTRY (ADDR INT.PROC)
   EMPTY.ACTIVITY
   SYS14.CORE.REJECT
   SYS03.DRUM.INTERRUPT
   SYS05.ED.INTERRUPT
   SYS05.MT.INTERRUPT
   SYS07.IO.INTERRUPT
   SYS08.CLOCK.INTERRUPT
   SYS06.PROCESS.SCHEDULER
   SYS09.GR.INTERRUPT
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   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
   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
@BOX 4.1
PSPEC INITIALISE.SYS01 ();
PROC INITIALISE.SYS01;
INTEGER I;
ADDR [LOGICAL] WORD.PTR;
MAKE (LOGICAL, %40000, 0) => WORD.PTR;
FOR I < NO.OF.ACTIVITIES DO
   BYTE (ACTIVITY.ENTRY [I]) + 2 => WORD.PTR^ [INITIAL.KERNEL.STACK [I] ->> 2 -
1];
   INITIAL.KERNEL.STACK [I] => WORD.PTR^ [INITIAL.KERNEL.STACK [I] ->> 2 - 2];
   INITIAL.KERNEL.STACK [I] - 20 => WORD.PTR^ [INITIAL.KERNEL.STACK [I] ->> 2 -
9];
INITIAL.KERNEL.STACK [I] - 48 => ACTIVITY.LINK [I];
OD
END
INITIALISE.SYS01 ();
@END

@TITLE CONSYS.SYS02(31,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, 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(31,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
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
NO.OF.PAGES * 7 + PAGE.SIZE - 1 ->> PAGE.SHIFT
   => SSDD.AREA.SIZE;
STORE.DATA.START + REAL.STORE.ADDRESS => SSDD.AREA.START;
FREE.STORE (LOCKED.DATA.START, %10000, SYSTEM.SPEC [0]);
FREE.STORE (LOCKED.CODE.START, %10000, SYSTEM.SPEC [1]);
FREE.STORE (STORE.DATA.START, %10000, SSDD.AREA.SIZE * PAGE.SIZE);
FREE.STORE (%70000, PT.SIZE * PAGE.SIZE -: (NO.OF.PAGES * PAGE.SIZE - %70000), 0
);
FREE.STORE (0, %3000, SYSTEM.SPEC [5]);
FREE.STORE (%3000, %1000, %800);
@BOX 6.1
END
@END

@TITLE CONSYS.SYS03(31,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 = 8, MAX.SEG.SIZE = 256,
   DRUM.BLOCK.SIZE.BIT.VEC.SIZE = 2, BLOCK.TABLE.ENTRY.SIZE = 4;
LITERAL / INTEGER  NO.OF.BAD.BLOCKS = 22;
LITERAL / INTEGER NO.OF.DRUM.SECTIONS = 2, MAX.BLOCKS.DRUM.XFER = 16,
   DRUM.FIRST.UNIBUS.PAGE.NO = 272,
   DRUM.SIZE = 26840,
   ALLOCATED.DRUM = 2736, TABLE.AREA.SIZE = 64, SEC.SIZE = 512;
LITERAL / ADDR BAD.BLOCK.TABLE.ADDR = %800A0000;
*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;
LOGICAL8 [NO.OF.DRUM.SECTIONS] DRUM.SECTION.AVAILABLE;
ADDR [LOGICAL8] FREE.BLOCKS, FREE.SUB.TABLES;
VSTORE V.DRUM.PAGE.MAP [MAX.BLOCKS.DRUM.XFER] %80002C40;
VSTORE V.DRUM.BDP.CSR %80002004;
DATAVEC DRUM.SECTION.SIZE (LOGICAL32)
   53728
   53632
END
@BOX 3.1
*CODE 7;
PSPEC INITIALISE.SYS03 ();
#CONSYS.SYS03.1
INITIALISE.SYS03 ();
@END

@TITLE CONSYS.SYS03.1(31,11)
@COL 1S-5R-4R-6R-8F
@FLOW 1-5-4-6-8
@BOX 1.0
INITIALISE SYS03
@BOX 4.0
CREATE POINTERS TO TABLES
@BOX 5.0
SET DRUM INFORMATION
@BOX 6.0
CLEAR PAGE
@BOX 8.0
END
@BOX 1.1
PROC INITIALISE.SYS03;
INTEGER D.SIZE, I;
ADDR TEMP;
ADDR [LOGICAL] PTR;
@BOX 4.1
MAKE (LOGICAL8, NO.OF.DRUM.SECTIONS * DRUM.SIZE / 8 - BLOCK.AREA.ADDR / 8 => D.S
IZE,
   DRUM.DATA.START + %2C00 + REAL.STORE.ADDRESS) => FREE.BLOCKS;
MAKE (LOGICAL8, 1024 / SUB.TABLE.SIZE / 4 * TABLE.AREA.SIZE / 8 => TEMP,
   DRUM.DATA.START + %2C00 + REAL.STORE.ADDRESS + D.SIZE) => FREE.SUB.TABLES;
TEMP +> D.SIZE;
FREE.STORE (DRUM.DATA.START, %10000, %2C00 + D.SIZE);
@BOX 5.1
FOR I < NO.OF.DRUM.SECTIONS DO
   SYSTEM.SPEC [2] ->> I & 1
      => DRUM.SECTION.AVAILABLE [I];
OD
SEC.SIZE => SECTOR.SIZE;
ALLOCATED.DRUM * 1024 / SECTOR.SIZE
   => TABLE.AREA.ADDR;
TABLE.AREA.SIZE * 1024
   + (TABLE.AREA.ADDR * SECTOR.SIZE) / PAGE.SIZE / DRUM.BLOCK.SIZE
   => BLOCK.AREA.ADDR;
DRUM.DATA.START + %2A00 ->> PAGE.SHIFT => CLEAR.PAGE.ADDR;
DRUM.DATA.START + %2800 / SECTOR.SIZE => SECTOR.BUFF.RA;
SECTOR.BUFF.RA * SECTOR.SIZE + REAL.STORE.ADDRESS => SECTOR.BUFF.VA;
%800A0000 => CORE.TABLE.AREA.VA;
%60000 => CORE.TABLE.AREA.RA;
@BOX 6.1
MAKE (LOGICAL, PAGE.SIZE / BYTES.PER.WORD, CLEAR.PAGE.ADDR
   * PAGE.SIZE + REAL.STORE.ADDRESS) => PTR;
FOR I < SIZE (PTR) DO
   0 => PTR^ [I];
OD
@BOX 8.1
END
@END
@TITLE CONSYS.SYS05(31,11)

@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
SYS05 CONFIGURATION
@BOX 2.0
SYS05 LITERALS
@BOX 4.0
LOCATE WHICH MT DEVICES ARE PRESENT
@BOX 1.1
::SYS05 PARAMETERS
@BOX 2.1
LITERAL / INTEGER NO.OF.UNITS = 3, NO.OF.MT.UNITS = 2, FIRST.MT.UNIT = 0,
   NO.OF.ED.UNITS = 1, MAX.MT.TRANSFER = %4000, MT.PAR = %6440,
   MAX.BLOCKS.MT.XFER = 33, ED.BLOCK = 1;
LITERAL / INTEGER SYS05.NO.OF.MT.UNITS = NO.OF.MT.UNITS,
   FIRST.ED.UNIT = NO.OF.MT.UNITS;
LITERAL / INTEGER NO.OF.MT.BLOCKS = NO.OF.MT.UNITS * MAX.BLOCKS.MT.XFER;
LITERAL / LOGICAL32 MT.FIRST.UNIBUS.PAGE.NO = 0;
VSTORE V.MT.PAGE.MAP [NO.OF.MT.BLOCKS] %80002800;
VSTORE V.MT.BDP.CSR %8000200C;
*GLOBAL 5;
LOGICAL8 [NO.OF.MT.UNITS] UNIT.PRESENT;
@BOX 4.1
*CODE 7;
PSPEC INITIALISE.SYS05 ();
INITIALISE.SYS05 ();
PROC INITIALISE.SYS05;
INTEGER UNIT.NO;
*#%DA %1C %12;:: MTPR #%1C, #IPL
FOR UNIT.NO < NO.OF.MT.UNITS DO
   CHECK.ADDRESS (%1552) => UNIT.PRESENT [UNIT.NO];
OD
*#%DA %1F %12;:: MTPR #%1F, #IPL
END
@END
@TITLE CONSYS.SYS06(31,8)

@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 = 4, BATCH.NO = 15,
   CMD.SUS = 4, TERM.SUS = 1, SYS06.TERM.SUS = TERM.SUS, SYS06.KILL.SUS = %FFFE,
   MESSAGE.SUS = 2, SYS06.MESSAGE.SUS = MESSAGE.SUS,
   IO.SUS = 8, SYS06.IO.SUS = IO.SUS;
@END
@TITLE CONSYS.SYS09(31,8)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS09 CONFIGURATION
@BOX 2.0
SYS09 PARAMETERS
@BOX 4.0
LOCATE WHICH GR DEVICES ARE PRESENT
@BOX 1.1
::SYS09 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.GR.UNITS = 1, MAX.GR.TRANSFER = %2000, MAX.BLOCKS.GR.XFE
R = 17;
LITERAL / INTEGER SYS09.NO.OF.GR.UNITS = NO.OF.GR.UNITS;
LITERAL / INTEGER NO.OF.GR.BLOCKS = NO.OF.GR.UNITS * MAX.BLOCKS.GR.XFER;
LITERAL / LOGICAL32 GR.FIRST.UNIBUS.PAGE.NO = 320;
DATAVEC GR.PAR (INTEGER)
   0::UNIT.TYPE -GCT
END
DATAVEC GR.MEMORY.RA (INTEGER32)
   -1
END
DATAVEC GR.CHECK.ADDR (INTEGER32)
   %FE0
END
VSTORE V.GR.PAGE.MAP [NO.OF.GR.BLOCKS] %80002D00;
VSTORE V.GR.BDP.CSR %80002008;
*GLOBAL 5;
LOGICAL8 [NO.OF.GR.UNITS] GR.UNIT.PRESENT;
@BOX 4.1
*CODE 7;
PSPEC INITIALISE.SYS09 ();
INITIALISE.SYS09 ();
PROC INITIALISE.SYS09;
INTEGER UNIT.NO;
*#%DA %1C %12;:: MTPR #%1C, #IPL
FOR UNIT.NO < NO.OF.GR.UNITS DO
   CHECK.ADDRESS (GR.CHECK.ADDR [UNIT.NO]) => GR.UNIT.PRESENT [UNIT.NO];
OD
*#%DA %1F %12;:: MTPR #%1F, #IPL
END
@END

@TITLE CONSYS.SYS10(31,8)

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

@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(31,8)

@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS13 CONFIGURATION
@BOX 2.0
SYS13 PARAMETERS
@BOX 1.1
:: SYS13 CONFIGURATION
@BOX 2.1
:: LITERAL / INTEGER NO.OF.PROCS = 64;
:: LITERAL / INTEGER SYS13.NO.OF.PROCS = NO.OF.PROCS;
LITERAL / INTEGER PRIVI.UID = 1, PRBS.PER.SEG = 128,
   PRB.SIZE = 512, PZ.PRB.RA = %4400, NO.OF.SUPS = 3;
DATAVEC SUP.NAME (LOGICAL64)
   "JOB"
   "FILMAN"
   "FILMAN10"
END

PSPEC START.PROC ();
*GLOBAL 27;
DATAVEC SUP.START (ADDR START.PROC)
   JOB
   FILE.MANAGER
   FILE.MANAGER10
END
*GLOBAL 5;
@END

@TITLE CONSYS.SYS14(31,11)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
SYS14 CONFIGURATION
@BOX 2.0
SYS14 PARAMETERS
@BOX 4.0
SEGMENT TABLE INITIALISATION
@BOX 1.1
:: SYS14 CONFIGURATION
@BOX 2.1
*GLOBAL 5;
LITERAL / INTEGER NO.OF.LOCAL.SEGS = 64, NO.OF.X.SEGS = 16;
LITERAL / INTEGER NO.OF.COMMON.SEGS = 55, NO.OF.SYS.SEGS = 256, NO.OF.INITIAL.SE
GS = 38;
LITERAL / INTEGER FIRST.X.SEG = NO.OF.LOCAL.SEGS;
LITERAL / INTEGER FIRST.COMMON.SEG = 32768 - NO.OF.COMMON.SEGS;
LITERAL / LOGICAL PAGE.FIELD = %1FFFFF, PAGE.STATUS = %1800000, IN.CORE = %80000
0,
   LOCKOUT = %1800000, ALTERED = %4000000, VALID = %80000000, PROTECTED = 1;
LITERAL / INTEGER NO.OF.INITIAL.DATA.SEGS = NO.OF.INITIAL.SEGS + 4,
   PT.SEG = 32752, PT.SEG.SSN = 15;
LITERAL / INTEGER SEG.SIZE = %10000, SEG.SHIFT = 16, X.SEG.SIZE = %1000,
  LOCKED.SIZE = 0;
LITERAL / INTEGER SYS14.SEG.SIZE = SEG.SIZE, SYS14.SEG.SHIFT = SEG.SHIFT, SYS14.
X.SEG.SIZE = X.SEG.SIZE,
   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.PT.SEG = PT.SEG, SYS14.REAL.STORE.ADDRESS = REAL.STORE.ADDRESS, SYS14.F
IRST.COMMON.SEG = FIRST.COMMON.SEG,
   SYS14.NO.OF.COMMON.SEGS = NO.OF.COMMON.SEGS,
   SYS14.NO.OF.X.SEGS = NO.OF.X.SEGS, SYS14.PT.SIZE = PAGE.SIZE;
LITERAL / INTEGER SYS14.IO.BUF.SEG = 0, SYS14.IO.BUF.SEG.2 = 0,
   PAGED.DATA.SEG = 32762, PAGED.DATA.MAPPED.SEG = PAGED.DATA.SEG,
   PRB.SEG = 32761, PRB.MAPPED.SEG = PRB.SEG, CPRB.MAPPED.SEG = PRB.SEG,
   MBUF.SEG = 32759, MBUF.MAPPED.SEG = MBUF.SEG,
   INITIAL.DATA.SEG = 32755, INITIAL.DATA.MAPPED.SEG = INITIAL.DATA.SEG,
   FILE.SEG = 32751, FILE.MAPPED.SEG = FILE.SEG,
   CATALOGUE.MAPPED.SEG = 0, PERMIT.MAPPED.SEG = 0,
   AUL.CORE.SEG = 32748, AUL.MAPPED.SEG = AUL.CORE.SEG, AUL.INT.MAPPED.SEG = 0,
   ACCS.MAPPED.SEG = 0, RESERVED.BLOCK1 = 1, RESERVED.BLOCK2 = 2;
LITERAL / INTEGER MAIN.LIB.DIR.SEG = 32754;
VSTORE C.HST [NO.OF.COMMON.SEGS] %80003024; ::CHANGE IF NO.OF.COMMON.SEGS CHANGE
S;
VSTORE HST [NO.OF.LOCAL.SEGS] %80003100;
LITERAL / INTEGER P0.BASE = %80018000;
LITERAL / INTEGER P1.BASE = %18000 - %800000 & %7FFFFFFF;
LITERAL / INTEGER P0.LIMIT = NO.OF.LOCAL.SEGS * SEG.SIZE / PAGE.SIZE;
LITERAL / INTEGER H.CST.SIZE = NO.OF.COMMON.SEGS * SEG.SIZE / PAGE.SIZE;
LITERAL / INTEGER P1.LIMIT = %200000 - H.CST.SIZE;
@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(31,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
DEPENDENT 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, PD.SIZE;
@BOX 2.1
MAKE (SYS14.CMT.TYPE, NO.OF.PAGES, SSDD.AREA.START)
   => SYS14.CMT;
4 * NO.OF.PAGES +> SSDD.AREA.START;
MAKE (INTEGER8, NO.OF.PAGES, SSDD.AREA.START)
   => SYS14.USAGE.COUNT;
NO.OF.PAGES +> SSDD.AREA.START;
MAKE (INTEGER16, NO.OF.PAGES, SSDD.AREA.START)
   => SYS14.LOCKIN;
2 * NO.OF.PAGES +> SSDD.AREA.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
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
   %10000000 => SYS14.SST.PT [SEG];
   IF CORE.ADDRS [SEG] /= 0 THEN
      VALID ! CORE.ADDRS [SEG] ! IN.CORE !> SYS14.SST.PT [SEG];
      14 => SSN OF SYS14.CMT^ [CORE.ADDRS [SEG]];
      SEG => BLOCK OF SYS14.CMT^ [CORE.ADDRS [SEG]];
   FI
   LIMITS [SEG] => LIMIT OF SYS14.SST [SEG];
   SEG => SSN OF SYS14.CST [NO.OF.COMMON.SEGS - SEG - 1];
   ACCESS [SEG] => ACCESS OF SYS14.CST [NO.OF.COMMON.SEGS - SEG - 1];
   SYS03.INITIALISE.DRUM.SEGMENT (SEG, D.ADDR / 16, LIMITS [SEG],
      PRE.LOADED [SEG]);
OD
@BOX 5.1
FOR I < 256 DO
   %40000000 => STORE [%1180 + I];
OD
IN.CORE ! VALID ! 34 !> STORE [%1180];
6 => SSN OF SYS14.CMT^ [34];
0 => BLOCK OF SYS14.CMT^ [34];
1 => PAGE.COUNT OF SYS14.SST [6];
SYSTEM.SPEC [4] ->> PAGE.SHIFT => PD.SIZE;
FOR I < PD.SIZE DO
   64 + I => TEMP;
   IN.CORE ! VALID ! TEMP !> STORE [%1200 + I];
   5 => SSN OF SYS14.CMT^ [TEMP];
   I => BLOCK OF SYS14.CMT^ [TEMP];
   0 => SYS14.LOCKIN^ [TEMP];
   1 +> PAGE.COUNT OF SYS14.SST [5];
OD
FREE.STORE (%4000, %4000, %A00);
FREE.STORE (%8000, %8000, PD.SIZE * PAGE.SIZE);
@BOX 6.1
END
@END

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

@COL 1S
@BOX 1.0
DATAVECS FOR SEGMENT TABLE INITIALISATION
@BOX 1.1
DATAVEC LIMITS (INTEGER16)
     0    64    64   128
   128   128    64   128
   128   128     2     0
    12    16     0     0
   128     0     0    16
     0
   128   128   128   128
   128   128   64
   128   128   128   128
    16    64   128    80
   128    64     1    8
   16 16
END
DATAVEC CORE.ADDRS (INTEGER16)
     0     0     0     0
     0    36    35     0
     0     0     0     0
     0     0    33    32
     0     0     0     0
     0
     0 [21]
END
DATAVEC ACCESS (LOGICAL8)
     0   %85   %86   %85
   %8D   %86   %86   %86
   %86   %86     0     0
   %85   %8C   %86   %86
   %86     0     0   %86
     0
   %8D     0     0     0
   %8D   %8D   %8D     0
     0     0     0     0
   %8D   %8D     0   %8D
   %8D     0     0     0
     0
END
DATAVEC PRE.LOADED (LOGICAL8)
   0 1 1 1
   1 0 0 0
   0 0 1 1
   1 1 0 0
   0 0 0 0
   0 1 0 0
   0 1 1 1
   0 0 0 0
   0 1 1 0
   1 1 0 0
   0 0
END
*GLOBAL 5;
DATAVEC DRUM.ADDRS1 (INTEGER)
         0     80    208    400
       544   3312   3440   3568
      3696   3824     33     49
       368    528      0      0
      3952      0      0   4080
         0   1312      0      0
         0    992   1120   1248
         0      0      0      0
         0    800   1440      0
       864    672      0     17
         1    336
END
DATAVEC DRUM.ADDRS2 (INTEGER)
         0   1680   1808   2000
      2144   3312   3440   3568
      3696   3824     33     49
      1968   2128      0      0
      3952      0      0   4080
         0   2912      0      0
         0   2592   2720   2848
         0      0      0      0
         0   2400   3040      0
      2464   2272      0     17
         1   1936
END
@END

@TITLE CONSYS.SYS15(31,8)

@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 NO.OF.BUFFERS = 1024;
LITERAL /INTEGER NO.OF.BUFFERS.BIT.VEC.SIZE = 128;
LITERAL / INTEGER MBUFS.PER.SEG = 512, RESPONSE.TIME = 300;
@END
@TITLE CONSYS.SYS16(31,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 = 380, 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,
   SYS.MB.START.ADDR = 4432, USER.MB.START.ADDR = 4448,
   DIR.ENTRY.SIZE = %2C, USER.MB.ENTRY.SIZE = %20;
@END

@TITLE CONSYS.SYS17(31,10)

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

@BOX 1.0
SYS17 CONFIGURATION
@BOX 2.0
SYS17 PARAMETERS
@BOX 1.1
::SYS17 CONFIGURATION
@BOX 2.1
*GLOBAL 12;
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 = 5, 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 = 16 , DAILY.LIMIT = 2, MAX.BAL
ANCE = %7FFFFFFF;
LITERAL / INTEGER AUL.DRUM.SITE.1 = 4400, AUL.DRUM.SITE.2 = 4416, AUL.FILLER.SIZ
E = 492, AUL.UPDATE.PERIOD = 60;
DATAVEC PRIVI.USER.NAMES (LOGICAL64)
   "SYSTEM"
   "PRIVI"
   "MU6S"
   "MU6C"
   "MUSM"
END
DATAVEC PRIVI.USER.PASSWDS (LOGICAL64)
   "MANAGER"
   "LEGED"
   "RULES"
   "X"
   "MSUM"
END
DATAVEC PRIVI.USER.SUPERS (INTEGER8)
   -1
   0 [4]
END
DATAVEC PRIVI.SYS.UPS (INTEGER)
   ::USER "SYSTEM"
   %7FFFFFFF::OUTPUT BAL
   %7FFFFFFF::CPUTIME BAL
   %7FFFFFFF::OUTPUT INC
   %7FFFFFFF::CPUTIME INC
   %7FFFFFFF::NO.FILES
   %7FFFFFFF::FILESTORE
   %7FFFFFFF::SUBORDS
   ::USER "PRIVI"
   0 [7]
   ::USER "MU6S"
   0 [7]
   ::USER "MU6C"
   0 [7]
   ::USER "MUSM"
   0 [7]
END
@END

@TITLE CONSYS.SYS18(31,8)
@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS18 CONFIGURATION
@BOX 2.0
SYS18 PARAMETERS
@BOX 1.1
:: SYS18 CONFIGURATION
@BOX 2.1
LITERAL NO.OF.MCS = 16;
*GLOBAL 5;
DATAVEC MC.NAME (LOGICAL64)
   "PDP34"
   "VAX"
   "PDP44"
   "MU5"
   0 [12]
END
LITERAL NO.OF.SUP.PROCS = 8;
*GLOBAL 12;
DATAVEC MC.CHANNEL (INTEGER)
   %0101 :: MACHINE 0 - 11/34
   %0001 :: MACHINE 1 - VAX
   %0301 :: MACHINE 2 - 11/44
   %0101 :: MACHINE 3 - MU5
   0 [12]
END
DATAVEC SUP.PROC.NAME (LOGICAL64)
   "JOB"
   "JOB" "FILMAN"
   "JOB"
   "JOB"
   0 [3]
END
DATAVEC SUP.MC.NAME (LOGICAL64)
   "PDP34"
   "VAX" "VAX"
   "PDP44"
   "MU5"
   0 [3]
END
DATAVEC SUP.SPN (INTEGER)
   %0200
   %0201 %0401
   %0202
   %0203
   0 [3]
END
DATAVEC SUP.PID (INTEGER)
   1
   1 2
   1
   %0201
   0 [3]
END
DATAVEC SUP.CH (INTEGER);
   0
   0 0
   0
   0
   0 [3]
END
@END
@TITLE CONSYS.SYS19(31,11)

@COL 1S-2R-4R
@FLOW 1-2-4
@BOX 1.0
SYS19 CONFIGURATION
@BOX 2.0
SYS19 PARAMETERS
@BOX 4.0
LOCATE WHICH DEVICES ARE PRESENT
@BOX 1.1
::SYS19 INITIALISATION
@BOX 2.1
*GLOBAL 12;
LITERAL / INTEGER PERI.BUFF.SIZE = %80;
LITERAL / INTEGER NO.OF.DEVICES = 68, NO.OF.PERI.CHANNELS = 35, NO.OF.PERI.REROU
TES = 8;
LITERAL / INTEGER NO.OF.P.DEV.TYPES = 6, NO.OF.DEVICE.CLASSES = 6;
LITERAL / INTEGER NO.OF.PRESET.DEVICES = 3, CONFIG.SIZE = NO.OF.PRESET.DEVICES *
 4;
LITERAL / INTEGER SYS19.NO.OF.DEVICES = NO.OF.DEVICES,
   SYS19.NO.OF.PERI.CHANNELS = NO.OF.PERI.CHANNELS,
   SYS19.PERI.BUFF.SIZE = PERI.BUFF.SIZE,
   SYS19.NO.OF.P.DEV.TYPES = NO.OF.P.DEV.TYPES, SYS19.NO.OF.COMMS.DEVICES = 8,
   SYS19.OPR.IN.DEV.NO = 1;
LITERAL / INTEGER SYS19.NO.OF.GROUPS = NO.OF.DEVICES - 1 / 16 + 1;
LITERAL / INTEGER SYS19.TALK.OUT.DEVICE.CLASS = 5, SYS19.TALK.IN.DEVICE.CLASS =
4,
   SYS19.TALK.OUT.DEV.NO = 0, SYS19.TALK.PERI.CHANNEL = %14;
LITERAL / ADDR COMMS.BUFFER.VA = %80070000;
LITERAL / LOGICAL32 COMMS.BUFFER.RA = %80070000;
::PERI BUFFS FOLLOW APPENDIX COMMS BUFFERS
LITERAL / ADDR PERI.BUFF.VA = %80070040;
LITERAL / LOGICAL32 PERI.BUFF.RA = %30040;
#CONSYS.SYS19/1
LITERAL / INTEGER NO.OF.PERI.PROCS = 16;
DATAVEC PERI.NAME (LOGICAL64)
   "LPT"
   "OPR"
   "LPT34"
   "PTP34"
   "OPR34"
   "LPT44"
   "PTP44"
   "OPR44"
   0 [8]
END
DATAVEC PERI.SPN (LOGICAL)
   %0301
   %0301
   %1300
   %1100
   %1500
   %1302
   %1102
   %1502
   0 [8]
END
*GLOBAL 5;
DATAVEC SYS19.MAX.DATA.TRANSFER (INTEGER)
   %200 ::CHARACTER INPUT
   %200 ::CHARACTER OUTPUT
   %200 ::COMMUNICATIONS INPUT
   %200 ::COMMUNICATIONS OUTPUT
END
DATAVEC DEVICES.PER.P.DEV.TYPE (INTEGER)
   0 ::EMPTY
   1 ::CONSOLE INPUT
   1 ::CONSOLE OUTPUT
   NO.OF.DZ11.DEVICES ::DZ11 INPUT
   NO.OF.DZ11.DEVICES ::DZ11 OUTPUT
   NO.OF.LP11S ::LPT
END
@BOX 4.1
*CODE 7;
FREE.STORE (IO.DATA.START, %8000, PERI.BUFF.SIZE * NO.OF.DEVICES +
   (8 * SYS19.NO.OF.COMMS.DEVICES));
FREE.STORE (IO.DATA.START + %8000, %8000, NO.OF.DEVICES * %80);
@END
@TITLE CONSYS.SYS19/1(31,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         %0000           %00000            %FFFFFFFF
     %1012E         %0203           %14830                 2
     %1002C         %0102           %148F1                 1
END
@END

@TITLE CONSYS.SYS20(31,10)
@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 INITIALISATION
@BOX 2.1
*GLOBAL 5;
LITERAL / INTEGER NO.OF.TASKS = 10;
LITERAL / INTEGER IO.BUF.SEG = 0, IO.BUF.BLK = 1, IO.MSEG = 0;
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 / INTEGER SYS20.DRUM.TASK = %80000000, SYS20.INIT.ACCOUNTS.TASK = %40000
000,
   SYS20.INIT.FILE.TASK = %20000000,
   SYS20.FILE.TASK = %10000000, SYS20.IO.TASK = %08000000,
   SYS20.INIT.DEV.TASK = %04000000, SYS20.SET.UP.TASK = %02000000,
   SYS20.TERM.PROC.TASK = %01000000, SYS20.INIT.SUP.TASK = %00800000,
   SYS20.ESM.TASK = %00400000;
*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;
TYPE TASK.PROC.ADDR IS
   ADDR TASK.PROC TSK.PROC
OR
   LOGICAL TSK.ADDR;
TASK.PROC.ADDR TSK.PROC.ADDR;
ADDR [LOGICAL] PCB.PTR;
ADDR SYS14.SEG.VARS PZ.SEG.VARS;
^PCB OF PCBS [0] => PCB.PTR;
SYS14.SEG.SIZE - RESERVED.STACK.BOTTOM => PCB.PTR^ [1] => PCB.PTR^ [17];
^SYS20.TASK.LOOP => TSK.PROC OF TSK.PROC.ADDR;
TSK.ADDR OF TSK.PROC.ADDR + 2 => PCB.PTR^ [18];
%01400000 => PCB.PTR^ [19];
P0.BASE => PCB.PTR^ [20];
P0.LIMIT ! %4000000 => PCB.PTR^ [21];
P1.BASE => PCB.PTR^ [22];
P1.LIMIT => PCB.PTR^ [23];
1 => STORE [%1100];
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(31,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(31,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

