|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9664 (0x25c0)
Types: TextFile
Names: »FDT.N«
└─⟦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«
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;