-- File: [Indigo]<Sakura>Dragon>DragonImpl1.sak
-- 11-Mar-82 9:32:43
DIRECTORY
DragonArbiter1: TYPE,
DragonCache: TYPE,
DragonClock: TYPE,
DragonMap: TYPE,
DragonMemory: TYPE,
DragonProcessor: TYPE,
SakuraRT: TYPE,
SimIO: TYPE;
DragonImpl1: MONITOR
IMPORTS DragonArbiter1, c1: DragonCache, c2: DragonCache, DragonClock,
DragonMap, DragonMemory, p1: DragonProcessor, p2: DragonProcessor, SakuraRT,
SimIO
= BEGIN
SimIO.Start[];
{op1: SakuraRT.Handle ← SakuraRT.Create[];
pcexception1: SakuraRT.Handle ← SakuraRT.Create[];
pcreject1: SakuraRT.Handle ← SakuraRT.Create[];
pcdata1: SakuraRT.Handle ← SakuraRT.Create[];
pcreq1: SakuraRT.Handle ← SakuraRT.Create[];
op2: SakuraRT.Handle ← SakuraRT.Create[];
pcexception2: SakuraRT.Handle ← SakuraRT.Create[];
pcreject2: SakuraRT.Handle ← SakuraRT.Create[];
pcdata2: SakuraRT.Handle ← SakuraRT.Create[];
pcreq2: SakuraRT.Handle ← SakuraRT.Create[];
cmshared: SakuraRT.Handle ← SakuraRT.Create[];
cmd: SakuraRT.Handle ← SakuraRT.Create[];
cmdata: SakuraRT.Handle ← SakuraRT.Create[];
clockA: SakuraRT.Handle ← SakuraRT.Create[];
clockB: SakuraRT.Handle ← SakuraRT.Create[];
arqp1: SakuraRT.Handle ← SakuraRT.Create[];
agrp1: SakuraRT.Handle ← SakuraRT.Create[];
arqp2: SakuraRT.Handle ← SakuraRT.Create[];
agrp2: SakuraRT.Handle ← SakuraRT.Create[];
proc1, proc2, cache1, cache2, arbiter, clock, map, memory: PROCESS;
SakuraRT.IncCurrent[];
proc1 ← FORK p1.Processor
[ClockA: clockA, ClockB: clockB, Op: op1, Fault: pcexception1, Reject: pcreject1,
InData: pcdata1, RQ: pcreq1, OutData: pcdata1];SakuraRT.CatalogProcId[proc1];
SakuraRT.IncCurrent[];
proc2 ← FORK p2.Processor
[ClockA: clockA, ClockB: clockB, Op: op2, Fault: pcexception2, Reject: pcreject2,
InData: pcdata2, RQ: pcreq2, OutData: pcdata2];SakuraRT.CatalogProcId[proc2];
SakuraRT.IncCurrent[];
cache1 ← FORK c1.Cache
[Op: op1, PDataIn: pcdata1, MDataIn: cmdata, ClockA: clockA, ClockB: clockB,
CMDIn: cmd, RQ: pcreq1, SharedIn: cmshared, Grant: agrp1, Exception: pcexception1,
Reject: pcreject1, SharedOut: cmshared, CMDOut: cmd, Rq: arqp1, PDataOut: pcdata1,
MDataOut: cmdata];SakuraRT.CatalogProcId[cache1];
SakuraRT.IncCurrent[];
cache2 ← FORK c2.Cache
[Op: op2, PDataIn: pcdata2, MDataIn: cmdata, ClockA: clockA, ClockB: clockB,
CMDIn: cmd, RQ: pcreq2, SharedIn: cmshared, Grant: agrp2, Exception: pcexception2,
Reject: pcreject2, SharedOut: cmshared, CMDOut: cmd, Rq: arqp2, PDataOut: pcdata2,
MDataOut: cmdata];SakuraRT.CatalogProcId[cache2];
SakuraRT.IncCurrent[];
arbiter ← FORK DragonArbiter1.Arbiter
[ClockA: clockA, ClockB: clockB, Proc1Rq: arqp1, Proc1Gr: agrp1, Proc2Rq: arqp2,
Proc2Gr: agrp2];SakuraRT.CatalogProcId[arbiter];
SakuraRT.IncCurrent[];
clock ← FORK DragonClock.ClockGenerator[ClockA: clockA, ClockB: clockB];
SakuraRT.CatalogProcId[clock];
SakuraRT.IncCurrent[];
map ← FORK DragonMap.MapProcessor[ClockA: clockA, ClockB: clockB, CMDIn: cmd,
MDataIn: cmdata, CMDOut: cmd, MDataOut: cmdata];
SakuraRT.CatalogProcId[map];
SakuraRT.IncCurrent[];
memory ← FORK DragonMemory.Memory
[ClockA: clockA, ClockB: clockB, CMDIn: cmd, SharedIn: cmshared, MDataIn: cmdata,
MDataOut: cmdata];SakuraRT.CatalogProcId[memory];
SakuraRT.DecCurrent[];
SakuraRT.Join[proc1];
SakuraRT.Join[proc2];
SakuraRT.Join[cache1];
SakuraRT.Join[cache2];
SakuraRT.Join[arbiter];
SakuraRT.Join[clock];
SakuraRT.Join[map];
SakuraRT.Join[memory];
SakuraRT.IncCurrent[]};
SimIO.Stop[]
END.