@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H    CONSYS72
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
                                                       ISSUE 11~
~V9 -1
~P
~V9 1
~YCONSYS72
~S~M~OAP7 IMPLEMENTATION DESCRIPTION~
~S~M~OSystem Configuration Version 2
~S~OSystem Configuration - MU6G Front-end PDP11
~S~O1. Core Layout after Bootstrapping
~T^ 30
~
~
Core Address^Contents~
0^Interrupt and Trap Vectors~
%200^Fixed Stores~
%280^Interrupt Stacks~
%580^Control Message Buffers~
%640^Comms Buffers~
%680^I/O Buffers~
%2E40^Global Variables~
%5000^Initialisation Code~
%6000^Compiler Registers~
%6100^System Code~
%E000^Peripheral Registers~
~S~O2.  Compile Jobs~
~S12.1  System compile (Front end processor)~
~
~
Files produced~
~
BFEP7100 Locked system code~
BFEP7110 Global data~
BFEP7120 Initialisation code~
~
::BEGIN COMPSYS~
DO 0 FEP71LOG %200~
LIB MRDX2~
LIB MTLX2~
LIB MSLX~
LIB L2X2~
FLIP MU6S:CONSYS72 1~
CONSYS~
DI 4~
MUSL~
*INIT %1603;~
**TLSEG %5900 %6100 10~
**TLSEG %4E00 %200 11~
**TLSEG %800 %5000 12~
*TLLOAD 1 2; ::CODE~
*TLLOAD 2 5; ::DATA~
*TLLOAD 3 7; ::INITIALISATION CODE~
*TLLOAD 1 23; ::IO APPENDIX CODE~
*TLLOAD 2 24; ::OVERRUN BUFFERS~
**SI 4~
FLIP MU6S:AP7012 1~
AP701~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP1031 1~
AP103~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7042 1~
AP704.DZ11~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7051 1~
AP705~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7071 1~
AP707.LP11~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7081 1~
AP708.CONS~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7091 1~
AP709~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7101 1~
AP710.CNET~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7121 1~
AP712.PC11~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:AP7131 1~
AP713.PR11~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP MU6S:SYS011 1~
SYS01~
DI 4~
MUSL~
*INIT 1;~
**SI 4~
FLIP AP2991 1~
AP299~
DI 4~
MUSL 0 BFEP71~
*INIT 5;~
**SI 4~
CHANGESIZE 10 %6000~
FILE BFEP7100 0 10~
CHANGESIZE 11 %5000~
FILE BFEP7110 0 11~
CHANGESIZE 12 %800~
FILE BFEP7120 0 12~
LF~
DEL BFEP71~
STOP~
::END COMPSYS~
~Y
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H    CONSYS72
~V9 -1
~F
@TITLE CONSYS(72,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 MU6 FRONT-END
PDP11/10
@BOX 6.0
END
@BOX 1.1
#CONSYS/1
#CONSYS/2
@BOX 4.1
::GENERAL PARAMETERS
LITERAL / INTEGER BYTES.PER.WORD = 2, BITS.PER.WORD = 16;
LITERAL / INTEGER BUFFER.BLOCK.SIZE = 10240, SHORT.MESSAGE.LENGTH = 128;
VSTORE STORE [%FFFF] %0;
@BOX 5.1
*GLOBAL 5;
DATAVEC FIXED.ADDRESSES (LOGICAL16)
   0 [%40]
END
DATAVEC INTERRUPT.STACKS (LOGICAL16)
   0 [%140]
END
LOGICAL8 [SHORT.MESSAGE.LENGTH] REC.MESSAGE;
LOGICAL8 [SHORT.MESSAGE.LENGTH] TRANS.MESSAGE;
LOGICAL8 [SHORT.MESSAGE.LENGTH] REQ.MESSAGE;
DATAVEC BUFFER.BLOCK (LOGICAL8)
   0 [BUFFER.BLOCK.SIZE]
END
VSTORE I.CH.TABLE.PTR %222;
VSTORE O.CH.TABLE.PTR %224;
*CODE 7;
::LEAVE STACK POINTER
::AT MONITOR STACK
LITERAL / INTEGER REAL.STORE.ADDRESS = 0;
*GLOBAL 5;
#CONSYS.SYS01
#CONSYS.APP
#CONSYS.SYS19
#CONSYS.CIU
@BOX 6.1
*END
@END
@TITLE CONSYS/1(72,11)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
OTHER MODULES REFERENCED
@BOX 1.1
::EXTERNAL ENVIRONMENT
@BOX 3.1
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 CNET.I.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC CNET.O.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC PC11.O.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC PR11.I.CONTROL (INTEGER, INTEGER, ADDR, LOGICAL, LOGICAL32) / LOGICAL32;
PSPEC DZ11.POLL ();
PSPEC LP11.POLL ();
PSPEC PC11.POLL ();
PSPEC PR11.POLL ();
PSPEC IO.INTERRUPT ();
PSPEC IO.RECEIVE () / LOGICAL32;
PSPEC IO.INFORM ();
PSPEC IO.RESET ();
PSPEC CIU.INTERRUPT ();
IMPORT LABEL PDP11.APPENDIX.INT;
@END
@TITLE CONSYS/2(72,11)
@COL 1S
@BOX 1.0
EXPORT LIST
@BOX 1.1
MODULE (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,
   INITIAL.KERNEL.STACK, SYS01.INT.ACTIVITIES, INT.ACTIVITIES, CHECKPOINT.HALT,
   NO.OF.ACTIVITIES, NO.OF.HALTS, SYS01.IO.ACTIVITY, ACTIVITY.LINK,
   REAL.STORE.ADDRESS, NO.OF.P.DEV.TYPES, COMMS.BUFFER.VA, COMMS.BUFFER.RA,
   SYS19.NO.OF.DEVICES, SYS19.NO.OF.P.DEV.TYPES, SYS19.NO.OF.COMMS.DEVICES,
   SYS19.MU6.IO.ADDR, SYS19.BUFFER.BLOCK.ADDR, SYS19.LARGE.BUFFER.SIZE,
   SYS19.SMALL.BUFFER.SIZE, SYS19.NO.OF.LARGE.BUFFERS, SYS19.NO.OF.SMALL.BUFFERS
,
   IO.P.DEV.NO.CONVERSION, SYS19.NO.OF.RECEIVE.ADDRS, CIU.SHIFT.VAL,
   CIU.CONTROL.REG, CIU.RX.REG, CIU.TR.REG, CIU.NO.WORDS.REG,
   RECEIVE.PROCS, RESET.PROCS, INFORM.PROCS, SYS14.MAP.ADDRESS,
   REC.MESSAGE, TRANS.MESSAGE, REQ.MESSAGE, SHORT.MESSAGE.LENGTH,
   REC.MESSAGE.RA, TRANS.MESSAGE.RA, REQ.MESSAGE.RA,
   SYS19.NO.OF.GROUPS, CNET.ADDR, CNET.DST.ADDR, CNET.VEC,
   CNET.SRC.ADDR, NO.OF.PC11S, PC11.ADDRS, PR11.ADDR);
@END
@TITLE CONSYS.APP(72,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
APPENDIX CONFIGURATION
@BOX 2.0
APPENDIX DECLARATIONS
@BOX 3.0
INITIALISATION CODE
@BOX 1.1
::APPENDIX CONFIGURATION
@BOX 2.1
::I/O APPENDIX CONFIGURATION
#CONSYS.APP/1
@BOX 3.1
*CODE 7;
PSPEC APP.INITIALISE ();
APP.INITIALISE ();
APP.IO.INITIALISE ();
PROC APP.INITIALISE;
INTEGER PTR;
::INITIALISE INTERRUPT VECTORS TO POINT TO %0
-1 => PTR;
WHILE PTR < %FF DO
   0 => STORE [1 +> PTR];
   %E0 => STORE [1 +> PTR];
OD
::PLANT RTI AT LOCATION %0
%0002 => STORE [0];
END
@END
@TITLE CONSYS.APP/1(72,11)
@COL 1S-2R
@FLOW 1-2
@BOX 1.0
I/O APPENDIX CONFIGURATION
@BOX 2.0
INITIALISE I/O VARIABLES
@BOX 1.1
LITERAL / INTEGER NO.OF.DZ11S = 2;
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, NO.OF.PC11S = 1;
LITERAL / ADDR CNET.ADDR = %FB00, CNET.DST.ADDR = %8887,
   CNET.SRC.ADDR = %8888, CNET.VEC = %3C, PR11.ADDR = %FF68;
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 IO.P.DEV.NO.CONVERSION (LOGICAL32)
   0       ::DUMMY
   %1000F  ::CONSOLE INPUT
   %2000F  ::CONSOLE OUTPUT
   %500F0  ::LPT
   %3000F  ::DZ11 (0)
   %3010F  ::DZ11 (1)
   %600F0  ::CENTRENET INPUT
   %700F0  ::CENTRENET OUTPUT
   %800F0  ::PAPER TAPE READER
   %900F0  ::PAPER TAPE PUNCH
   0 [6]   ::SPARE
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
   CNET.I.CONTROL
   CNET.O.CONTROL
   PR11.I.CONTROL
   PC11.O.CONTROL
END
PSPEC DUMMY.POLL.PROC ();
DATAVEC POLL.PROCS (ADDR DUMMY.POLL.PROC);
   DUMMY.POLL.PROC [3]
   DZ11.POLL
   DUMMY.POLL.PROC
   LP11.POLL
   DUMMY.POLL.PROC [2]
   PR11.POLL
   PC11.POLL
END
ADDR [NO.OF.DZ11S] DZ11.ADDRS;
ADDR [NO.OF.LP11S] LP11.ADDRS;
ADDR [NO.OF.PC11S] PC11.ADDRS;
*CODE 2;
PROC DUMMY.WRITE.PROC (P1, P2, P3, P4, P5);
END
PROC DUMMY.POLL.PROC;
END
PSPEC SYS14.MAP.ADDRESS (INTEGER32, INTEGER) / ADDR [LOGICAL8];
PROC SYS14.MAP.ADDRESS (ADDRESS, DUMMY);
MAKE (LOGICAL8, %7FFF, ADDRESS) => SYS14.MAP.ADDRESS;
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;
%E040 => DZ11.ADDRS [0];
%E048 => DZ11.ADDRS [1];
%E050 => DZ11.ADDRS [2];
%FF4C => LP11.ADDRS [0];
%FF6C => PC11.ADDRS [0];
END
@END
@TITLE CONSYS.SYS01(72,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
SYS01 CONFIGURATION
@BOX 2.0
SYS01 PARAMETERS
@BOX 3.0
INITIALISE KERNEL STACK
AND ACTIVITY LINKS
@BOX 1.1
::SYS01 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER NO.OF.ACTIVITIES = 16, NO.OF.INT.ACTIVITIES = 8,
   NO.OF.HALTS = 1, CHECKPOINT.HALT = 0;
LITERAL / LOGICAL INT.ACTIVITIES = %FF00, SYS01.INT.ACTIVITIES = INT.ACTIVITIES,
   SYS01.IO.ACTIVITY = %4000;
*CODE 2;
PSPEC EMPTY.ACTIVITY ();
PROC EMPTY.ACTIVITY;
*#%0000  ::HALT;
END
*CODE 7;
DATAVEC INITIAL.KERNEL.STACK (ADDR)
   %480 %380 %480 [14]
END
ADDR [NO.OF.ACTIVITIES] ACTIVITY.LINK;
PSPEC INT.PROC ();
DATAVEC ACTIVITY.ENTRY (ADDR INT.PROC)
   EMPTY.ACTIVITY
   IO.INTERRUPT
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
   EMPTY.ACTIVITY
END
@BOX 3.1
PSPEC INITIALISE.SYS01 ();
PROC INITIALISE.SYS01;
INTEGER I;
ADDR [LOGICAL16] WORD.PTR;
MAKE (LOGICAL16, %C00, 0) => WORD.PTR;
FOR I < NO.OF.ACTIVITIES DO
   BYTE (ACTIVITY.ENTRY [I]) => WORD.PTR^ [INITIAL.KERNEL.STACK [I] ->> 1 - 1];
   INITIAL.KERNEL.STACK [I] => WORD.PTR^ [INITIAL.KERNEL.STACK [I] ->> 1 -2];
   INITIAL.KERNEL.STACK [I] - 4 => ACTIVITY.LINK [I];
OD
END
INITIALISE.SYS01 ();
@END
@TITLE CONSYS.SYS19(72,11)
@COL 1S-2R
@FLOW 1-2
@BOX 1.0
SYS19 CONFIGURATION
@BOX 2.0
SYS19 PARAMETERS
@BOX 1.1
::SYS19 CONFIGURATION
@BOX 2.1
LITERAL / INTEGER SYS19.NO.OF.DEVICES = 60, SYS19.NO.OF.P.DEV.TYPES = 10,
   SYS19.NO.OF.GROUPS = SYS19.NO.OF.DEVICES + 15 / 16, SYS19.NO.OF.COMMS.DEVICES
 = 8,
   SYS19.NO.OF.REMOTE.DEVICES = 40,
   SYS19.NO.OF.LARGE.BUFFERS = SYS19.NO.OF.COMMS.DEVICES,
   SYS19.NO.OF.SMALL.BUFFERS = SYS19.NO.OF.REMOTE.DEVICES,
   SYS19.LARGE.BUFFER.SIZE = 512, SYS19.SMALL.BUFFER.SIZE = 128,
   SYS19.NO.OF.RECEIVE.ADDRS = 2;
LITERAL / LOGICAL16 SYS19.MU6.IO.ADDR = %0001;
LITERAL / ADDR COMMS.BUFFER.VA = %0680;
LITERAL / LOGICAL32 COMMS.BUFFER.RA = %00000680,
   SYS19.BUFFER.BLOCK.ADDR = %00000800;
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 ::DZ11 OUTPUT
   NO.OF.LP11S         ::LPT
   1:: CENTRENET INPUT
   1::CENTRENET OUTPUT
   1::PAPER TAPE READER
   1::PAPER TAPE PUNCH
END
@END
@TITLE CONSYS.CIU(72,11)
@COL 1S-2R-3R
@FLOW 1-2-3
@BOX 1.0
CIU CONFIGURATION
@BOX 2.0
CIU PARAMETERS
@BOX 3.0
CIU INITIALISATION
@BOX 1.1
::CIU CONFIGURATION
@BOX 2.1
LITERAL / INTEGER CIU.SHIFT.VAL = 7;
::RA'S OF BUFFERS DECLARED IN CONSYS
LITERAL / ADDR REC.MESSAGE.RA = %500, TRANS.MESSAGE.RA = %580,
   REQ.MESSAGE.RA = %600;
VSTORE CIU.CONTROL.REG %E800;
VSTORE CIU.RX.REG %E80A;
VSTORE CIU.TR.REG %E808;
VSTORE CIU.NO.WORDS.REG %E804;
PSPEC DUMMY.RECEIVE.PROC () / LOGICAL32;
DATAVEC RECEIVE.PROCS (ADDR DUMMY.RECEIVE.PROC)
   DUMMY.RECEIVE.PROC
   IO.RECEIVE
END
PSPEC DUMMY.RESET.PROC ();
DATAVEC RESET.PROCS (ADDR DUMMY.RESET.PROC)
   DUMMY.RESET.PROC
   IO.RESET
END
PSPEC DUMMY.INFORM.PROC ();
DATAVEC INFORM.PROCS (ADDR DUMMY.INFORM.PROC)
   DUMMY.INFORM.PROC
   IO.INFORM
END
*CODE 2;
PROC DUMMY.RECEIVE.PROC;
END
PROC DUMMY.RESET.PROC;
END
PROC DUMMY.INFORM.PROC;
END
RAW.CIU.INT:
*#%17E6;
*#%0220; ::STACK PROC ADDRESS;
-> PDP11.APPENDIX.INT;
@BOX 3.1
*CODE 7;
PSPEC INIT.CIU ();
INIT.CIU ();
PROC INIT.CIU;
*VTYPE LOGICAL16;
VSTORE CIU.INT.PTR %220;
VSTORE INT.STORE [%100] %0;
TYPE PROC.ADDR.TYPE IS
   ADDR CIU.INTERRUPT P
OR
   LOGICAL16 PROC.ADDRESS;
PROC.ADDR.TYPE PROC.ADDR;
RAW.CIU.INT => INT.STORE [%70];
%E0 => INT.STORE [%71];
^CIU.INTERRUPT => P OF PROC.ADDR;
PROC.ADDRESS OF PROC.ADDR => CIU.INT.PTR;
END
@END
