-- File: [Indigo]<Sakura>Dragon>DragonMapImpl.sak -- 14-Mar-82 19:37:18 DIRECTORY DragonCache, DragonMap, SakuraRT; DragonMapImpl: MONITOR IMPORTS SakuraRT EXPORTS DragonMap = { MapProcessor: PUBLIC DEVICE = { IN ClockA, ClockB, CMDIn: BOOLEAN, MDataIn: DragonCache.MbusType OUT CMDOut: BOOLEAN, MDataOut: DragonCache.MbusType GUARDIAN {} CONTROL { DO WHEN ClockB UP: NULL; IF CMDIn THEN WITH m: MDataIn SELECT FROM Instruction => SELECT m.command FROM ReadQuad => NULL; WriteQuad => NULL; WriteSingle => NULL; NotReady => ERROR; ReadMap => ERROR; ReadMapAndSetRpDirty => ERROR; DoMapOp => ERROR; SetRpDirty => { WHEN ClockA UP: CMDOut ← TRUE; MDataOut ← [MapCommand[MapOpDone, , , , ]]; WHEN ClockA UP: CMDOut ← FALSE; }; MapOpDone => ERROR; ENDCASE; MapCommand => SELECT m.command FROM ReadMap => { WHEN ClockB UP: CMDOut ← TRUE; MDataOut ← [MapCommand[MapOpDone, , FALSE, FALSE, m.vp]]; WHEN ClockA UP: CMDOut ← FALSE; }; ReadMapAndSetRpDirty => { WHEN ClockB UP: CMDOut ← TRUE; MDataOut ← [MapCommand[MapOpDone, , FALSE, TRUE, m.vp]]; WHEN ClockA UP: CMDOut ← FALSE; }; ReadQuad => NULL; MapOpDone => NULL; ENDCASE => ERROR; Data => ERROR; ENDCASE => ERROR; ENDLOOP} }; }.