-package era.mi.logic.components;
-
-import era.mi.logic.Bit;
-import era.mi.logic.Simulation;
-import era.mi.logic.timeline.TimelineEvent;
-import era.mi.logic.timeline.TimelineEventHandler;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayInput;
-
-public class Clock implements TimelineEventHandler
-{
- private boolean toggle = false;
- private WireArrayInput outI;
-
- public Clock(WireArray out)
- {
- this.outI = out.createInput();
- }
-
- @Override
- public void handle(TimelineEvent e)
- {
- Simulation.TIMELINE.addEvent(this, 50);
- outI.feedSignals(new Bit[] { toggle ? Bit.ONE : Bit.ZERO });
- toggle = !toggle;
- }
-
- public WireArray getOut()
- {
- return outI.owner;
- }
-}
+package era.mi.logic.components;\r
+\r
+import java.util.List;\r
+\r
+import era.mi.logic.Simulation;\r
+import era.mi.logic.timeline.TimelineEvent;\r
+import era.mi.logic.timeline.TimelineEventHandler;\r
+import era.mi.logic.types.Bit;\r
+import era.mi.logic.wires.Wire;\r
+import era.mi.logic.wires.Wire.WireEnd;\r
+\r
+public class Clock implements TimelineEventHandler, Component\r
+{\r
+ private boolean toggle = false;\r
+ private WireEnd out;\r
+ private int delta;\r
+\r
+ /**\r
+ * \r
+ * @param out {@link Wire} the clock's impulses are fed into\r
+ * @param delta ticks between rising and falling edge\r
+ */\r
+ public Clock(WireEnd out, int delta)\r
+ {\r
+ this.delta = delta;\r
+ this.out = out;\r
+ addToTimeline();\r
+ }\r
+\r
+ @Override\r
+ public void handle(TimelineEvent e)\r
+ {\r
+ addToTimeline();\r
+ out.feedSignals(toggle ? Bit.ONE : Bit.ZERO);\r
+ toggle = !toggle;\r
+ }\r
+\r
+ public WireEnd getOut()\r
+ {\r
+ return out;\r
+ }\r
+\r
+ private void addToTimeline()\r
+ {\r
+ Simulation.TIMELINE.addEvent(this, delta);\r
+ }\r
+\r
+ @Override\r
+ public List<WireEnd> getAllInputs()\r
+ {\r
+ return List.of();\r
+ }\r
+\r
+ @Override\r
+ public List<WireEnd> getAllOutputs()\r
+ {\r
+ return List.of(out);\r
+ }\r
+}\r