-- MOSSIMCharFIFODriver.sak -- last edited by Suzuki: 14-Dec-81 10:26:38 DIRECTORY MOSSIMFIFO, Connector, Scheduler, SimIO; MOSSIMCharFIFODriver: MONITOR IMPORTS Connector, MOSSIMFIFO, Scheduler, SimIO = { Reader: DEVICE = { IN DataAv: BOOLEAN, DataOut: ARRAY [0..16) OF CHARACTER, Done: BOOLEAN OUT ReadReq: BOOLEAN GUARDIAN {} CONTROL { SimIO.WF0[" Reader started.*n"]; THROUGH [0..30) DO Scheduler.Delay[20]; WHEN Done UP: ReadReq _ TRUE; FOR i: NAT IN [0..16) DO SimIO.WF1["%u", DataOut[i]]; ENDLOOP; SimIO.WF0[" "]; Scheduler.Delay[10]; ReadReq _ FALSE; ENDLOOP; SimIO.WF0[" Reader terminated.*n"]} }; Writer: DEVICE = { IN SpaceAv, Done: BOOLEAN OUT WriteReq: BOOLEAN, DataIn: CARDINAL GUARDIAN {} CONTROL { i: CARDINAL; SimIO.WF0[" Writer started.*n"]; FOR i IN [0..30) DO Scheduler.Delay[20]; WHEN Done UP: {DataIn _ i; WriteReq _ TRUE}; SimIO.WF1["%u- ", i]; Scheduler.Delay[10]; WriteReq _ FALSE; ENDLOOP; SimIO.WF0[" Writer terminated.*n"]} }; Start: DEVICE = { IN OUT Init, ReadReq, WriteReq: BOOLEAN GUARDIAN {} CONTROL { ReadReq _ FALSE; WriteReq _ FALSE; Scheduler.Delay[10]; Init _ TRUE; Scheduler.Delay[5]; Init _ FALSE} }; SimIO.Start["FIFO.jam"]; CIRCUIT { COMPONENTS fifo: MOSSIMFIFO.FIFOFunc[size: 100], reader: Reader, writer: Writer, start: Start NODES init, write, read, in, space, data, out, done: NODE REPRESENTATION CONNECTIONS fifo[Init: init, WriteRequest: write, ReadRequest: read, DIn: in, SpaceAv: space, DataAv: data, DOut: out, Done: done], reader[DataAv: data, DataOut: out, ReadReq: read, Done: done], writer[SpaceAv: space, Done: done, WriteReq: write, DataIn: in], start[Init: init, ReadReq: read, WriteReq: write]}; SimIO.Stop[]; }.