X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Fcomponents%2FCoreDemux.java;h=76982e006005ed926674ad8892bc1f34a67e063e;hb=9bb76ff610ab0fcc07a9049e4a572053339593c9;hp=a5bb0fc6065d39faf6150a391dd4b0b6de9f88de;hpb=b32414f8406634aca730d724a011023c0da8bf22;p=Mograsim.git diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/CoreDemux.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/CoreDemux.java index a5bb0fc6..76982e00 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/CoreDemux.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/CoreDemux.java @@ -3,6 +3,8 @@ package net.mograsim.logic.core.components; import java.util.List; import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.timeline.TimelineEventHandler; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.core.wires.CoreWire; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; @@ -53,19 +55,27 @@ public class CoreDemux extends BasicCoreComponent } @Override - public void compute() + public TimelineEventHandler compute() { int selectValue = select.hasNumericValue() ? (int) select.getUnsignedValue() : -1; if (selectValue >= outputs.length) selectValue = -1; - if (selected != selectValue && selected != -1) - outputs[selected].clearSignals(); + boolean hasOldSelection = selected != selectValue && selected != -1; + int oldSelection = selected; + boolean hasNewSelection = selectValue != -1; + int newSelection = selectValue; + BitVector inputValues = in.getValues(); selected = selectValue; - if (selectValue != -1) - outputs[selectValue].feedSignals(in.getValues()); + return e -> + { + if (hasOldSelection) + outputs[oldSelection].clearSignals(); + if (hasNewSelection) + outputs[newSelection].feedSignals(inputValues); + }; } @Override