IFUPLAMainControl.mesa
Copyright c 1984 by Xerox Corporation. All rights reserved.
Last edited by Curry, May 13, 1986 7:44:52 pm PDT
McCreight, March 20, 1986 6:40:59 pm PST
DIRECTORY
Dragon,
PLAOps;
IFUPLAMainControl: CEDAR DEFINITIONS =
BEGIN
MainControlIn: TYPE = RECORD [ -- default must be zero for use initializing sigificance arg
reseting:    BOOL     ← FALSE,
protMicroCyc:  BOOL     ← FALSE,
dpFaulted:   BOOL     ← FALSE,
dpRejected:   BOOL     ← FALSE,
euCondition2:   BOOL     ← FALSE,
euCondEffect2:  CondEffect   ← LOOPHOLE[0],
stage1Hold:   BOOL     ← FALSE,
stage1HoldIfReject: BOOL     ← FALSE,
condEffect1:   CondEffect   ← VAL[0], -- for detecting bubble in 1B
instStarting2:   BOOL     ← FALSE,
ipFaulted2:   BOOL     ← FALSE,
trapsEnbled2:  BOOL     ← FALSE,
rschlWaiting2:  BOOL     ← FALSE,
eStkOverflow2:  BOOL     ← FALSE,
iStkNearlyFull2:  BOOL     ← FALSE,
push2:    BOOL     ← FALSE ];
MainControlOut: TYPE = RECORD [
abortPipe:     BOOL    ← FALSE,
microExcptJmp:   MicroExcptJmp ← none,
exceptionCode:   ExceptionCode ← none
];
ExceptionCode: TYPE = MACHINE DEPENDENT { -- used for Trap PC generator
..            type  index (2 lsb's of type = trap quad)
none   (0),     --  00 00 0000 no trap
ipFault  (special+1),   --  10 00 0001  type[1..3] specs trap PC formation
bubble  (special+2),   --  10 00 0010
cJump  (special+3),   --  10 00 0011
reseting  (special+6),   --  10 00 0110
reset   (special+7),   --  10 00 0111
iStkOFlow (special+8),   --  10 00 1000
eStkOFlow (special+9),   --  10 00 1001
rschlWait  (special+0AH),  --  10 00 1010
trapCycle1 (special+0BH),  --  10 00 1011 follows trapCycle0
cTrap   (special+cCode),  --  11 01 0000 use CCSelCode as index
dpFault  (special+dpFlt)  --  11 10 0000 use DPBusFault as index
};
special: [0..0FFH] = 80H;
cCode: [0..0FFH] = 50H;
dpFlt: [0..0FFH] = 60H;
A decoded enumerated type can be used to directly generate multiplex controls.
The type can be coded as {0, 1} or {0, 1, 2, 4, 8 ...} or {0, 3, 5, 9, 17 ...}.
The first and last cases have the advantage that zero can be used a default multiplex control (lsb = 0 => no other bit is true).
In all cases it's possible to name the bits and/or their inverses using the enumerated type element names.
CondEffect:  TYPE = MACHINE DEPENDENT
{macroTrap(0), macroJump, microJump, bubble(3)};
MicroExcptJmp: TYPE = MACHINE DEPENDENT {
none(0), -- microcycle as proposed by instrDecode
microJump(3), -- microcycle = 64
bubble(5), -- microcycle = 112
resetting(9), -- microcycle = 116
trap(17), -- microcycle = 120
cJump(33) -- microcycle = 124
};
END.