<> <> <> <<>> DIRECTORY Core, Rosemary, RosemaryUser, Ports; SunMouseXilinx: CEDAR PROGRAM IMPORTS Rosemary, RosemaryUser, Ports = BEGIN OPEN Ports; SunMousePorts: TYPE = REF SunMousePortsRec; SunMousePortsRec: TYPE = RECORD[ Clock, X1, X2, Y1, Y2, L, M, R, SerialOut: Port _ NIL]; SunMouseTestProc: RosemaryUser.TestProc = { ports: SunMousePorts _ Initialize[p, cellType.public, Eval ! Rosemary.Stop => IF reason = $BoolWireHasX THEN RESUME ELSE REJECT]; {OPEN ports; PB[L, TRUE, force]; PB[X1, TRUE, force]; CycleClock[ports, Eval]; DO CycleClock[ports, Eval]; ENDLOOP; }}; Initialize: PROC [p: Ports.Port, public: Core.Wire, eval: RosemaryUser.TestEvalProc] RETURNS [ports: SunMousePorts]= { ports _ NEW[SunMousePortsRec]; {OPEN ports; [Clock, X1, X2, Y1, Y2] _ Ports.BindPorts[public, p, "Clock", "X1", "X2", "Y1", "Y2"]; [L, M, R, SerialOut] _ Ports.BindPorts[public, p, "L", "M", "R", "SerialOut"]; PB[X1, FALSE, force]; PB[X2, FALSE, force]; PB[Y1, FALSE, force]; PB[Y2, FALSE, force]; PB[L, FALSE, force]; PB[M, FALSE, force]; PB[R, FALSE, force]; PB[SerialOut, FALSE, none]; CycleClock[ports, eval]; }}; CycleClock: PROC [ports: SunMousePorts, eval: RosemaryUser.TestEvalProc] = { OPEN ports; PB[Clock, FALSE, force]; eval[clockEval: TRUE]; eval[clockEval: FALSE]; PB[Clock, TRUE, force]; eval[clockEval: TRUE]; eval[clockEval: FALSE]; }; RosemaryUser.RegisterTestProc["SunMouse", SunMouseTestProc]; END.