<> <> <> <> <<>> 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, <> 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; <> <> < no other bit is true).>> <> 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. <<>> <<>> <<>>