X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Fcomponents%2FClock.java;fp=net.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Fcomponents%2FClock.java;h=b691d7e7183608b75b456615c5347f619de8bead;hb=4c02fe978b3ef5dfe795a8e5c3a8977abd17e9cf;hp=65621358f4d4d2900b02f676864b6bf6c898d45d;hpb=36acc8080de773a3a10d85dedc45add7ac9da4a7;p=Mograsim.git diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java index 65621358..b691d7e7 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/Clock.java @@ -1,7 +1,11 @@ package net.mograsim.logic.core.components; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import net.mograsim.logic.core.LogicObservable; +import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.timeline.TimelineEvent; import net.mograsim.logic.core.timeline.TimelineEventHandler; @@ -10,8 +14,9 @@ import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; -public class Clock extends Component implements TimelineEventHandler +public class Clock extends Component implements TimelineEventHandler, LogicObservable { + private Collection observers; private boolean toggle = false; private ReadWriteEnd out; private int delta; @@ -26,6 +31,7 @@ public class Clock extends Component implements TimelineEventHandler super(timeline); this.delta = delta; this.out = out; + this.observers = new HashSet<>(); addToTimeline(); } @@ -35,6 +41,7 @@ public class Clock extends Component implements TimelineEventHandler addToTimeline(); out.feedSignals(toggle ? Bit.ONE : Bit.ZERO); toggle = !toggle; + notifyObservers(); } public ReadWriteEnd getOut() @@ -42,6 +49,11 @@ public class Clock extends Component implements TimelineEventHandler return out; } + public boolean isOn() + { + return !toggle; + } + private void addToTimeline() { timeline.addEvent(this, delta); @@ -58,4 +70,22 @@ public class Clock extends Component implements TimelineEventHandler { return List.of(out); } + + @Override + public void registerObserver(LogicObserver ob) + { + observers.add(ob); + } + + @Override + public void deregisterObserver(LogicObserver ob) + { + observers.remove(ob); + } + + @Override + public void notifyObservers() + { + observers.forEach(ob -> ob.update(this)); + } }