<> <> <> DIRECTORY Random, Rope; DynaSeer: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; Opcode: TYPE = {RBRqst, RBRply, WBRqst, WBRply, WSRqst, WSRply, NoOp}; Cycle: TYPE = REF CycleRec; CycleRec: TYPE = RECORD [ addessCyle: BOOL, -- {Data, Address} data: INT, -- 64 bits master: INT, cycleNumber: INT ]; Packet, History: TYPE = REF HistoryRec; HistoryRec: TYPE = RECORD [ SEQUENCE size: NAT OF Cycle ]; DeviceID: TYPE = [0..10]; Length: TYPE = {Zero, Two, Five}; Priority: TYPE = {DisplayLP, CacheRq, IORq, DisplayHP, MemRply, CacheRply}; RequestGrant: TYPE = RECORD[ length: Length _ Zero, -- written by the device (Zero means not requesting) pr: Priority _ DisplayLP, -- written by the device intendedCycle: Cycle _ NIL, granted: BOOL _ TRUE]; -- written by the arbiter Device: TYPE = REF DeviceRec; DeviceRec: TYPE = RECORD [ state: REF, cycle: CycleProc ]; CycleProc: TYPE = PROC [cycle: Cycle]; requests: ARRAY DeviceID OF RequestGrant; <> CreateCycle: PROC [opcode: Opcode, owner: INT, requestTime: INT] RETURNS [Cycle]; <> <> CreateHistory: PROC [timeLimit: INT] RETURNS [history: History _ NIL]; END.