<> <> DIRECTORY RoseTypes, RoseCreate, BitOps, Dragon; CacheMInterfaceMPads: CEDAR PROGRAM IMPORTS RoseCreate = BEGIN OPEN RoseTypes, BitOps; <> 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]; <> 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.