X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.core%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fcore%2Fcomponents%2FCoreDemux.java;h=8f4fe42819312f4a8aecbfca79065ecb9944207c;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;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..8f4fe428 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; + int selectValue = select.getValues().isBinary() ? (int) select.getValues().getUnsignedValueLong() : -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