<> <> <> <<>> DIRECTORY DABasics, RefTab, Rope, SunRPC, SunRPCAuth; SoftHdwBasics: CEDAR DEFINITIONS = BEGIN ArrayPositions: TYPE = LIST OF ArrayPosition; ArrayPosition: TYPE = REF ArrayPositionRec; ArrayPositionRec: TYPE = RECORD [ type: NodeType _ OToP, orientation: Orientation _ Vertical, chip: Position _ [0, 0], minorArray: Position _ [0, 0], grain: Position _ [0, 0]]; <<>> NodeType: TYPE = {OToP, RUToP, LDToP, LToP, PToI, PToRU, PToLD, PToL, ORUToI, LDToLD, OLDToI, ORUToL, Tristate, RUToRU, ORUToLD, LDToI, OLDToRU, LToI, RUToI, Inverter, FlipFlop, ParallelInput, InputEnabled, RAMEven, RAMOdd, Master, Input, Interchip, Long, Output, LeftDown, RightUp}; nodeNames: ARRAY NodeType OF Rope.ROPE; Orientation: TYPE = {Vertical, Horizontal}; orientationNames: ARRAY Orientation OF Rope.ROPE; Position: TYPE = DABasics.Position; <> << >> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <> CreateBase: PROC [sizes: ArrayPosition, useConnectionMachine: BOOL _ FALSE] RETURNS [array: ArrayBase]; <> Initialize: PROC [array: ArrayBase]; Fetch: PROC [array: ArrayBase, bit: ArrayPosition, time: INT _ -1] RETURNS [value: BOOL]; Store: PROC [array: ArrayBase, bit: ArrayPosition, value: BOOL]; MasterToSlave: PROC [array: ArrayBase]; Relax: PROC [array: ArrayBase]; Sample: PROC [array: ArrayBase]; ArrayPositionToRope: PROC [position: ArrayPosition] RETURNS [rope: Rope.ROPE]; RopeToArrayPosition: PROC [rope: Rope.ROPE] RETURNS [position: ArrayPosition]; ArrayPositionEqual: RefTab.EqualProc; ArrayPositionHash: RefTab.HashProc; <> <<>> ArrayBase: TYPE = REF ArrayBaseRec; ArrayBaseRec: TYPE = RECORD [ sizes: ArrayPosition, useConnectionMachine: BOOL, state: ArrayBaseState, id: CARD, h: SunRPC.Handle, c: SunRPCAuth.Conversation]; ArrayBaseState: TYPE = REF ArrayBaseStateRec; ArrayBaseStateRec: TYPE = RECORD [ positionToEntity: RefTab.Ref, -- grains indexed by Output, minor arrays indexed by RAMEven, long lines by Long scheduledGrains: Grain _ NIL, scheduledMinorArrays: MinorArray _ NIL]; MinorArray: TYPE = REF MinorArrayRec; MinorArrayRec: TYPE = RECORD [ key: ArrayPosition _ NIL, scheduled: BOOL _ FALSE, nextMinorArray: MinorArray _ NIL, RAMEven, RAMOdd: BOOL _ FALSE, vertical: GrainSeq _ NIL, horizontal: GrainSeq _ NIL]; Grain: TYPE = REF GrainRec; GrainSeq: TYPE = REF GrainSeqRec; GrainSeqRec: TYPE = RECORD [elements: SEQUENCE size: CARDINAL OF Grain]; GrainRec: TYPE = RECORD [ key: ArrayPosition _ NIL, scheduled: BOOL _ FALSE, nextGrain: Grain _ NIL, vertical: BOOL _ FALSE, leftDownSelectLeftDown: BOOL _ FALSE, leftDown: BOOL _ FALSE, rightUpSelectRightUp: BOOL _ FALSE, rightUp: BOOL _ FALSE, inputSelect: InputSelectIndex _ none, input: BOOL _ FALSE, output: BOOL _ FALSE, leftDownGrain: Grain _ NIL, rightUpGrain: Grain _ NIL, ORUToL, Tristate: BOOL _ FALSE, longControl: LongControl _ off, longLine: LongLine _ NIL, minorArray: MinorArray _ NIL, flipFlop: BOOL _ FALSE, master: BOOL _ FALSE, invert: BOOL _ FALSE, parallelInput: BOOL _ FALSE, ORUToI, OLDToI, LDToI, LToI, RUToI: BOOL _ FALSE, LDToLD, ORUToLD: BOOL _ FALSE, RUToRU, OLDToRU: BOOL _ FALSE, perpendicularGrains: SEQUENCE size: CARDINAL OF PerpendicularGrain]; LongControl: TYPE = {off, on, old}; InputSelectIndex: TYPE = {none, oru, old, ld, l, ru}; PerpendicularGrain: TYPE = RECORD [ inputEnabled: BOOL, grain: Grain]; LongLine: TYPE = REF LongLineRec; LongLineRec: TYPE = RECORD [ key: ArrayPosition _ NIL, long: BOOL, grains: SEQUENCE size: CARDINAL OF Grain]; END.