-- File: [Indigo]<Sakura>Dragon>DragonImpl.sak -- 4-Mar-82 13:46:21 DIRECTORY DragonArbiter: TYPE, DragonCache: TYPE, DragonClock: TYPE, DragonMap: TYPE, DragonMemory: TYPE, DragonProcessor: TYPE, SakuraRT: TYPE, SimIO: TYPE; DragonImpl: MONITOR IMPORTS DragonArbiter, DragonCache, DragonClock, DragonMap, DragonMemory, DragonProcessor, SakuraRT, SimIO = BEGIN SimIO.Start[]; {op: SakuraRT.Handle ← SakuraRT.Create[]; pcdata: SakuraRT.Handle ← SakuraRT.Create[]; pcexception: SakuraRT.Handle ← SakuraRT.Create[]; pcreject: SakuraRT.Handle ← SakuraRT.Create[]; pcreq: 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[]; proc, cache, arbiter, clock, map, memory: PROCESS; SakuraRT.IncCurrent[]; proc ← FORK DragonProcessor.Processor[ClockA: clockA, ClockB: clockB, Op: op, Fault: pcexception, Reject: pcreject, InData: pcdata, RQ: pcreq, OutData: pcdata]; SakuraRT.CatalogProcId[proc]; SakuraRT.IncCurrent[]; cache ← FORK DragonCache.Cache [Op: op, PDataIn: pcdata, MDataIn: cmdata, ClockA: clockA, ClockB: clockB, CMDIn: cmd, RQ: pcreq, SharedIn: cmshared, Grant: agrp1, Exception: pcexception, Reject: pcreject, SharedOut: cmshared, CMDOut: cmd, Rq: arqp1, PDataOut: pcdata, MDataOut: cmdata];SakuraRT.CatalogProcId[cache]; SakuraRT.IncCurrent[]; arbiter ← FORK DragonArbiter.Arbiter [ClockA: clockA, ClockB: clockB, Proc1Rq: arqp1, Proc1Gr: agrp1]; 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[proc]; SakuraRT.Join[cache]; SakuraRT.Join[arbiter]; SakuraRT.Join[clock]; SakuraRT.Join[map]; SakuraRT.Join[memory]; SakuraRT.IncCurrent[]}; SimIO.Stop[] END.