DynaSeer.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Last Edited by: Louis Monier September 18, 1986 12:47:35 pm PDT
Types and Constants
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;
Basic operations
CreateCycle: PROC [opcode: Opcode, owner: INT, requestTime: INT] RETURNS [Cycle];
BusOpToHistory: PROC [busOp: BusOp] RETURNS [h: History];
ConcatHistories: PROC [h0, h1: History] RETURNS [h: History];
CreateHistory: PROC [timeLimit: INT] RETURNS [history: History ← NIL];