DragonIDecode.mesa
.. auxiliary functions for Dragon Rosemary IFU simulations
last edited by Curry, February 27, 1984 1:31 pm
DIRECTORY
Dragon;
DragonIDecode: CEDAR DEFINITIONS =
BEGIN
Level1:TYPE = RECORD [
a, b:    Dragon.EURegisterIndex,
euControlTop: EUControlTop,
next2:    Level2
];
Level2:TYPE = RECORD [
euCacheCmd:  Dragon.PBusCommands,
euControlBot: EUControlBot,
next3:    Level3
];
Level3:TYPE = RECORD [
c:     Dragon.EURegisterIndex,
xcClass:    XferControlClass,
pcSL:    PcSLState
];
PcSLState: TYPE = RECORD [
pc:     Dragon.Word,
s:     Dragon.EURegisterIndex,
l:     Dragon.EURegisterIndex
];
XferControlClass: TYPE = {ordinary, call, ret, cJmp, trap} ← ordinary;
EUControlTop: TYPE = RECORD [
kData:  Dragon.Word, -- toIFU<=>cAdr=kAdr  phA
aluOp:  Dragon.ALUOps,      -- phB
condition:  Dragon.CondSelects,      -- phB
condComp:  BOOL,          -- phB
condTrap:  BOOL,          -- phB
aAlu:  {aRam, r1, r3} ← aRam,   -- phB
bAlu:  {bRam, k, r1, r3} ← bRam,   -- phB
store1:  {bRam, r1, r3} ← bRam   -- phB
];
EUControlBot: TYPE = RECORD [
result2:   { r1, r3} ← r1,    -- phB
store3:   {s2,  r3} ← s2,    -- phB
result3:   {rdata,  r2} ← r2    -- phB
wtEUCch:  BOOL, derived from euCacheCmd   phA
];
EUStatus: TYPE = RECORD [
condOut: BOOL,        -- toIFU  phB
kData:  Dragon.Word  -- toIFU<=>cAdr=kAdr  phA
];
ILength: PROC [ op: Dragon.Opcode ] RETURNS [ length: [0..5] ];
END.