DIRECTORY Basics, BitOps, MCUtils; MCUtilsImpl: CEDAR PROGRAM IMPORTS Basics, BitOps EXPORTS MCUtils ~ BEGIN ComposeIOWrite0: PUBLIC PROC [ownerFifoDelay: [0..8), enbCorr: BOOL, enbOpReflect: BOOL _ TRUE, selRefCk: [0..4), gntDelay, pchgDelay, refDelay, wrDelay, rdDelay: [0..32)] RETURNS [data: LONG CARDINAL] ~{ data _ 0; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[gntDelay]], 27]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[ownerFifoDelay]], 24]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[IF enbCorr THEN 1 ELSE 0]], 23]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[selRefCk]], 21]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[IF enbOpReflect THEN 1 ELSE 0]], 20]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[pchgDelay]], 15]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[refDelay]], 10]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[wrDelay]], 5]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[rdDelay]], 0]].lc; }; ComposeIOWrite1: PUBLIC PROC [banks: [1..16], ramAddWires: [9..14], bankAdd: [0..16) _ 0, pageAdd: CARDINAL _ 0] RETURNS [data: LONG CARDINAL] ~{ pageMatch: CARDINAL _ Basics.BITAND[Basics.BITSHIFT[0ffffh, (ramAddWires-9)*2 + BitOps.Log2[banks]], 03fffh]; IF BitOps.TwoToTheLog2[banks]#banks THEN ERROR; --no. of banks must be a power of two IF bankAdd>banks-1 THEN ERROR; data _ 0; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[pageMatch]], 14]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[pageAdd]], 0]].lc; }; ComposeIOWrite2: PUBLIC PROC [banks: [1..16], ramAddWires: [9..14], bankAdd: [0..16) _ 0] RETURNS [data: LONG CARDINAL] ~{ lowAdd: CARDINAL _ BitOps.Log2[banks]; highAdd: CARDINAL _ ramAddWires - 9 + BitOps.Log2[banks]; bankMask: CARDINAL _ Basics.BITAND[Basics.BITNOT[Basics.BITSHIFT[0fh, BitOps.Log2[banks]]], 0fh]; IF BitOps.TwoToTheLog2[banks]#banks THEN ERROR; --no. of banks must be a power of two IF bankAdd>banks-1 THEN ERROR; data _ 0; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[lowAdd]], 12]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[highAdd]], 8]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[bankMask]], 4]].lc; data _ Basics.DoubleOr[[lc[data]], Basics.DoubleShiftLeft[[lc[bankAdd]], 0]].lc; }; END. ŽMCUtilsImpl.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Last Edited by: Gasbarro November 23, 1987 3:19:46 pm PST Κ˜codešœ™K™œ œœ˜bKšœR˜RKšœ>œœœ˜gKšœS˜SKšœR˜RKšœP˜PKšœP˜PK˜K˜—š žœ œGœœœœ˜‘Kšœ œ œœ;˜nKšœ"œœΟc%˜UKšœœœ˜K˜ KšœS˜SKšœP˜PK˜K˜—š žœ œ>œœœ˜zKšœœ˜&Kšœ œ(˜9Kš œ œ œ œœ!˜aKšœ"œœŸ%˜UKšœœœ˜K˜ KšœP˜PKšœP˜PKšœQ˜QKšœP˜PK˜—K˜Kšœ˜J˜—…— ” $