CacheMInterfaceMROM.Mesa
created by RoseTranslate from CacheMInterfaceMROM.Rose of January 29, 1985 9:31:30 pm PST for curry.pa at January 29, 1985 9:38:42 pm PST
DIRECTORY
RoseTypes, RoseCreate, BitOps, CacheMicroMachine;
CacheMInterfaceMROM:
CEDAR
PROGRAM
IMPORTS RoseCreate, BitOps, CacheMicroMachine =
BEGIN
OPEN
RoseTypes, BitOps, CacheMicroMachine;
RegisterCells:
PROC =
BEGIN
[] ← RoseCreate.RegisterCellType[name: "MROM",
expandProc: NIL,
ioCreator: CreateMROMIO, initializer: InitializeMROM,
evals: [EvalSimple: MROMEvalSimple],
blackBox: NIL, stateToo: NIL,
ports: CreateMROMPorts[],
drivePrototype: NEW [MROMDrive]];
END;
otherss: SymbolTable ← RoseCreate.GetOtherss["CacheMInterfaceMROM.pass"];
CreateMROMPorts: PROC RETURNS [ports: Ports] = {ports ← RoseCreate.PortsFromFile["CacheMInterfaceMROM.MROM.rosePorts"]};
MROMIORef: TYPE = REF MROMIORec;
MROMIORec:
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],
PhAb(2:15..15): BOOLEAN,
fill3(3:0..14): [0..32767],
PhBb(3:15..15): BOOLEAN,
fill4(4:0..14): [0..32767],
Resetb(4:15..15): BOOLEAN,
fill5(5:0..14): [0..32767],
FinishSharedStoreAB(5:15..15): BOOLEAN,
fill6(6:0..14): [0..32767],
SenseRMatchB(6:15..15): BOOLEAN,
fill7(7:0..14): [0..32767],
SelPageFlagsBA(7:15..15): BOOLEAN,
fill8(8:0..14): [0..32767],
StartWordMachineBA(8:15..15): BOOLEAN,
fill9(9:0..14): [0..32767],
CAMRegSenseMDataIB(9:15..15): BOOLEAN,
fill10(10:0..14): [0..32767],
ACAMRegDriveCAMBitsA(10:15..15): BOOLEAN,
fill11(11:0..14): [0..32767],
BCAMRegDriveCAMBitsAB(11:15..15): BOOLEAN,
fill12(12:0..14): [0..32767],
FormAddressBA(12:15..15): BOOLEAN,
fill13(13:0..14): [0..32767],
PageDriveMDataIA(13:15..15): BOOLEAN,
fill14(14:0..14): [0..32767],
BlockDriveMDataIA(14:15..15): BOOLEAN,
fill15(15:0..14): [0..32767],
DriveMBitsA(15:15..15): BOOLEAN,
fill16(16:0..14): [0..32767],
DriveMBitsNoMatchA(16:15..15): BOOLEAN,
fill17(17:0..14): [0..32767],
SenseMBitsA(17:15..15): BOOLEAN,
fill18(18:0..14): [0..32767],
DriveMDataIA(18:15..15): BOOLEAN,
fill19(19:0..14): [0..32767],
SenseMDataIB(19:15..15): BOOLEAN,
fill20(20:0..14): [0..32767],
DrivePBitsB(20:15..15): BOOLEAN,
fill21(21:0..14): [0..32767],
SensePBitsB(21:15..15): BOOLEAN,
fill22(22:0..14): [0..32767],
SuppressPSampleAB(22:15..15): BOOLEAN,
fill23(23:0..14): [0..32767],
MIsDoneAB(23:15..15): BOOLEAN,
fill24(24:0..14): [0..32767],
SetWantWSA(24:15..15): BOOLEAN,
fill25(25:0..14): [0..32767],
CheckFaultsAB(25:15..15): BOOLEAN,
fill26(26:0..14): [0..32767],
SenseSharedB(26:15..15): BOOLEAN,
fill27(27:0..14): [0..32767],
ReleaseMBusBA(27:15..15): BOOLEAN,
fill28(28:0..14): [0..32767],
ForceIdleAB(28:15..15): BOOLEAN,
fill29(29:0..14): [0..32767],
DoneAB(29:15..15): BOOLEAN,
fill30(30:0..14): [0..32767],
ForceSlaveBA(30:15..15): BOOLEAN,
fill31(31:0..14): [0..32767],
SenseReadyBA(31:15..15): BOOLEAN,
fill32(32:0..14): [0..32767],
MDataIToFaultsB(32:15..15): BOOLEAN,
fill33(33:0..14): [0..32767],
MapBitsToMDataIA(33:15..15): BOOLEAN,
fill34(34:0..14): [0..32767],
ACheckParityA(34:15..15): BOOLEAN,
fill35(35:0..14): [0..32767],
BCheckParityB(35:15..15): BOOLEAN,
fill36(36:0..14): [0..32767],
SampleRealMatchA(36:15..15): BOOLEAN,
fill37(37:0..14): [0..32767],
MCmdDriveA(37:15..15): BOOLEAN,
fill38(38:0..14): [0..32767],
MDataDriveA(38:15..15): BOOLEAN,
fill39(39:0..14): [0..32767],
DriveSharedHighA(39:15..15): BOOLEAN,
fill40(40:0..14): [0..32767],
DriveSharedLowA(40:15..15): BOOLEAN,
fill41(41:0..14): [0..32767],
MasterEnableMBusDriveAB(41:15..15): BOOLEAN,
fill42(42:0..14): [0..32767],
MCmdDriveToDataTransportAB(42:15..15): BOOLEAN,
fill43(43:0..14): [0..32767],
MCmdDriveToNoOpAB(43:15..15): BOOLEAN,
fill44(44:0..14): [0..32767],
SetSharedA(44:15..15): BOOLEAN,
fill45(45:0..14): [0..32767],
ResetMasterA(45:15..15): BOOLEAN,
fill46(46:0..14): [0..32767],
SetRPDirtyVPValidA(46:15..15): BOOLEAN,
fill47(47:0..14): [0..32767],
FlagLatchB(47:15..15): BOOLEAN,
fill48(48:0..14): [0..32767],
SetFlagsA(48:15..15): BOOLEAN,
fill49(49:0..14): [0..32767],
IncrementVictimBA(49:15..15): BOOLEAN,
fill50(50:0..14): [0..32767],
IncrementMAdrCtrB(50:15..15): BOOLEAN,
fill51(51:0..14): [0..32767],
ZeroMAdrCtrB(51:15..15): BOOLEAN,
fill52(52:0..14): [0..32767],
SampleDirtyBitsB(52:15..15): BOOLEAN,
fill53(53:0..14): [0..32767],
DeleteDirtyBitB(53:15..15): BOOLEAN,
fill54(54:0..14): [0..32767],
VictimSelectBA(54:15..15): BOOLEAN,
fill55(55:0..14): [0..32767],
RefreshToDecoderBA(55:15..15): BOOLEAN,
fill56(56:0..14): [0..32767],
IfGrantThenGetAdrElseRefreshToDecoderBA(56:15..15): BOOLEAN,
fill57(57:0..14): [0..32767],
FetchAddressBA(57:15..15): BOOLEAN,
fill58(58:0..14): [0..32767],
DirtyBitsToMQSelBA(58:15..15): BOOLEAN,
fill59(59:0..14): [0..32767],
SamplePAdr2831B(59:15..15): BOOLEAN,
fill60(60:0..14): [0..32767],
SampleMAdr2831B(60:15..15): BOOLEAN,
fill61(61:0..14): [0..32767],
Adr2829ToMQSelBA(61:15..15): BOOLEAN,
fill62(62:0..14): [0..32767],
AddressBitsToMDataIA(62:15..15): BOOLEAN,
fill63(63:0..14): [0..32767],
VictimAddressBitsToMDataIA(63:15..15): BOOLEAN,
fill64(64:0..14): [0..32767],
SelectRPBA(64:15..15): BOOLEAN,
fill65(65:0..14): [0..32767],
SelectVPVictimOrOrphanBA(65:15..15): BOOLEAN,
fill66(66:0..14): [0..32767],
SelectRealDataBA(66:15..15): BOOLEAN,
fill67(67:0..14): [0..32767],
SelVictimOrOrphanBA(67:15..15): BOOLEAN,
fill68(68:0..14): [0..32767],
RefreshIfRefVirtualBA(68:15..15): BOOLEAN,
fill69(69:0..14): [0..32767],
SenseVictimBA(69:15..15): BOOLEAN,
fill70(70:0..14): [0..32767],
MDataDriveDelayedA(70:15..15): BOOLEAN,
fill71(71:0..8): [0..511],
ROMSequenceBA(71:9..15): [0..127],
fill72(72:0..14): [0..32767],
ROMSlaveBA(72:15..15): BOOLEAN,
fill73(73:0..8): [0..511],
ROMCycleBA(73:9..15): [0..127]];
MROMDrive:
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),
PhAb(2:15..15): BOOLEAN,
fill3(3:0..14): [0 .. 32768),
PhBb(3:15..15): BOOLEAN,
fill4(4:0..14): [0 .. 32768),
Resetb(4:15..15): BOOLEAN,
fill5(5:0..14): [0 .. 32768),
FinishSharedStoreAB(5:15..15): BOOLEAN,
fill6(6:0..14): [0 .. 32768),
SenseRMatchB(6:15..15): BOOLEAN,
fill7(7:0..14): [0 .. 32768),
SelPageFlagsBA(7:15..15): BOOLEAN,
fill8(8:0..14): [0 .. 32768),
StartWordMachineBA(8:15..15): BOOLEAN,
fill9(9:0..14): [0 .. 32768),
CAMRegSenseMDataIB(9:15..15): BOOLEAN,
fill10(10:0..14): [0 .. 32768),
ACAMRegDriveCAMBitsA(10:15..15): BOOLEAN,
fill11(11:0..14): [0 .. 32768),
BCAMRegDriveCAMBitsAB(11:15..15): BOOLEAN,
fill12(12:0..14): [0 .. 32768),
FormAddressBA(12:15..15): BOOLEAN,
fill13(13:0..14): [0 .. 32768),
PageDriveMDataIA(13:15..15): BOOLEAN,
fill14(14:0..14): [0 .. 32768),
BlockDriveMDataIA(14:15..15): BOOLEAN,
fill15(15:0..14): [0 .. 32768),
DriveMBitsA(15:15..15): BOOLEAN,
fill16(16:0..14): [0 .. 32768),
DriveMBitsNoMatchA(16:15..15): BOOLEAN,
fill17(17:0..14): [0 .. 32768),
SenseMBitsA(17:15..15): BOOLEAN,
fill18(18:0..14): [0 .. 32768),
DriveMDataIA(18:15..15): BOOLEAN,
fill19(19:0..14): [0 .. 32768),
SenseMDataIB(19:15..15): BOOLEAN,
fill20(20:0..14): [0 .. 32768),
DrivePBitsB(20:15..15): BOOLEAN,
fill21(21:0..14): [0 .. 32768),
SensePBitsB(21:15..15): BOOLEAN,
fill22(22:0..14): [0 .. 32768),
SuppressPSampleAB(22:15..15): BOOLEAN,
fill23(23:0..14): [0 .. 32768),
MIsDoneAB(23:15..15): BOOLEAN,
fill24(24:0..14): [0 .. 32768),
SetWantWSA(24:15..15): BOOLEAN,
fill25(25:0..14): [0 .. 32768),
CheckFaultsAB(25:15..15): BOOLEAN,
fill26(26:0..14): [0 .. 32768),
SenseSharedB(26:15..15): BOOLEAN,
fill27(27:0..14): [0 .. 32768),
ReleaseMBusBA(27:15..15): BOOLEAN,
fill28(28:0..14): [0 .. 32768),
ForceIdleAB(28:15..15): BOOLEAN,
fill29(29:0..14): [0 .. 32768),
DoneAB(29:15..15): BOOLEAN,
fill30(30:0..14): [0 .. 32768),
ForceSlaveBA(30:15..15): BOOLEAN,
fill31(31:0..14): [0 .. 32768),
SenseReadyBA(31:15..15): BOOLEAN,
fill32(32:0..14): [0 .. 32768),
MDataIToFaultsB(32:15..15): BOOLEAN,
fill33(33:0..14): [0 .. 32768),
MapBitsToMDataIA(33:15..15): BOOLEAN,
fill34(34:0..14): [0 .. 32768),
ACheckParityA(34:15..15): BOOLEAN,
fill35(35:0..14): [0 .. 32768),
BCheckParityB(35:15..15): BOOLEAN,
fill36(36:0..14): [0 .. 32768),
SampleRealMatchA(36:15..15): BOOLEAN,
fill37(37:0..14): [0 .. 32768),
MCmdDriveA(37:15..15): BOOLEAN,
fill38(38:0..14): [0 .. 32768),
MDataDriveA(38:15..15): BOOLEAN,
fill39(39:0..14): [0 .. 32768),
DriveSharedHighA(39:15..15): BOOLEAN,
fill40(40:0..14): [0 .. 32768),
DriveSharedLowA(40:15..15): BOOLEAN,
fill41(41:0..14): [0 .. 32768),
MasterEnableMBusDriveAB(41:15..15): BOOLEAN,
fill42(42:0..14): [0 .. 32768),
MCmdDriveToDataTransportAB(42:15..15): BOOLEAN,
fill43(43:0..14): [0 .. 32768),
MCmdDriveToNoOpAB(43:15..15): BOOLEAN,
fill44(44:0..14): [0 .. 32768),
SetSharedA(44:15..15): BOOLEAN,
fill45(45:0..14): [0 .. 32768),
ResetMasterA(45:15..15): BOOLEAN,
fill46(46:0..14): [0 .. 32768),
SetRPDirtyVPValidA(46:15..15): BOOLEAN,
fill47(47:0..14): [0 .. 32768),
FlagLatchB(47:15..15): BOOLEAN,
fill48(48:0..14): [0 .. 32768),
SetFlagsA(48:15..15): BOOLEAN,
fill49(49:0..14): [0 .. 32768),
IncrementVictimBA(49:15..15): BOOLEAN,
fill50(50:0..14): [0 .. 32768),
IncrementMAdrCtrB(50:15..15): BOOLEAN,
fill51(51:0..14): [0 .. 32768),
ZeroMAdrCtrB(51:15..15): BOOLEAN,
fill52(52:0..14): [0 .. 32768),
SampleDirtyBitsB(52:15..15): BOOLEAN,
fill53(53:0..14): [0 .. 32768),
DeleteDirtyBitB(53:15..15): BOOLEAN,
fill54(54:0..14): [0 .. 32768),
VictimSelectBA(54:15..15): BOOLEAN,
fill55(55:0..14): [0 .. 32768),
RefreshToDecoderBA(55:15..15): BOOLEAN,
fill56(56:0..14): [0 .. 32768),
IfGrantThenGetAdrElseRefreshToDecoderBA(56:15..15): BOOLEAN,
fill57(57:0..14): [0 .. 32768),
FetchAddressBA(57:15..15): BOOLEAN,
fill58(58:0..14): [0 .. 32768),
DirtyBitsToMQSelBA(58:15..15): BOOLEAN,
fill59(59:0..14): [0 .. 32768),
SamplePAdr2831B(59:15..15): BOOLEAN,
fill60(60:0..14): [0 .. 32768),
SampleMAdr2831B(60:15..15): BOOLEAN,
fill61(61:0..14): [0 .. 32768),
Adr2829ToMQSelBA(61:15..15): BOOLEAN,
fill62(62:0..14): [0 .. 32768),
AddressBitsToMDataIA(62:15..15): BOOLEAN,
fill63(63:0..14): [0 .. 32768),
VictimAddressBitsToMDataIA(63:15..15): BOOLEAN,
fill64(64:0..14): [0 .. 32768),
SelectRPBA(64:15..15): BOOLEAN,
fill65(65:0..14): [0 .. 32768),
SelectVPVictimOrOrphanBA(65:15..15): BOOLEAN,
fill66(66:0..14): [0 .. 32768),
SelectRealDataBA(66:15..15): BOOLEAN,
fill67(67:0..14): [0 .. 32768),
SelVictimOrOrphanBA(67:15..15): BOOLEAN,
fill68(68:0..14): [0 .. 32768),
RefreshIfRefVirtualBA(68:15..15): BOOLEAN,
fill69(69:0..14): [0 .. 32768),
SenseVictimBA(69:15..15): BOOLEAN,
fill70(70:0..14): [0 .. 32768),
MDataDriveDelayedA(70:15..15): BOOLEAN,
fill71(71:0..14): [0 .. 32768),
ROMSequenceBA(71:15..15): BOOLEAN,
fill72(72:0..14): [0 .. 32768),
ROMSlaveBA(72:15..15): BOOLEAN,
fill73(73:0..14): [0 .. 32768),
ROMCycleBA(73:15..15): BOOLEAN];
CreateMROMIO:
PROC [cell: Cell]
--IOCreator-- = {
cell.realCellStuff.newIO ← NEW [MROMIORec];
cell.realCellStuff.oldIO ← NEW [MROMIORec];
};
MROMStateRef: TYPE = REF MROMStateRec;
MROMStateRec:
TYPE =
RECORD [
dSenseRMatchAB, dCAMRegSenseMDataIAB, dSenseMDataIAB, dDrivePBitsAB, dSensePBitsAB, dFlagLatchAB, dIncrementMAdrCtrAB, dZeroMAdrCtrAB, dSampleDirtyBitsAB, dDeleteDirtyBitAB, dSamplePAdr2831AB, dSampleMAdr2831AB, dSenseSharedAB, dMDataIToFaultsAB, dBCheckParityAB: BOOL,
dSelPageFlagsAB, dFormAddressAB, dIncrementVictimAB, dVictimSelectAB, dRefreshToDecoderAB, dIfGrantThenGetAdrElseRefreshToDecoderAB, dFetchAddressAB, dDirtyBitsToMQSelAB, dAdr2829ToMQSelAB, dSelectRPAB, dSelectVPVictimOrOrphanAB, dSelectRealDataAB, dSelVictimOrOrphanAB, dSenseVictimAB, dRefreshIfRefVirtualAB, dReleaseMBusAB, dForceSlaveAB, dSenseReadyAB, dStartWordMachineAB: BOOL,
dACAMRegDriveCAMBitsAB, dDriveMBitsAB, dDriveMBitsNoMatchAB, dSetSharedAB, dResetMasterAB, dSetRPDirtyVPValidAB, dSetFlagsAB, dACheckParityAB, dMDataDriveDelayedAB: BOOL,
dACAMRegDriveCAMBitsBA, dDriveMBitsBA, dDriveMBitsNoMatchBA, dSetSharedBA, dResetMasterBA, dSetRPDirtyVPValidBA, dSetFlagsBA, dACheckParityBA, dMDataDriveDelayedBA: BOOL
];
InitializeMROM: Initializer = {
IF leafily
THEN
BEGIN
state: MROMStateRef ← NEW [MROMStateRec];
cell.realCellStuff.state ← state;
END;
};
MROMEvalSimple: CellProc =
BEGIN
newIO: MROMIORef ← NARROW[cell.realCellStuff.newIO];
state: MROMStateRef ←
NARROW[cell.realCellStuff.state];
BEGIN
OPEN newIO, state;
seq: SequenceNumber ← 1;
cyc: CycleNumber ← 1;
FOR i:SequenceNumber
IN SequenceNumber
DO
IF EBFW[ROMSequenceBA, 7, i] THEN {seq ← i; EXIT};
ENDLOOP;
FOR i:CycleNumber
IN CycleNumber
DO
IF EBFW[ROMCycleBA, 7, i] THEN {cyc ← i; EXIT};
ENDLOOP;
CacheMicroMachine.SetState[slave: ROMSlaveBA, sequence: seq, cycle: cyc];
A
xA ← PhAb AND Decode[$x];
IF PhAb
THEN {
PageDriveMDataIA ← Decode[$PageDriveMDataI];
BlockDriveMDataIA ← Decode[$BlockDriveMDataI];
SenseMBitsA ← Decode[$SenseMBits];
DriveMDataIA ← Decode[$DriveMDataI];
AddressBitsToMDataIA ← Decode[$AddressBitsToMDataI];
VictimAddressBitsToMDataIA ← Decode[$VictimAddressBitsToMDataI];
SetWantWSA ← Decode[$SetWantWS];
MapBitsToMDataIA ← Decode[$MapBitsToMDataI];
SampleRealMatchA ← Decode[$SampleRealMatch];
MCmdDriveA ← Decode[$MCmdDrive];
MDataDriveA ← Decode[$MDataDrive];
DriveSharedHighA ← Decode[$DriveSharedHigh];
DriveSharedLowA ← Decode[$DriveSharedLow];
}
ELSE PageDriveMDataIA ← BlockDriveMDataIA ← SenseMBitsA ← DriveMDataIA ← AddressBitsToMDataIA ← VictimAddressBitsToMDataIA ← SetWantWSA ← MapBitsToMDataIA ← SampleRealMatchA ← MCmdDriveA ← MDataDriveA ← DriveSharedHighA ← DriveSharedLowA ← FALSE;
B
IF PhAb THEN dxAB ← Decode[$x];
xB ← PhBb AND dxAB;
IF PhAb
THEN {
dSenseRMatchAB ← Decode[$SenseRMatch];
dCAMRegSenseMDataIAB ← Decode[$CAMRegSenseMDataI];
dSenseMDataIAB ← Decode[$SenseMDataI];
dDrivePBitsAB ← Decode[$DrivePBits];
dSensePBitsAB ← Decode[$SensePBits];
dFlagLatchAB ← Decode[$FlagLatch];
dIncrementMAdrCtrAB ← Decode[$IncrementMAdrCtr];
dZeroMAdrCtrAB ← Decode[$ZeroMAdrCtr];
dSampleDirtyBitsAB ← Decode[$SampleDirtyBits];
dDeleteDirtyBitAB ← Decode[$DeleteDirtyBit];
dSamplePAdr2831AB ← Decode[$SamplePAdr2831];
dSampleMAdr2831AB ← Decode[$SampleMAdr2831];
dSenseSharedAB ← Decode[$SenseShared];
dMDataIToFaultsAB ← Decode[$MDataIToFaults];
dBCheckParityAB ← Decode[$BCheckParity];
};
IF PhBb
THEN {
SenseRMatchB ← dSenseRMatchAB;
CAMRegSenseMDataIB ← dCAMRegSenseMDataIAB;
SenseMDataIB ← dSenseMDataIAB;
DrivePBitsB ← dDrivePBitsAB;
SensePBitsB ← dSensePBitsAB;
FlagLatchB ← dFlagLatchAB;
IncrementMAdrCtrB ← dIncrementMAdrCtrAB;
ZeroMAdrCtrB ← dZeroMAdrCtrAB;
SampleDirtyBitsB ← dSampleDirtyBitsAB;
DeleteDirtyBitB ← dDeleteDirtyBitAB;
SamplePAdr2831B ← dSamplePAdr2831AB;
SampleMAdr2831B ← dSampleMAdr2831AB;
SenseSharedB ← dSenseSharedAB;
MDataIToFaultsB ← dMDataIToFaultsAB;
BCheckParityB ← dBCheckParityAB;
}
ELSE SenseRMatchB ← CAMRegSenseMDataIB ← SenseMDataIB ← DrivePBitsB ← SensePBitsB ← FlagLatchB ← IncrementMAdrCtrB ← ZeroMAdrCtrB ← SampleDirtyBitsB ← DeleteDirtyBitB ← SamplePAdr2831B ← SampleMAdr2831B ← SenseSharedB ← MDataIToFaultsB ← BCheckParityB ← FALSE;
AB
IF PhAb THEN xAB ← Decode[$x];
IF PhAb
THEN {
FinishSharedStoreAB ← Decode[$FinishSharedStore];
BCAMRegDriveCAMBitsAB ← Decode[$BCAMRegDriveCAMBits];
SuppressPSampleAB ← Decode[$SuppressPSample];
DoneAB ← Decode[$Done];
MasterEnableMBusDriveAB ← Decode[$MasterEnableMBusDrive];
MCmdDriveToDataTransportAB ← Decode[$MCmdDriveToDataTransport];
MCmdDriveToNoOpAB ← Decode[$MCmdDriveToNoOp];
ForceIdleAB ← Decode[$ForceIdle];
};
BA
IF PhAb THEN dxAB ← Decode[$x];
IF PhBb THEN xBA ← dxAB;
IF PhAb
THEN {
dSelPageFlagsAB ← Decode[$SelPageFlags];
dFormAddressAB ← Decode[$FormAddress];
dIncrementVictimAB ← Decode[$IncrementVictim];
dVictimSelectAB ← Decode[$VictimSelect];
dRefreshToDecoderAB ← Decode[$RefreshToDecoder];
dIfGrantThenGetAdrElseRefreshToDecoderAB ← Decode[$IfGrantThenGetAdrElseRefreshToDecoder];
dFetchAddressAB ← Decode[$FetchAddress];
dDirtyBitsToMQSelAB ← Decode[$DirtyBitsToMQSel];
dAdr2829ToMQSelAB ← Decode[$Adr2829ToMQSel];
dSelectRPAB ← Decode[$SelectRP];
dSelectVPVictimOrOrphanAB ← Decode[$SelectVPVictimOrOrphan];
dSelectRealDataAB ← Decode[$SelectRealData];
dSelVictimOrOrphanAB ← Decode[$SelVictimOrOrphan];
dSenseVictimAB ← Decode[$SenseVictim];
dRefreshIfRefVirtualAB ← Decode[$RefreshIfRefVirtual];
MIsDoneAB ← Decode[$MIsDone];
CheckFaultsAB ← Decode[$CheckFaults];
dReleaseMBusAB ← Decode[$ReleaseMBus];
dForceSlaveAB ← Decode[$ForceSlave];
dSenseReadyAB ← Decode[$SenseReady];
dStartWordMachineAB ← Decode[$StartWordMachine];
};
IF PhBb
THEN {
SelPageFlagsBA ← dSelPageFlagsAB;
FormAddressBA ← dFormAddressAB;
IncrementVictimBA ← dIncrementVictimAB;
VictimSelectBA ← dVictimSelectAB;
RefreshToDecoderBA ← dRefreshToDecoderAB;
IfGrantThenGetAdrElseRefreshToDecoderBA ← dIfGrantThenGetAdrElseRefreshToDecoderAB;
FetchAddressBA ← dFetchAddressAB;
DirtyBitsToMQSelBA ← dDirtyBitsToMQSelAB;
Adr2829ToMQSelBA ← dAdr2829ToMQSelAB;
SelectRPBA ← dSelectRPAB;
SelectVPVictimOrOrphanBA ← dSelectVPVictimOrOrphanAB;
SelectRealDataBA ← dSelectRealDataAB;
SelVictimOrOrphanBA ← dSelVictimOrOrphanAB;
SenseVictimBA ← dSenseVictimAB;
RefreshIfRefVirtualBA ← dRefreshIfRefVirtualAB;
ReleaseMBusBA ← dReleaseMBusAB;
ForceSlaveBA ← dForceSlaveAB;
SenseReadyBA ← dSenseReadyAB;
StartWordMachineBA ← dStartWordMachineAB;
};
DA
IF PhAb THEN dxAB ← Decode[$x];
IF PhBb THEN dxBA ← dxAB;
xA ← PhAb AND dxBA;
IF PhAb
THEN {
dACAMRegDriveCAMBitsAB ← Decode[$ACAMRegDriveCAMBits];
dDriveMBitsAB ← Decode[$DriveMBits];
dDriveMBitsNoMatchAB ← Decode[$DriveMBitsNoMatch];
dSetSharedAB ← Decode[$SetShared];
dResetMasterAB ← Decode[$ResetMaster];
dSetRPDirtyVPValidAB ← Decode[$SetRPDirtyVPValid];
dSetFlagsAB ← Decode[$SetFlags];
dACheckParityAB ← Decode[$ACheckParity];
dMDataDriveDelayedAB ← Decode[$MDataDriveDelayed];
};
IF PhBb
THEN {
dACAMRegDriveCAMBitsBA ← dACAMRegDriveCAMBitsAB;
dDriveMBitsBA ← dDriveMBitsAB;
dDriveMBitsNoMatchBA ← dDriveMBitsNoMatchAB;
dSetSharedBA ← dSetSharedAB;
dResetMasterBA ← dResetMasterAB;
dSetRPDirtyVPValidBA ← dSetRPDirtyVPValidAB;
dSetFlagsBA ← dSetFlagsAB;
dACheckParityBA ← dACheckParityAB;
dMDataDriveDelayedBA ← dMDataDriveDelayedAB;
};
IF PhAb
THEN {
ACAMRegDriveCAMBitsA ← dACAMRegDriveCAMBitsBA;
DriveMBitsA ← dDriveMBitsBA;
DriveMBitsNoMatchA ← dDriveMBitsNoMatchBA;
SetSharedA ← dSetSharedBA;
ResetMasterA ← dResetMasterBA;
SetRPDirtyVPValidA ← dSetRPDirtyVPValidBA;
SetFlagsA ← dSetFlagsBA;
ACheckParityA ← dACheckParityBA;
MDataDriveDelayedA ← dMDataDriveDelayedBA;
}
ELSE ACAMRegDriveCAMBitsA ← DriveMBitsA ← DriveMBitsNoMatchA ← SetSharedA ← ResetMasterA ← SetRPDirtyVPValidA ← SetFlagsA ← ACheckParityA ← MDataDriveDelayedA ← FALSE;
END;
END;
RegisterCells[];
END.