CacheMInterfaceMPads.Mesa
created by RoseTranslate from CacheMInterfaceMPads.Rose of January 29, 1985 9:32:03 pm PST for curry.pa at January 29, 1985 9:39:22 pm PST
DIRECTORY
RoseTypes, RoseCreate, BitOps, Dragon;
CacheMInterfaceMPads: CEDAR PROGRAM
IMPORTS RoseCreate =
BEGIN OPEN
RoseTypes, BitOps;
Signal Type decls
MBusCommands: TYPE = Dragon.MBusCommands;
RegisterCells: PROC =
BEGIN
[] ← RoseCreate.RegisterCellType[name: "MPads",
expandProc: NIL,
ioCreator: CreateMPadsIO, initializer: InitializeMPads,
evals: [EvalSimple: MPadsEvalSimple],
blackBox: NIL, stateToo: NIL,
ports: CreateMPadsPorts[],
drivePrototype: NEW [MPadsDrive]];
END;
otherss: SymbolTable ← RoseCreate.GetOtherss["CacheMInterfaceMPads.pass"];
CreateMPadsPorts: PROC RETURNS [ports: Ports] = {ports ← RoseCreate.PortsFromFile["CacheMInterfaceMPads.MPads.rosePorts"]};
MPadsIORef: TYPE = REF MPadsIORec;
MPadsIORec: TYPE = MACHINE DEPENDENT RECORD [
fill0(0:0..14): [0..32767],
PhA(0:15..15): BOOLEAN,
fill1(1:0..14): [0..32767],
PhB(1:15..15): BOOLEAN,
fill2(2:0..14): [0..32767],
Vdd(2:15..15): BOOLEAN,
fill3(3:0..14): [0..32767],
Gnd(3:15..15): BOOLEAN,
fill4(4:0..14): [0..32767],
PadVdd(4:15..15): BOOLEAN,
fill5(5:0..14): [0..32767],
PadGnd(5:15..15): BOOLEAN,
fill6(6:0..11): [0..4095],
MCmdAB(6:12..15): MBusCommands,
MDataAB(7:0..31): ARRAY [0..2) OF CARDINAL,
fill8(9:0..14): [0..32767],
MParityAB(9:15..15): BOOLEAN,
fill9(10:0..14): [0..32767],
MNShared(10:15..15): BOOLEAN,
fill10(11:0..14): [0..32767],
MNError(11:15..15): BOOLEAN,
fill11(12:0..14): [0..32767],
MRq(12:15..15): BOOLEAN,
fill12(13:0..14): [0..32767],
MNewRq(13:15..15): BOOLEAN,
fill13(14:0..14): [0..32767],
MGnt(14:15..15): BOOLEAN,
fill14(15:0..14): [0..32767],
ResetAB(15:15..15): BOOLEAN,
fill15(16:0..14): [0..32767],
DHoldAB(16:15..15): BOOLEAN,
fill16(17:0..14): [0..32767],
DShiftAB(17:15..15): BOOLEAN,
fill17(18:0..14): [0..32767],
DExecuteAB(18:15..15): BOOLEAN,
fill18(19:0..14): [0..32767],
DNSelectAB(19:15..15): BOOLEAN,
fill19(20:0..14): [0..32767],
DDataInAB(20:15..15): BOOLEAN,
fill20(21:0..14): [0..32767],
DDataOutAB(21:15..15): BOOLEAN,
fill21(22:0..14): [0..32767],
PhAb(22:15..15): BOOLEAN,
fill22(23:0..14): [0..32767],
nPhAb(23:15..15): BOOLEAN,
fill23(24:0..14): [0..32767],
PhBb(24:15..15): BOOLEAN,
fill24(25:0..14): [0..32767],
nPhBb(25:15..15): BOOLEAN,
fill25(26:0..14): [0..32767],
Resetb(26:15..15): BOOLEAN,
fill26(27:0..11): [0..4095],
MCmdIn(27:12..15): MBusCommands,
fill27(28:0..11): [0..4095],
MCmdOutAB(28:12..15): MBusCommands,
fill28(29:0..14): [0..32767],
MCmdDriveC(29:15..15): BOOLEAN,
MDataI(30:0..31): ARRAY [0..2) OF CARDINAL,
fill30(32:0..14): [0..32767],
MParityI(32:15..15): BOOLEAN,
fill31(33:0..14): [0..32767],
MDataDriveC(33:15..15): BOOLEAN,
fill32(34:0..14): [0..32767],
MSharedSense(34:15..15): BOOLEAN,
fill33(35:0..14): [0..32767],
MNSharedDriveHighC(35:15..15): BOOLEAN,
fill34(36:0..14): [0..32767],
MNSharedDriveLowC(36:15..15): BOOLEAN,
fill35(37:0..14): [0..32767],
MNErrorDriveLow(37:15..15): BOOLEAN,
fill36(38:0..14): [0..32767],
MRqIBA(38:15..15): BOOLEAN,
fill37(39:0..14): [0..32767],
MNewRqIBA(39:15..15): BOOLEAN,
fill38(40:0..14): [0..32767],
MNewRqEnableC(40:15..15): BOOLEAN,
fill39(41:0..14): [0..32767],
MGntSenseA(41:15..15): BOOLEAN];
port indices:
MPadsDrive: TYPE = MACHINE DEPENDENT RECORD [
fill0(0:0..14): [0 .. 32768),
PhA(0:15..15): BOOLEAN,
fill1(1:0..14): [0 .. 32768),
PhB(1:15..15): BOOLEAN,
fill2(2:0..14): [0 .. 32768),
Vdd(2:15..15): BOOLEAN,
fill3(3:0..14): [0 .. 32768),
Gnd(3:15..15): BOOLEAN,
fill4(4:0..14): [0 .. 32768),
PadVdd(4:15..15): BOOLEAN,
fill5(5:0..14): [0 .. 32768),
PadGnd(5:15..15): BOOLEAN,
fill6(6:0..14): [0 .. 32768),
MCmdAB(6:15..15): BOOLEAN,
fill7(7:0..14): [0 .. 32768),
MDataAB(7:15..15): BOOLEAN,
fill8(8:0..14): [0 .. 32768),
MParityAB(8:15..15): BOOLEAN,
fill9(9:0..14): [0 .. 32768),
MNShared(9:15..15): BOOLEAN,
fill10(10:0..14): [0 .. 32768),
MNError(10:15..15): BOOLEAN,
fill11(11:0..14): [0 .. 32768),
MRq(11:15..15): BOOLEAN,
fill12(12:0..14): [0 .. 32768),
MNewRq(12:15..15): BOOLEAN,
fill13(13:0..14): [0 .. 32768),
MGnt(13:15..15): BOOLEAN,
fill14(14:0..14): [0 .. 32768),
ResetAB(14:15..15): BOOLEAN,
fill15(15:0..14): [0 .. 32768),
DHoldAB(15:15..15): BOOLEAN,
fill16(16:0..14): [0 .. 32768),
DShiftAB(16:15..15): BOOLEAN,
fill17(17:0..14): [0 .. 32768),
DExecuteAB(17:15..15): BOOLEAN,
fill18(18:0..14): [0 .. 32768),
DNSelectAB(18:15..15): BOOLEAN,
fill19(19:0..14): [0 .. 32768),
DDataInAB(19:15..15): BOOLEAN,
fill20(20:0..14): [0 .. 32768),
DDataOutAB(20:15..15): BOOLEAN,
fill21(21:0..14): [0 .. 32768),
PhAb(21:15..15): BOOLEAN,
fill22(22:0..14): [0 .. 32768),
nPhAb(22:15..15): BOOLEAN,
fill23(23:0..14): [0 .. 32768),
PhBb(23:15..15): BOOLEAN,
fill24(24:0..14): [0 .. 32768),
nPhBb(24:15..15): BOOLEAN,
fill25(25:0..14): [0 .. 32768),
Resetb(25:15..15): BOOLEAN,
fill26(26:0..14): [0 .. 32768),
MCmdIn(26:15..15): BOOLEAN,
fill27(27:0..14): [0 .. 32768),
MCmdOutAB(27:15..15): BOOLEAN,
fill28(28:0..14): [0 .. 32768),
MCmdDriveC(28:15..15): BOOLEAN,
fill29(29:0..14): [0 .. 32768),
MDataI(29:15..15): BOOLEAN,
fill30(30:0..14): [0 .. 32768),
MParityI(30:15..15): BOOLEAN,
fill31(31:0..14): [0 .. 32768),
MDataDriveC(31:15..15): BOOLEAN,
fill32(32:0..14): [0 .. 32768),
MSharedSense(32:15..15): BOOLEAN,
fill33(33:0..14): [0 .. 32768),
MNSharedDriveHighC(33:15..15): BOOLEAN,
fill34(34:0..14): [0 .. 32768),
MNSharedDriveLowC(34:15..15): BOOLEAN,
fill35(35:0..14): [0 .. 32768),
MNErrorDriveLow(35:15..15): BOOLEAN,
fill36(36:0..14): [0 .. 32768),
MRqIBA(36:15..15): BOOLEAN,
fill37(37:0..14): [0 .. 32768),
MNewRqIBA(37:15..15): BOOLEAN,
fill38(38:0..14): [0 .. 32768),
MNewRqEnableC(38:15..15): BOOLEAN,
fill39(39:0..14): [0 .. 32768),
MGntSenseA(39:15..15): BOOLEAN];
CreateMPadsIO: PROC [cell: Cell] --IOCreator-- = {
cell.realCellStuff.newIO ← NEW [MPadsIORec];
cell.realCellStuff.oldIO ← NEW [MPadsIORec];
};
MPadsStateRef: TYPE = REF MPadsStateRec;
MPadsStateRec: TYPE = RECORD [
MPadRegAB: BitDWord,
MPadRegParityAB: BOOL
];
InitializeMPads: Initializer = {
IF leafily THEN
BEGIN
state: MPadsStateRef ← NEW [MPadsStateRec];
cell.realCellStuff.state ← state;
END;
};
MPadsEvalSimple: CellProc =
BEGIN
newIO: MPadsIORef ← NARROW[cell.realCellStuff.newIO];
state: MPadsStateRef ← NARROW[cell.realCellStuff.state];
BEGIN OPEN newIO, state;
PhAb ← PhA;
nPhAb ← NOT PhA;
PhBb ← PhB;
nPhBb ← NOT PhB;
Resetb ← ResetAB;
IF MCmdDriveC THEN MCmdAB ← MCmdOutAB;
MCmdIn ← MCmdAB;
IF PhAb THEN {
MPadRegAB ← MDataI;
MPadRegParityAB ← MParityI;
};
IF PhBb THEN {
MDataI ← MDataAB;
MParityI ← MParityAB;
};
IF MDataDriveC THEN {
MDataAB ← MPadRegAB;
MParityAB ← MPadRegParityAB;
};
MSharedSense ← NOT MNShared;
IF MNSharedDriveHighC THEN MNShared ← TRUE;
IF MNSharedDriveLowC THEN MNShared ← FALSE;
IF MNErrorDriveLow THEN MNError ← FALSE;
MRq ← MRqIBA;
IF MNewRqEnableC THEN MNewRq ← MNewRqIBA;
MGntSenseA ← MGnt;
END;
END;
RegisterCells[];
END.