<> <> <> Imports BitOps, BitSwOps; Open BitOps, BitSwOps; CELLTYPE "PCAMDriver" PORTS[ <<>> <> Vdd, Gnd> <> CAMPage, nCAMPage=SWITCH[24]-(Special XPhobic), CAMBlock, nCAMBlock=SWITCH[4]-(Special XPhobic), <<>> <> PDataI> <> VARegSensePDataIA, LastRefRegSenseVARegB, PageDriveCAMBitsA, BlockDriveCAMBitsABOOL ] State PageReg, LastRefPageReg: BitDWord, BlockReg, LastRefBlockReg: BitWord EvalSimple IF VARegSensePDataIA THEN { PageReg _ MDTD[PDataI, 32, 0, 24, PageReg, 24, 0, 24]; BlockReg _ MDTW[PDataI, 32, 24, 4, BlockReg, 4, 0, 4] }; IF LastRefRegSenseVARegB THEN { LastRefPageReg _ PageReg; LastRefBlockReg _ BlockReg; }; TRUSTED { cpd: SwitchMWord _ DESCRIPTOR[CAMPage]; ncpd: SwitchMWord _ DESCRIPTOR[nCAMPage]; cbd: SwitchMWord _ DESCRIPTOR[CAMBlock]; ncbd: SwitchMWord _ DESCRIPTOR[nCAMBlock]; ps: SwitchTypes.Strength _ IF PageDriveCAMBitsA THEN driveStrong ELSE none; bs: SwitchTypes.Strength _ IF BlockDriveCAMBitsA THEN driveStrong ELSE none; SCDTS[PageReg, 24, 0, 24, cpd, 24, 0, 24, [[ps, L], [ps, H]]]; SCDTS[PageReg, 24, 0, 24, ncpd, 24, 0, 24, [[ps, H], [ps, L]]]; SCWTS[BlockReg, 4, 0, 4, cbd, 4, 0, 4, [[bs, L], [bs, H]]]; SCWTS[BlockReg, 4, 0, 4, ncbd, 4, 0, 4, [[bs, H], [bs, L]]]; }; RefMatchesLastRefReg _ PageReg=LastRefPageReg AND BlockReg=LastRefBlockReg; ENDCELLTYPE