IF ShiftShift
THEN {
nshiftData ← MDTD[DNOT[shiftData, 32], 32, 0, 31, nshiftData, 32, 1, 31];
nshiftData ← IBID[NOT ShiftDataToPRAMDriver, nshiftData, 32, 0];
nparityShift ← NOT EBFD[shiftData, 32, 31];
};
TRUSTED {
pbitd: SwitchMWord ← DESCRIPTOR[PBits];
npbitd: SwitchMWord ← DESCRIPTOR[nPBits];
s: SwitchTypes.Strength ← IF PBitsDrive THEN driveStrong ELSE none;
offset: CARDINAL ← IF MuxLeft THEN 0 ELSE 1;
FOR i:
CARDINAL
IN [0..32)
DO
SIBIS[EBFD[pRAMReg, 32, i], pbitd, 66, (2*i)+offset, [[s, L], [s, H]]];
SIBIS[EBFD[pRAMReg, 32, i], npbitd, 66, (2*i)+offset, [[s, H], [s, L]]];
SIBIS[FALSE, pbitd, 66, (2*i)+1-offset, [[none, X], [none, X]]];
SIBIS[FALSE, npbitd, 66, (2*i)+1-offset, [[none, X], [none, X]]];
ENDLOOP;
SIBIS[pRAMRegParity, pbitd, 66, 64+offset, [[s, L], [s, H]]];
SIBIS[pRAMRegParity, npbitd, 66, 64+offset, [[s, H], [s, L]]];
SIBIS[FALSE, pbitd, 66, 65-offset, [[none, X], [none, X]]];
SIBIS[FALSE, npbitd, 66, 65-offset, [[none, X], [none, X]]];
IF
NOT nPBitsPrecharge
THEN
{
SCDTS[BitDWordOnes, 32, 0, 32, pbitd, 66, 0, 32, [[none, X], [drive, H]]];
SCDTS[BitDWordOnes, 32, 0, 32, npbitd, 66, 0, 32, [[none, X], [drive, H]]];
SCDTS[BitDWordOnes, 32, 0, 32, pbitd, 66, 32, 32, [[none, X], [drive, H]]];
SCDTS[BitDWordOnes, 32, 0, 32, npbitd, 66, 32, 32, [[none, X], [drive, H]]];
SCWTS[BitWordOnes, 16, 0, 2, pbitd, 66, 64, 2, [[none, X], [drive, H]]];
SCWTS[BitWordOnes, 16, 0, 2, npbitd, 66, 64, 2, [[none, X], [drive, H]]];
};
IF SensePBits
THEN {
FOR i:
CARDINAL
IN [0..32)
DO
pRAMReg ← IBID[EBFS[pbitd, 66, (2*i)+offset], pRAMReg, 32, i];
ENDLOOP;
pRAMRegParity ← EBFS[pbitd, 66, 64+offset];
};
};