X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fstandard%2Fmemory%2FWordAddressableMemoryComponent.java;fp=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fstandard%2Fmemory%2FWordAddressableMemoryComponent.java;h=b965dbad8e78d2c79da8b20b3c166d302483299b;hb=9bb76ff610ab0fcc07a9049e4a572053339593c9;hp=3c135ec4e92931c02e2c8fa5e859ae2c656aa323;hpb=c023578f3bc1537b575520740cc1c31ebc47aad7;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java index 3c135ec4..b965dbad 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java @@ -4,7 +4,9 @@ import java.util.List; import net.mograsim.logic.core.components.BasicCoreComponent; import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.timeline.TimelineEventHandler; import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; import net.mograsim.machine.MainMemoryDefinition; @@ -47,23 +49,28 @@ public class WordAddressableMemoryComponent extends BasicCoreComponent } @Override - protected void compute() + protected TimelineEventHandler compute() { if (!address.hasNumericValue()) { if (read.equals(rWBit.getValue())) - data.feedSignals(Bit.U.toVector(data.width())); - else - data.clearSignals(); - return; + return e -> data.feedSignals(Bit.U.toVector(data.width())); + return e -> data.clearSignals(); } long addressed = address.getUnsignedValue(); if (read.equals(rWBit.getValue())) - data.feedSignals(memory.getCell(addressed)); + { + BitVector storedData = memory.getCell(addressed); + return e -> data.feedSignals(storedData); + } else { - data.clearSignals(); - memory.setCell(addressed, data.getValues()); + BitVector transData = data.getValues(); + return e -> + { + data.clearSignals(); + memory.setCell(addressed, transData); + }; } }