DragonIFU.mesa
Copyright © 1984 by Xerox Corporation. All rights reserved.
Last edited by Curry, August 1, 1984 5:42:40 pm PDT
DIRECTORY
Dragon, DragOpsCross, DragonMicroPLA, Rope;
DragonIFU: CEDAR DEFINITIONS =
BEGIN
DragOpTable:   TYPE = REF DragOpTableArray;
DragOpTableArray: TYPE = ARRAY Dragon.HexByte OF Rope.ROPEALL[NIL];
GenDragOpTable:  PROC RETURNS[name:DragOpTable];
AluLt:  TYPE = {aRam, r1, r3}  ← aRam;
AluRt:  TYPE = {bRam, k, r1, r3} ← bRam;
Store1:  TYPE = {bRam, r1, r3} ← bRam;
Result2:  TYPE = { r1, r3}  ← r1;
Store3:  TYPE = {s2, r3}  ← s2;
Result3:  TYPE = {rdata, r2}  ← r2;
IsRdCmd, IsWtCmd, IsFPCmd: PROC[cmnd:Dragon.PBusCommands] RETURNS[BOOL];
PRtoByte: PROC[pr:DragOpsCross.ProcessorRegister] RETURNS [byte:Dragon.HexByte];
BytetoPR: PROC[byte:Dragon.HexByte] RETURNS [pr:DragOpsCross.ProcessorRegister];
noStore: Dragon.HexByte = LOOPHOLE[DragOpsCross.ProcessorRegister[euJunk]];
const0: Dragon.HexByte = LOOPHOLE[DragOpsCross.ProcessorRegister[euConstant]];
Level1: TYPE = RECORD [
a:   Dragon.HexByte      ← const0,
b:   Dragon.HexByte      ← const0,
aluLt:  AluLt           ← aRam,
aluRt:  AluRt        ← bRam,
store1:  Store1         ← bRam,
ka:  Dragon.HexWord      ← 0,
aluOp: Dragon.ALUOps      ← Or,
condSel: Dragon.CondSelects     ← False,
condOp: DragonMicroPLA.CondEffect  ← microJump,
result2: Result2        ← r1,
store3:  Store3         ← s2,
euPBus: Dragon.PBusCommands    ← NoOp,
result3: Result3        ← r2,
c:   Dragon.HexByte      ← noStore,
iStackOp: DragonMicroPLA.IStackPostEffect ← none,
iTrapOp: DragonMicroPLA.ITrapPostEffect ← none,
p:   Dragon.HexWord      ← 0,
l:   Dragon.HexByte      ← 0,
s:   Dragon.HexByte      ← 0
];
Level2: TYPE = RECORD [
ka:  Dragon.HexWord      ← 0,
aluOp: Dragon.ALUOps      ← Or,
condSel: Dragon.CondSelects     ← False,
condOp: DragonMicroPLA.CondEffect  ← microJump,
result2: Result2        ← r1,
store3:  Store3         ← s2,
euPBus: Dragon.PBusCommands    ← NoOp,
result3: Result3        ← r2,
c:   Dragon.HexByte      ← noStore,
iStackOp: DragonMicroPLA.IStackPostEffect ← none,
iTrapOp: DragonMicroPLA.ITrapPostEffect ← none,
p:   Dragon.HexWord      ← 0,
l:   Dragon.HexByte      ← 0,
s:   Dragon.HexByte      ← 0
];
Level3: TYPE = RECORD [
euPBus: Dragon.PBusCommands    ← NoOp,
result3: Result3        ← r2,
c:   Dragon.HexByte      ← noStore,
iStackOp: DragonMicroPLA.IStackPostEffect ← none,
iTrapOp: DragonMicroPLA.ITrapPostEffect ← none,
p:   Dragon.HexWord     ← 0,
l:   Dragon.HexByte      ← 0,
s:   Dragon.HexByte      ← 0
];
END.