@X @~
~L3 COUK1247
80
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H             AP3211
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL
~
~
                                                                     ISSUE 11~
~V9 -1
~P
~V9 1
~YAP3211
~S1~M~OAP3 IMPLEMENTATION DESCRIPTION~
~S1~M~OSection 21 Version 1~
~S1~OSection 21.1 Bootstrap~
~S1~O1. General Description~
~BThis module provides the bootstrap for bringing the system into
core from an RK07 disc.~
~S1~O2. Interfaces~
RK07 hardware registers used~
~3
   (AP3 name)              (DEC name)~
   V.RK07.CSR                 RKCS1~
   V.RK07.COUNT               RKWC~
   V.RK07.CADRR               RKBA~
   V.RK07.DADDR               RKDA~
   V.RK07.STAT1               RKCS2~
   V.RK07.STAT2               RKDS~
   V.RK07.CYL                 RKDC~
~0
~S1~O3. Implementation~
~S1~O3.1 Outline of Operation~
~BThe operation of this module is obvious from the flowcharts.
~S1~O3.2 Data Structures~
~
None.
~S1~O3.3 Special Notes
~BNone~
~Y
~V9 -1
~P
~D15
~HFLOWCHARTS
~
~
~H                AP3211
~V9 -1
~F
@TITLE AP321(1,9)

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

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

@BOX 1.0
BOOTSTRAP
@BOX 4.0
PROCEDURES IN MODULE:
   1 COPY BOOTSTRAP
   2 BOOTSTRAP
@BOX 1.1
MODULE BOOTSTRAP;
@BOX 3.1
VSTORE STORE [%10000000] %0;
VSTORE SYS.VERSION.NO %11210;
VSTORE SYS.PT.SIZE %11208;
VSTORE SYS.STORE.SIZE %1120C;
VSTORE FIXED.ADDRESS1 %3F000;
VSTORE FIXED.ADDRESS2 %3F004;
VSTORE FIXED.ADDRESS3 %3F008;
VSTORE V.UNIBUS.MAP [%100] %F30800;
VSTORE V.MEMORY.CSR.2 %F20008;
*VTYPE LOGICAL16;
VSTORE V.RK07.CSR %FFFF20;
VSTORE V.RK07.COUNT %FFFF22;
VSTORE V.RK07.CADDR %FFFF24;
VSTORE V.RK07.DADDR %FFFF26;
VSTORE V.RK07.STAT1 %FFFF28;
VSTORE V.RK07.STAT2 %FFFF2A;
VSTORE V.RK07.CYL %FFFF30;
*VTYPE LOGICAL;
@BOX 4.1
*CODE 3;
PSPEC DUMMY.COPY.BOOTSTRAP ();
*#%00 %00;::PACKING
*#%00 %00;
*#%00 %00 %00 %00;
*#%00 %00 %00 %00;
PROC DUMMY.COPY.BOOTSTRAP;
END
*CODE 2;
*#%00 %00;::PACKING
*#%00 %00;
*#%00 %00 %00 %00;
*#%00 %00 %00 %00;
PSPEC COPY.BOOTSTRAP ();
PSPEC READ.SYSTEM ();
   #AP321.1
   #AP321.2
@BOX 5.1
*#%D0 %8F %00 %F0;::MOVL I^#X0003F000, SP
*#%03 %00 %5E;::
DUMMY.COPY.BOOTSTRAP ();
READ.SYSTEM ();
*#%17 %9F %00 %E8;::JMP I^#%1E800
*#%01 %00;::
@BOX 6.1
*END
@END
@TITLE AP321.1(1,6)

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

@FLOW 1-2-3-4

@BOX 1.0
COPY BOOTSTRAP
@BOX 2.0
COPY BOOTSTRAP TO TOP
OF STORE
@BOX 3.0
SET STACKED PC TO NEW
POSITION
@BOX 4.0
END
@BOX 1.1
PROC COPY.BOOTSTRAP;
INTEGER PTR;
@BOX 2.1
FOR PTR < 1024 DO
   STORE [PTR] => STORE [PTR + %F000];
OD
@BOX 3.1
*#%C8 %8F %00 %C0; ::BISL2 I^#X3C000, B^16(R13)
*#%03 %00 %AD %10;::
@BOX 4.1
END
@END
@TITLE AP321.2(1,11)

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

@FLOW 1-2-3-4

@BOX 1.0
READ SYSTEM
@BOX 2.0
SET VERSION NUMBER
@BOX 3.0
READ IN SYSTEM
@BOX 4.0
END
@BOX 1.1
PROC READ.SYSTEM;
INTEGER VERSION, I, J, CORE.ADDR, CYL, TRACK, SECTOR;
LITERAL NO.OF.TRANS = 6, VERS.DISP = 594;
DATAVEC DISC.ADDR (LOGICAL)
    67  70 191
   571 604 53789
END
DATAVEC CORE.PAGE (LOGICAL16)
   0 17 137
   230 244 259
END
DATAVEC TRAN.SIZE (LOGICAL16)
   2 120 88
   8 15 1
END
@BOX 2.1
IF V.RK07.DADDR > 10 THEN
   1 => VERSION;
ELSE
   0 => VERSION;
FI
@BOX 3.1
FOR I < NO.OF.TRANS DO
   CORE.PAGE [I] => CORE.ADDR;
   FOR J < TRAN.SIZE [I] DO
      CORE.ADDR ! %80000000 => V.UNIBUS.MAP [J];
      1 +> CORE.ADDR;
   OD
   IF I /= 5 THEN
      VERSION * VERS.DISP + DISC.ADDR [I] => SECTOR;
   ELSE
      DISC.ADDR [I] => SECTOR;
   FI
   SECTOR / 66 => CYL => V.RK07.CYL;
   CYL * 66 -> SECTOR / 22 => TRACK;
   TRACK * 22 -> SECTOR;
   TRACK * 256 ! SECTOR => V.RK07.DADDR;
   -256 * TRAN.SIZE [I] => V.RK07.COUNT;
   0 => V.RK07.CADDR;
   %411 => V.RK07.CSR;
WHILE V.RK07.CSR & %80 /= %80 OR V.RK07.STAT2 & %8080 /= %8080 DO OD
OD
VERSION => SYS.VERSION.NO;
@BOX 4.1
END
@END

