-- File: [Indigo]<Sakura>Dragon>DragonCache.sak
-- 15-Mar-82 11:37:56

DIRECTORY
  SakuraRT;
  
DragonCache: DEFINITIONS = {

PbusType: TYPE = RECORD [
  body: SELECT kind: {Instruction, Data} FROM
    Instruction => [vp: LONG CARDINAL -- actually 25 bits --,
      bl: [0..37B],
      word: [0..3]],
    Data => [data: LONG CARDINAL]
    ENDCASE];
PbusOp: TYPE = {Fetch, FetchHold, Store, MapOp};

MbusType: TYPE = RECORD [
  body: SELECT kind: {Instruction, MapCommand, Data} FROM
    Instruction => [command: MbusCommand,
      rp: LONG CARDINAL -- actually 25 bits --,
      bl: [0..37B],
      word: [0..3]],
    MapCommand => [command: MbusCommand,
      mapop: MapOpKind,
      fault: BOOLEAN,
      rpdirty: BOOLEAN,
      vp: LONG CARDINAL],
    Data => [data: LONG CARDINAL]
    ENDCASE];
MbusCommand: TYPE = {ReadQuad, WriteQuad, WriteSingle, NotReady, ReadMap, 
  ReadMapAndSetRpDirty, DoMapOp, SetRpDirty, MapOpDone};
MapOpKind: TYPE = {SetMap, SetMapFlags, GetMapFlags};

CheckVal: PROC [vp: LONG CARDINAL, bl: [0..37B], word: [0..3], 
    val: LONG CARDINAL];

Cache: DEVICE = {
IN Op: PbusOp, PDataIn, MDataIn: LONG CARDINAL, ClockA, ClockB, CMDIn, RQ, 
  SharedIn, Grant: BOOLEAN
OUT Exception, Reject, SharedOut, CMDOut, Rq: BOOLEAN, 
    PDataOut: PbusType, MDataOut: MbusType
};


}.