DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦191449f49⟧ TextFile

    Length: 9664 (0x25c0)
    Types: TextFile
    Names: »FDT.N«

Derivation

└─⟦ffe699cee⟧ Bits:30005101 8" CR80 Floppy CR80FD_0060 ( VOL: SCC.V NSC Directories: EVR.D OCP.D SCCINIT.D )
    └─⟦9c1658a4c⟧ 
        └─ ⟦this⟧ »EVR.D!FDT.N« 

TextFile



CONST

UPDATE_REQ_ON = #8000;
BLINK_REQ_ON  = #4000;
BLINK_ON      = #0040;
F_BLACK       = #0000;
F_RED         = #0008;
F_GREEN       = #0010;
F_YELLOW      = #0018;
F_BLUE        = #0020;
F_MAGENTA     = #0028;
F_CYAN        = #0030;
F_WHITE       = #0038;
B_BLACK       = #0000;
B_RED         = #0001;
B_GREEN       = #0002;
B_YELLOW      = #0003;
B_BLUE        = #0004;
B_MAGENTA     = #0005;
B_CYAN        = #0006;
B_WHITE       = #0007;

P_SCC_X       = 4;
P_SCC_Y       = 16;
Q_SCC_X       = 66;
Q_SCC_Y       = 11;

TYPE
COORDINATE    =
  RECORD
    X         : INTEGER;
    Y         : INTEGER;
  END;

DISPLAY_CMD_TABLE  = ARRAY[0..9] OF INTEGER;


SCC_DT =
  RECORD
    D_BODY    : DISPLAY_CMD_TABLE;
    D_ID      : DISPLAY_CMD_TABLE;
    D_NT      : DISPLAY_CMD_TABLE;
  END;

NODE_DT =
  RECORD
    D_BODY    : DISPLAY_CMD_TABLE;
    D_ID      : DISPLAY_CMD_TABLE;
    D_TRUNK   : DISPLAY_CMD_TABLE;
    D_NEIGHBOR: DISPLAY_CMD_TABLE;
  END;

SCC_DISPLAY =
  RECORD
    CENTER         : COORDINATE;
    BODY_USE       : INTEGER;
    ID_USE         : INTEGER;
    NT_CONNECT     : COORDINATE;
    NT_BEND1       : COORDINATE;
    NT_BEND2       : COORDINATE;
    NT_TERM        : COORDINATE;
    NT_DCMD_USE    : INTEGER;
  END;

BODY_TYPE =
  RECORD
    CENTER         : COORDINATE;
    BODY_USE       : INTEGER;
    ID_USE         : INTEGER;
  END;


NM_DISPLAY =
  RECORD
    BODY           : BODY_TYPE;
    TR_CONNECT     : ARRAY[0..7] OF COORDINATE;
    TR_BEND        : ARRAY[0..7] OF COORDINATE;
    NNH_CONNECT    : ARRAY[0..7] OF COORDINATE;
    NNH_BEND       : ARRAY[0..7] OF COORDINATE;
    TRUNK_USE      : ARRAY[0..7] OF INTEGER;
    NNH_USE        : ARRAY[0..7] OF INTEGER;
  END;

FIKS_DISPLAY =
  RECORD
    SCC_TABLE      : SCC_DT;
    COL_SCC        : SCC_DISPLAY;
    REM_SCC        : SCC_DISPLAY;
    NODE_TABLE     : NODE_DT;
    NODEA          : NM_DISPLAY;
    NODEB          : NM_DISPLAY;
    NODEE          : NM_DISPLAY;
    NODEF          : NM_DISPLAY;
    NODEH          : NM_DISPLAY;
    NODEK          : NM_DISPLAY;
    NODEL          : NM_DISPLAY;
    NODEN          : NM_DISPLAY;
  END;

VAR
FIKS_D        : FIKS_DISPLAY;
P_OFFSET      : ARRAY [0..3] OF COORDINATE;
Q_OFFSET      : ARRAY [0..3] OF COORDINATE;
NODE_COFFS    : ARRAY [0..7] OF COORDINATE;
NODE_BOFFS    : ARRAY [0..7] OF COORDINATE;
FNC_T         : STAW;
CONF_T        : FIKS_CONF;

CONST
FNC_OP        = (SREAD + FNC);
INIT
FIKS_D.SCC_TABLE.D_BODY[0]        = B_MAGENTA;
FIKS_D.SCC_TABLE.D_BODY[1]        = B_YELLOW;
FIKS_D.SCC_TABLE.D_BODY[2]        = B_YELLOW;
FIKS_D.SCC_TABLE.D_BODY[3]        = B_YELLOW;
FIKS_D.SCC_TABLE.D_BODY[4]        = B_GREEN;
FIKS_D.SCC_TABLE.D_BODY[5]        = B_GREEN;
FIKS_D.SCC_TABLE.D_BODY[6]        = B_RED;
FIKS_D.SCC_TABLE.D_ID[0]          = B_MAGENTA;
FIKS_D.SCC_TABLE.D_ID[1]          = B_YELLOW;
FIKS_D.SCC_TABLE.D_ID[2]          = B_GREEN;
FIKS_D.SCC_TABLE.D_ID[3]          = B_MAGENTA;
FIKS_D.SCC_TABLE.D_ID[4]          = B_GREEN;
FIKS_D.SCC_TABLE.D_ID[5]          = B_YELLOW;
FIKS_D.SCC_TABLE.D_ID[6]          = B_RED;
FIKS_D.SCC_TABLE.D_NT[0]          = B_GREEN;
FIKS_D.SCC_TABLE.D_NT[1]          = B_GREEN;
FIKS_D.SCC_TABLE.D_NT[2]          = B_YELLOW;
FIKS_D.SCC_TABLE.D_NT[3]          = B_YELLOW;
FIKS_D.SCC_TABLE.D_NT[4]          = B_RED;
FIKS_D.NODE_TABLE.D_BODY[0]       = B_GREEN;
FIKS_D.NODE_TABLE.D_BODY[1]       = B_MAGENTA;
FIKS_D.NODE_TABLE.D_BODY[2]       = B_RED;
FIKS_D.NODE_TABLE.D_BODY[3]       = B_BLACK;
FIKS_D.NODE_TABLE.D_ID[0]         = B_BLACK;
FIKS_D.NODE_TABLE.D_ID[1]         = B_BLACK;
FIKS_D.NODE_TABLE.D_ID[2]         = BLINK_ON;
FIKS_D.NODE_TABLE.D_ID[3]         = B_BLACK;
FIKS_D.NODE_TABLE.D_ID[4]         = B_BLACK;
FIKS_D.NODE_TABLE.D_ID[5]         = BLINK_ON;
FIKS_D.NODE_TABLE.D_TRUNK[0]      = B_BLACK;
FIKS_D.NODE_TABLE.D_TRUNK[1]      = B_RED;
FIKS_D.NODE_TABLE.D_TRUNK[2]      = B_RED;
FIKS_D.NODE_TABLE.D_TRUNK[3]      = (BLINK_ON + F_YELLOW + B_RED);
FIKS_D.NODE_TABLE.D_TRUNK[4]      = (BLINK_ON + F_GREEN + B_RED);
FIKS_D.NODE_TABLE.D_TRUNK[5]      = (F_GREEN + B_YELLOW);
FIKS_D.NODE_TABLE.D_TRUNK[6]      = (BLINK_ON + F_RED + B_YELLOW);
FIKS_D.NODE_TABLE.D_TRUNK[7]      = (F_RED + B_GREEN);
FIKS_D.NODE_TABLE.D_TRUNK[8]      = (BLINK_ON + F_RED + B_GREEN);
FIKS_D.NODE_TABLE.D_NEIGHBOR[0]   = B_BLACK;
FIKS_D.NODE_TABLE.D_NEIGHBOR[1]   = (BLINK_ON + F_RED );
FIKS_D.NODEA.BODY.CENTER.X  = 74;
FIKS_D.NODEA.BODY.CENTER.Y  = 2;
FIKS_D.NODEB.BODY.CENTER.X  = 10;
FIKS_D.NODEB.BODY.CENTER.Y  = 2;
FIKS_D.NODEE.BODY.CENTER.X  = 10;
FIKS_D.NODEE.BODY.CENTER.Y  = 20;
FIKS_D.NODEF.BODY.CENTER.X  = 30;
FIKS_D.NODEF.BODY.CENTER.Y  = 18;
FIKS_D.NODEH.BODY.CENTER.X  = 20;
FIKS_D.NODEH.BODY.CENTER.Y  = 38;
FIKS_D.NODEK.BODY.CENTER.X  = 58;
FIKS_D.NODEK.BODY.CENTER.Y  = 14;
FIKS_D.NODEL.BODY.CENTER.X  = 74;
FIKS_D.NODEL.BODY.CENTER.Y  = 20;
FIKS_D.NODEN.BODY.CENTER.X  = 58;
FIKS_D.NODEN.BODY.CENTER.Y  = 38;
P_OFFSET[0].X           = -1;
P_OFFSET[0].Y           = 8;
P_OFFSET[1].X           = -1;
P_OFFSET[1].Y           = 15;
P_OFFSET[2].X           = 2;
P_OFFSET[2].Y           = 12;
P_OFFSET[3].X           = 2;
P_OFFSET[3].Y           = 19;
Q_OFFSET[0].X           = 4;
Q_OFFSET[0].Y           = -1;
Q_OFFSET[1].X           = 11;
Q_OFFSET[1].Y           = -1;
Q_OFFSET[2].X           = 8;
Q_OFFSET[2].Y           = -4;
Q_OFFSET[3].X           = 15;
Q_OFFSET[3].Y           = -4;
NODE_COFFS[0].X         = 2;
NODE_COFFS[0].Y         = 8;
NODE_COFFS[1].X         = 4;
NODE_COFFS[1].Y         = 4;
NODE_COFFS[2].X         = 4;
NODE_COFFS[2].Y         = -1;
NODE_COFFS[3].X         = 2;
NODE_COFFS[3].Y         = -5;
NODE_COFFS[4].X         = -1;
NODE_COFFS[4].Y         = -5;
NODE_COFFS[5].X         = -3;
NODE_COFFS[5].Y         = -1;
NODE_COFFS[6].X         = -3;
NODE_COFFS[6].Y         = 4;
NODE_COFFS[7].X         = -1;
NODE_COFFS[7].Y         = 8;
NODE_BOFFS[0].X         = 2;
NODE_BOFFS[0].Y         = 15;
NODE_BOFFS[1].X         = 11;
NODE_BOFFS[1].Y         = 4;
NODE_BOFFS[2].X         = 11;
NODE_BOFFS[2].Y         = -1;
NODE_BOFFS[3].X         = 2;
NODE_BOFFS[3].Y         = -12;
NODE_BOFFS[4].X         = -1;
NODE_BOFFS[4].Y         = -12;
NODE_BOFFS[5].X         = -11;
NODE_BOFFS[5].Y         = -1;
NODE_BOFFS[6].X         = -11;
NODE_BOFFS[6].Y         = 4;
NODE_BOFFS[7].X         = -1;
NODE_BOFFS[7].Y         = 15;

PROCEDURE INIT_SCC_COOR (R4; "ADDRESS OF FIKS_D.SCC
                         R6);

VAR
LINK          : INTEGER;

BEGIN
R6 => LINK;
R4@SCC_DISPLAY.CENTER.X => R0;
R4@SCC_DISPLAY.CENTER.Y => R1;
R0 SHIFTLL 2;
40 => R2 - R1;
R2 SHIFTLL 4;
ADDRESS(FIKS_D) => R5;
IF R0 = 0 THEN
    ADDRESS(P_OFFSET) => R5
    ELSE ADDRESS(Q_OFFSET) => R5;
R5@INTEGER => R3 + R0 => R4@SCC_DISPLAY.NT_CONNECT.X;
(R5+1)@INTEGER => R3 + R2 => R4@SCC_DISPLAY.NT_CONNECT.Y;
(R5+1)@INTEGER => R3 + R0 => R4@SCC_DISPLAY.NT_BEND1.X;
(R5+1)@INTEGER => R3 + R2 => R4@SCC_DISPLAY.NT_BEND1.Y;
(R5+1)@INTEGER => R3 + R0 => R4@SCC_DISPLAY.NT_BEND2.X;
(R5+1)@INTEGER => R3 + R2 => R4@SCC_DISPLAY.NT_BEND2.Y;
(R5+1)@INTEGER => R3 + R0 => R4@SCC_DISPLAY.NT_TERM.X;
(R5+1)@INTEGER => R3 + R2 => R4@SCC_DISPLAY.NT_TERM.Y;
EXIT (LINK);
END;


PROCEDURE INIT_COOR (R4; "ADDRESS OF FIKS_D.NODE
                     R6);"LINK

VAR
LINK          : INTEGER;

BEGIN
R6 => LINK;
R4@NM_DISPLAY.BODY.CENTER.X => R0;
R4@NM_DISPLAY.BODY.CENTER.Y => R1;
R0 SHIFTLL 2 ;
40 => R2 - R1;
R2 SHIFTLL 4;
0 => R5;
REPEAT
NODE_COFFS[R5].X => R3 + R0 => R4@NM_DISPLAY.TR_CONNECT[R5].X;
NODE_COFFS[R5].Y => R3 + R2 => R4@NM_DISPLAY.TR_CONNECT[R5].Y;
R5 + 1;
UNTIL R5 = 8;

0 => R5;
REPEAT
NODE_BOFFS[R5].X => R3 + R0 => R4@NM_DISPLAY.TR_BEND[R5].X;
NODE_BOFFS[R5].Y => R3 + R2 => R4@NM_DISPLAY.TR_BEND[R5].Y;
R5 + 1;
UNTIL R5 = 8;
EXIT(LINK);
END;


PROCEDURE FDT (R6);
VAR
LINK          : INTEGER;

BEGIN
R6 => LINK;
ADDRESS(FIKS_D) => R5;
"MON CALL FOR SCC ID
"ID => R0;
IF R0 = 0 THEN
  BEGIN
    P_SCC_X => R0 => R5@FIKS_DISPLAY.COL_SCC.CENTER.X;
    P_SCC_Y => R0 => R5@FIKS_DISPLAY.COL_SCC.CENTER.Y;
    Q_SCC_X => R0 => R5@FIKS_DISPLAY.REM_SCC.CENTER.X;
    Q_SCC_Y => R0 => R5@FIKS_DISPLAY.REM_SCC.CENTER.Y
  END
  ELSE BEGIN
    Q_SCC_X => R0 => R5@FIKS_DISPLAY.COL_SCC.CENTER.X;
    Q_SCC_Y => R0 => R5@FIKS_DISPLAY.COL_SCC.CENTER.Y;
    P_SCC_X => R0 => R5@FIKS_DISPLAY.REM_SCC.CENTER.X;
    P_SCC_X => R0 => R5@FIKS_DISPLAY.REM_SCC.CENTER.Y
  END;
INIT_SCC_COOR (ADDRESS(FIKS_D.COL_SCC) => R4, R6);
INIT_SCC_COOR (ADDRESS(FIKS_D.REM_SCC) => R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEA)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEB)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEE)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEF)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEH)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEK)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEL)=> R4, R6);
INIT_COOR (ADDRESS(FIKS_D.NODEN)=> R4, R6);

ADDRESS(FNC_T) => R4;
ALLFNC => R1 => R4@STAW.U.REC_D;
ADDRESS(CONF_T) => R1 => R4@STAW.U.BUFA_D;
SIZE(CONF_T) => R1 => R4@STAW.U.BUFZ_D;
MON(STA, FNC_OP, R4, R5, R7);
0 => R2;                          "NODE COUNT
ADDRESS(FIKS_D.NODEA) => R7 => R1;
SIZE(NM_DISPLAY) => R3;
REPEAT
  0 => R4;
    REPEAT
    R2 => R5;
    R5 SHIFTLL 3 + R4;
    CONF_T[R5] => R0;
    IF R0[15] THEN
      BEGIN
      R0 => R6 SHIFTRL 4 EXTRACT 4;
      R0 EXTRACT 4;
      R0@LONG * R3;
      R1 => R5 + R0;
      R5@NM_DISPLAY.TR_BEND[R6].X => R1 => R7@NM_DISPLAY.NNH_BEND[R4].X;
      R5@NM_DISPLAY.TR_BEND[R6].Y => R1 => R7@NM_DISPLAY.NNH_BEND[R4].Y;
      R5@NM_DISPLAY.TR_CONNECT[R6].X => R1 => R7@NM_DISPLAY.NNH_CONNECT[R4].X;
      R5@NM_DISPLAY.TR_CONNECT[R6].Y => R1 => R7@NM_DISPLAY.NNH_CONNECT[R4].Y;
      END;
    UNTIL (R4 + 1) = 8;
    R7 + R3;
UNTIL (R2 +1) = 8;
EXIT(LINK);
END;