CachePInterface.Mesa
created by RoseTranslate from CachePInterface.Rose of January 30, 1985 8:48:36 am PST for curry.pa at January 30, 1985 8:49:06 am PST
DIRECTORY
RoseTypes, RoseCreate, Dragon, SwitchTypes, NumTypes, EnumTypes, CachePInterfacePCAMDriver, CachePInterfacePCtl, CachePInterfacePRAMDriver, CachePInterfacePPads;
CachePInterface:
CEDAR
PROGRAM
IMPORTS RoseCreate, NumTypes, EnumTypes, CachePInterfacePCAMDriver, CachePInterfacePCtl, CachePInterfacePRAMDriver, CachePInterfacePPads =
Signal Type decls
PBusCommands: TYPE = Dragon.PBusCommands;
PBusFaults: TYPE = Dragon.PBusFaults;
RegisterCells:
PROC =
BEGIN
[] ← RoseCreate.RegisterCellType[name: "PInterface",
expandProc: PInterfaceExpand,
ioCreator: CreatePInterfaceIO, initializer: NIL,
evals: [],
blackBox: NIL, stateToo: NIL,
ports: CreatePInterfacePorts[],
drivePrototype: NEW [PInterfaceDrive]];
END;
otherss: SymbolTable ← RoseCreate.GetOtherss["CachePInterface.pass"];
CreatePInterfacePorts: PROC RETURNS [ports: Ports] = {ports ← RoseCreate.PortsFromFile["CachePInterface.PInterface.rosePorts"]};
PInterfaceIORef: TYPE = REF PInterfaceIORec;
PInterfaceIORec:
TYPE =
MACHINE
DEPENDENT
RECORD [
fill0(0:0..14): [0..32767],
Vdd(0:15..15): BOOLEAN,
fill1(1:0..14): [0..32767],
Gnd(1:15..15): BOOLEAN,
fill2(2:0..14): [0..32767],
PadVdd(2:15..15): BOOLEAN,
fill3(3:0..14): [0..32767],
PadGnd(3:15..15): BOOLEAN,
PData(4:0..31): ARRAY [0..2) OF CARDINAL,
fill5(6:0..14): [0..32767],
PParityB(6:15..15): BOOLEAN,
fill6(7:0..11): [0..4095],
PCmdA(7:12..15): PBusCommands,
fill7(8:0..14): [0..32767],
PRejectB(8:15..15): BOOLEAN,
fill8(9:0..11): [0..4095],
PFaultB(9:12..15): PBusFaults,
fill9(10:0..14): [0..32767],
PNPError(10:15..15): BOOLEAN,
fill10(11:0..14): [0..32767],
PhAb(11:15..15): BOOLEAN,
fill11(12:0..14): [0..32767],
nPhAb(12:15..15): BOOLEAN,
fill12(13:0..14): [0..32767],
PhBb(13:15..15): BOOLEAN,
fill13(14:0..14): [0..32767],
Resetb(14:15..15): BOOLEAN,
CAMPage(15:0..383): PACKED ARRAY [0 .. 23] OF SwitchTypes.SwitchVal,
nCAMPage(39:0..383): PACKED ARRAY [0 .. 23] OF SwitchTypes.SwitchVal,
CAMBlock(63:0..63): PACKED ARRAY [0 .. 3] OF SwitchTypes.SwitchVal,
nCAMBlock(67:0..63): PACKED ARRAY [0 .. 3] OF SwitchTypes.SwitchVal,
PBitsB(71:0..2111): PACKED ARRAY [0 .. 131] OF SwitchTypes.SwitchVal,
nPBitsB(203:0..2111): PACKED ARRAY [0 .. 131] OF SwitchTypes.SwitchVal,
fill20(335:0..14): [0..32767],
nVQMatchB(335:15..15): BOOLEAN,
fill21(336:0..14): [0..32767],
nQuadSharedB(336:15..15): BOOLEAN,
fill22(337:0..14): [0..32767],
PStoreAB(337:15..15): BOOLEAN,
fill23(338:0..14): [0..32767],
nPStoreAB(338:15..15): BOOLEAN,
fill24(339:0..11): [0..4095],
PQSelAB(339:12..15): [0..15],
fill25(340:0..14): [0..32767],
nPageDirtyB(340:15..15): BOOLEAN,
fill26(341:0..14): [0..32767],
SenseVMatchA(341:15..15): BOOLEAN,
fill27(342:0..14): [0..32767],
MDoneAB(342:15..15): BOOLEAN,
fill28(343:0..14): [0..32767],
MHeldAB(343:15..15): BOOLEAN,
fill29(344:0..11): [0..4095],
MFaultAB(344:12..15): PBusFaults,
fill30(345:0..11): [0..4095],
PCmdToMAB(345:12..15): PBusCommands,
fill31(346:0..11): [0..4095],
PAdr2831AB(346:12..15): [0..15],
fill32(347:0..14): [0..32767],
DriveVirtualPageAdrBA(347:15..15): BOOLEAN,
fill33(348:0..14): [0..32767],
DriveVirtualBlockAdrBA(348:15..15): BOOLEAN,
fill34(349:0..14): [0..32767],
StartWordMachineBA(349:15..15): BOOLEAN];
port indices:
PInterfaceCAMPagePortIndex: CARDINAL = 14;
PInterfaceNCAMPagePortIndex: CARDINAL = 15;
PInterfaceCAMBlockPortIndex: CARDINAL = 16;
PInterfaceNCAMBlockPortIndex: CARDINAL = 17;
PInterfacePBitsBPortIndex: CARDINAL = 18;
PInterfaceNPBitsBPortIndex: CARDINAL = 19;
PInterfaceDrive:
TYPE =
MACHINE
DEPENDENT
RECORD [
fill0(0:0..14): [0 .. 32768),
Vdd(0:15..15): BOOLEAN,
fill1(1:0..14): [0 .. 32768),
Gnd(1:15..15): BOOLEAN,
fill2(2:0..14): [0 .. 32768),
PadVdd(2:15..15): BOOLEAN,
fill3(3:0..14): [0 .. 32768),
PadGnd(3:15..15): BOOLEAN,
fill4(4:0..14): [0 .. 32768),
PData(4:15..15): BOOLEAN,
fill5(5:0..14): [0 .. 32768),
PParityB(5:15..15): BOOLEAN,
fill6(6:0..14): [0 .. 32768),
PCmdA(6:15..15): BOOLEAN,
fill7(7:0..14): [0 .. 32768),
PRejectB(7:15..15): BOOLEAN,
fill8(8:0..14): [0 .. 32768),
PFaultB(8:15..15): BOOLEAN,
fill9(9:0..14): [0 .. 32768),
PNPError(9:15..15): BOOLEAN,
fill10(10:0..14): [0 .. 32768),
PhAb(10:15..15): BOOLEAN,
fill11(11:0..14): [0 .. 32768),
nPhAb(11:15..15): BOOLEAN,
fill12(12:0..14): [0 .. 32768),
PhBb(12:15..15): BOOLEAN,
fill13(13:0..14): [0 .. 32768),
Resetb(13:15..15): BOOLEAN,
fill14(14:0..14): [0 .. 32768),
CAMPage(14:15..15): BOOLEAN,
fill15(15:0..14): [0 .. 32768),
nCAMPage(15:15..15): BOOLEAN,
fill16(16:0..14): [0 .. 32768),
CAMBlock(16:15..15): BOOLEAN,
fill17(17:0..14): [0 .. 32768),
nCAMBlock(17:15..15): BOOLEAN,
fill18(18:0..14): [0 .. 32768),
PBitsB(18:15..15): BOOLEAN,
fill19(19:0..14): [0 .. 32768),
nPBitsB(19:15..15): BOOLEAN,
fill20(20:0..14): [0 .. 32768),
nVQMatchB(20:15..15): BOOLEAN,
fill21(21:0..14): [0 .. 32768),
nQuadSharedB(21:15..15): BOOLEAN,
fill22(22:0..14): [0 .. 32768),
PStoreAB(22:15..15): BOOLEAN,
fill23(23:0..14): [0 .. 32768),
nPStoreAB(23:15..15): BOOLEAN,
fill24(24:0..14): [0 .. 32768),
PQSelAB(24:15..15): BOOLEAN,
fill25(25:0..14): [0 .. 32768),
nPageDirtyB(25:15..15): BOOLEAN,
fill26(26:0..14): [0 .. 32768),
SenseVMatchA(26:15..15): BOOLEAN,
fill27(27:0..14): [0 .. 32768),
MDoneAB(27:15..15): BOOLEAN,
fill28(28:0..14): [0 .. 32768),
MHeldAB(28:15..15): BOOLEAN,
fill29(29:0..14): [0 .. 32768),
MFaultAB(29:15..15): BOOLEAN,
fill30(30:0..14): [0 .. 32768),
PCmdToMAB(30:15..15): BOOLEAN,
fill31(31:0..14): [0 .. 32768),
PAdr2831AB(31:15..15): BOOLEAN,
fill32(32:0..14): [0 .. 32768),
DriveVirtualPageAdrBA(32:15..15): BOOLEAN,
fill33(33:0..14): [0 .. 32768),
DriveVirtualBlockAdrBA(33:15..15): BOOLEAN,
fill34(34:0..14): [0 .. 32768),
StartWordMachineBA(34:15..15): BOOLEAN];
CreatePInterfaceIO:
PROC [cell: Cell]
--IOCreator-- = {
cell.realCellStuff.switchIO ← NEW [PInterfaceIORec];
cell.realCellStuff.newIO ← NEW [PInterfaceIORec];
cell.realCellStuff.oldIO ← NEW [PInterfaceIORec];
};
PInterfaceExpand:
PROC [thisCell: Cell, to: ExpansionReceiver]
--ExpandProc-- = {
PrivateLookupNode: PROC [name: ROPE] RETURNS [node: Node] = {node ← RoseCreate.LookupNode[from: thisCell, path: LIST[name]]};
Vdd: Node ← PrivateLookupNode["Vdd"];
Gnd: Node ← PrivateLookupNode["Gnd"];
PadVdd: Node ← PrivateLookupNode["PadVdd"];
PadGnd: Node ← PrivateLookupNode["PadGnd"];
PData: Node ← PrivateLookupNode["PData"];
PParityB: Node ← PrivateLookupNode["PParityB"];
PCmdA: Node ← PrivateLookupNode["PCmdA"];
PRejectB: Node ← PrivateLookupNode["PRejectB"];
PFaultB: Node ← PrivateLookupNode["PFaultB"];
PNPError: Node ← PrivateLookupNode["PNPError"];
PhAb: Node ← PrivateLookupNode["PhAb"];
nPhAb: Node ← PrivateLookupNode["nPhAb"];
PhBb: Node ← PrivateLookupNode["PhBb"];
Resetb: Node ← PrivateLookupNode["Resetb"];
CAMPage: Node ← PrivateLookupNode["CAMPage"];
nCAMPage: Node ← PrivateLookupNode["nCAMPage"];
CAMBlock: Node ← PrivateLookupNode["CAMBlock"];
nCAMBlock: Node ← PrivateLookupNode["nCAMBlock"];
PBitsB: Node ← PrivateLookupNode["PBitsB"];
nPBitsB: Node ← PrivateLookupNode["nPBitsB"];
nVQMatchB: Node ← PrivateLookupNode["nVQMatchB"];
nQuadSharedB: Node ← PrivateLookupNode["nQuadSharedB"];
PStoreAB: Node ← PrivateLookupNode["PStoreAB"];
nPStoreAB: Node ← PrivateLookupNode["nPStoreAB"];
PQSelAB: Node ← PrivateLookupNode["PQSelAB"];
nPageDirtyB: Node ← PrivateLookupNode["nPageDirtyB"];
SenseVMatchA: Node ← PrivateLookupNode["SenseVMatchA"];
MDoneAB: Node ← PrivateLookupNode["MDoneAB"];
MHeldAB: Node ← PrivateLookupNode["MHeldAB"];
MFaultAB: Node ← PrivateLookupNode["MFaultAB"];
PCmdToMAB: Node ← PrivateLookupNode["PCmdToMAB"];
PAdr2831AB: Node ← PrivateLookupNode["PAdr2831AB"];
DriveVirtualPageAdrBA: Node ← PrivateLookupNode["DriveVirtualPageAdrBA"];
DriveVirtualBlockAdrBA: Node ← PrivateLookupNode["DriveVirtualBlockAdrBA"];
StartWordMachineBA: Node ← PrivateLookupNode["StartWordMachineBA"];
others: SymbolTable ← RoseCreate.GetOthers[otherss, "PInterface"];
PDataI: Node ← to.class.NodeInstance[erInstance: to.instance, name: "PDataI", type: NumTypes.NumType[32], other: RoseCreate.GetOther[others, "PDataI"]];
NodeCreateHack1: PROC [name: ROPE] RETURNS [node: Node] = {node ← to.class.NodeInstance[erInstance: to.instance, name: name, type: NumTypes.boolType, other: RoseCreate.GetOther[others, name]]};
PParityI: Node ← NodeCreateHack1["PParityI"];
DrivePDataB: Node ← NodeCreateHack1["DrivePDataB"];
DrivePDataI: Node ← NodeCreateHack1["DrivePDataI"];
PCmdI: Node ← to.class.NodeInstance[erInstance: to.instance, name: "PCmdI", type: EnumTypes.EnumType["Dragon.PBusCommands"], other: RoseCreate.GetOther[others, "PCmdI"]];
PRejectDriveHigh: Node ← NodeCreateHack1["PRejectDriveHigh"];
PRejectDriveLow: Node ← NodeCreateHack1["PRejectDriveLow"];
PFaultDrive: Node ← NodeCreateHack1["PFaultDrive"];
PFaultI: Node ← to.class.NodeInstance[erInstance: to.instance, name: "PFaultI", type: EnumTypes.EnumType["Dragon.PBusFaults"], other: RoseCreate.GetOther[others, "PFaultI"]];
PNPErrorDriveLow: Node ← NodeCreateHack1["PNPErrorDriveLow"];
VARegSensePDataIA: Node ← NodeCreateHack1["VARegSensePDataIA"];
LastRefRegSenseVARegB: Node ← NodeCreateHack1["LastRefRegSenseVARegB"];
PageDriveCAMBitsA: Node ← NodeCreateHack1["PageDriveCAMBitsA"];
BlockDriveCAMBitsA: Node ← NodeCreateHack1["BlockDriveCAMBitsA"];
RefMatchesLastRefReg: Node ← NodeCreateHack1["RefMatchesLastRefReg"];
PRamRegSensePDataIB: Node ← NodeCreateHack1["PRamRegSensePDataIB"];
PRamRegDrivePDataIB: Node ← NodeCreateHack1["PRamRegDrivePDataIB"];
PRamRegSensePBitsB: Node ← NodeCreateHack1["PRamRegSensePBitsB"];
PRamRegDrivePBitsB: Node ← NodeCreateHack1["PRamRegDrivePBitsB"];
PRamRegParityOut: Node ← NodeCreateHack1["PRamRegParityOut"];
PAdr3031AB: Node ← to.class.NodeInstance[erInstance: to.instance, name: "PAdr3031AB", type: NumTypes.NumType[2], other: RoseCreate.GetOther[others, "PAdr3031AB"]];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: "pCAMDriver", typeName: "PCAMDriver", other: RoseCreate.GetOther[others, "pCAMDriver"], interfaceNodes: ""];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: "pCtl", typeName: "PCtl", other: RoseCreate.GetOther[others, "pCtl"], interfaceNodes: ""];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: "pRAMDriver", typeName: "PRAMDriver", other: RoseCreate.GetOther[others, "pRAMDriver"], interfaceNodes: ""];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: "pPads", typeName: "PPads", other: RoseCreate.GetOther[others, "pPads"], interfaceNodes: ""];
};
RegisterCells[];
END.