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. tDynaSeer.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Last Edited by: Louis Monier September 18, 1986 12:47:35 pm PDT Theory We create a typical history of n transactions on the Dynabus. Types and Constants Basic operations BusOpToHistory: PROC [busOp: BusOp] RETURNS [h: History]; ConcatHistories: PROC [h0, h1: History] RETURNS [h: History]; Κ}˜– "Cedar" stylešœ™Icode– "Cedar" stylešœ Οmœ1™