X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodeladapter%2Fcomponentadapters%2FSimpleRectangularHardcodedModelComponentAdapter.java;h=57effc32654a650af0da906f61e9bc0e17e4ca17;hb=13577856cd85c46f2cd4ad956332697bc820f425;hp=dbebc0ff55add7680d0a270274e5512a7f496096;hpb=7d05144c25daa53e60fc9ed9fd503546a86567f8;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedModelComponentAdapter.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedModelComponentAdapter.java index dbebc0ff..57effc32 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedModelComponentAdapter.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleRectangularHardcodedModelComponentAdapter.java @@ -2,7 +2,6 @@ package net.mograsim.logic.model.modeladapter.componentadapters; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.atomic.AtomicReference; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.timeline.Timeline; @@ -13,6 +12,7 @@ import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcod import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.CoreModelParameters; +import net.mograsim.logic.model.util.ObservableAtomicReference; public class SimpleRectangularHardcodedModelComponentAdapter implements ComponentAdapter { @@ -29,10 +29,10 @@ public class SimpleRectangularHardcodedModelComponentAdapter implements Componen Map readEnds = new HashMap<>(); Map readWriteEnds = new HashMap<>(); - AtomicReference state = new AtomicReference<>(); + ObservableAtomicReference state = new ObservableAtomicReference<>(); Runnable recalculate = () -> state.updateAndGet(s -> modelComponent.recalculate(s, readEnds, readWriteEnds)); - LogicObserver logicObs = c -> timeline.addEvent(e -> recalculate.run(), params.gateProcessTime); + LogicObserver logicObs = c -> recalculate.run(); modelComponent.setCoreModelBindingAndResetState(state, recalculate); @@ -42,11 +42,12 @@ public class SimpleRectangularHardcodedModelComponentAdapter implements Componen ReadEnd end; if (pin.usage != PinUsage.INPUT) { - ReadWriteEnd rwEnd = wire.createReadWriteEnd(); - readWriteEnds.put(pin.name, rwEnd); - end = rwEnd; - } else - end = wire.createReadOnlyEnd(); + // TODO do this prettier + CoreWire pseudoWire = new CoreWire(timeline, wire.width, params.hardcodedComponentProcessTime); + CoreWire.fuse(wire, pseudoWire); + readWriteEnds.put(pin.name, pseudoWire.createReadWriteEnd()); + } + end = wire.createReadOnlyEnd(); readEnds.put(pin.name, end); if (pin.usage != PinUsage.OUTPUT) end.registerObserver(logicObs);