DragonIFU:
CEDAR
DEFINITIONS =
BEGIN
DragOpTable: TYPE = REF DragOpTableArray;
DragOpTableArray: TYPE = ARRAY Dragon.HexByte OF Rope.ROPE ← ALL[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.