From: Fabian Stemmler Date: Sat, 24 Aug 2019 11:12:18 +0000 (+0200) Subject: Updated MainMemory interface X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=9aeb97636520d2226d3d9919ddf38c0e6d0171b7;p=Mograsim.git Updated MainMemory interface added getDefinition() to access MainMemoryDefinition updated the existing memory components to be initialized with a MainMemoryDefinition --- diff --git a/net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java new file mode 100644 index 00000000..2431b65a --- /dev/null +++ b/net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java @@ -0,0 +1,45 @@ +package net.mograsim.machine; + +public class DefaultMainMemoryDefinition implements MainMemoryDefinition { + private final int memoryAddressBits, cellWidth; + private final long minimalAddress, maximalAddress; + + public DefaultMainMemoryDefinition(int memoryAddressBits, int cellWidth, long minimalAddress, long maximalAddress) + { + super(); + this.memoryAddressBits = memoryAddressBits; + this.cellWidth = cellWidth; + this.minimalAddress = minimalAddress; + this.maximalAddress = maximalAddress; + } + + public DefaultMainMemoryDefinition(MainMemoryDefinition definition) + { + this(definition.getMemoryAddressBits(), definition.getCellWidth(), definition.getMinimalAddress(), definition.getMaximalAddress()); + } + + @Override + public int getMemoryAddressBits() + { + return memoryAddressBits; + } + + @Override + public int getCellWidth() + { + return cellWidth; + } + + @Override + public long getMinimalAddress() + { + return minimalAddress; + } + + @Override + public long getMaximalAddress() + { + return maximalAddress; + } + +} diff --git a/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java b/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java index 78c0ca05..f1827ef1 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/MainMemory.java @@ -1,5 +1,10 @@ package net.mograsim.machine; +import net.mograsim.logic.core.types.BitVector; + public interface MainMemory { + public BitVector getCell(long address); + public void setCell(long address, BitVector word); + public MainMemoryDefinition getDefinition(); } diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java index 3d63b470..1632c8eb 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java @@ -2,8 +2,8 @@ package net.mograsim.machine.standard.memory; import org.eclipse.swt.graphics.Color; +import com.google.gson.Gson; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; @@ -16,26 +16,25 @@ import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; import net.mograsim.logic.model.serializing.IdentifierGetter; import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; +import net.mograsim.machine.DefaultMainMemoryDefinition; +import net.mograsim.machine.MainMemoryDefinition; +import net.mograsim.machine.standard.memory.WordAddressableMemoryComponent; import net.mograsim.preferences.Preferences; public class GUIMemoryWA extends GUIComponent { - private final static String paramAddr = "addrBits", paramWordWidth = "wordWidth", paramMaxAddr = "maxAddr", paramMinAddr = "minAddr"; - private final int addressBits, wordWidth; - public final long maximalAddress, minimalAddress; + private final MainMemoryDefinition definition; private final Pin addrPin, dataPin, rWPin; + private WordAddressableMemoryComponent memory; private final static int width = 100, height = 300; - public GUIMemoryWA(ViewModelModifiable model, int addressBits, int wordWidth, long maximalAddress, long minimalAddress, String name) + public GUIMemoryWA(ViewModelModifiable model, MainMemoryDefinition definition, String name) { super(model, name); - this.addressBits = addressBits; - this.wordWidth = wordWidth; - this.maximalAddress = maximalAddress; - this.minimalAddress = minimalAddress; + this.definition = definition; setSize(width, height); - addPin(addrPin = new Pin(this, "A", addressBits, 0, 10)); - addPin(dataPin = new Pin(this, "D", wordWidth, 0, 30)); + addPin(addrPin = new Pin(this, "A", definition.getMemoryAddressBits(), 0, 10)); + addPin(dataPin = new Pin(this, "D", definition.getCellWidth(), 0, 30)); addPin(rWPin = new Pin(this, "RW", 1, 0, 50)); } @@ -53,6 +52,21 @@ public class GUIMemoryWA extends GUIComponent { return rWPin; } + + public void setLogicModelBinding(WordAddressableMemoryComponent memory) + { + this.memory = memory; + } + + public MainMemoryDefinition getDefinition() + { + return definition; + } + + public WordAddressableMemoryComponent getMemory() + { + return memory; + } @Override public void render(GeneralGC gc, Rectangle visibleRegion) @@ -77,12 +91,7 @@ public class GUIMemoryWA extends GUIComponent @Override public JsonElement getParamsForSerializing(IdentifierGetter idGetter) { - JsonObject obj = new JsonObject(); - obj.addProperty(paramAddr, addressBits); - obj.addProperty(paramWordWidth, wordWidth); - obj.addProperty(paramMaxAddr, maximalAddress); - obj.addProperty(paramMinAddr, minimalAddress); - return obj; + return new Gson().toJsonTree(new DefaultMainMemoryDefinition(definition)); } static @@ -90,9 +99,7 @@ public class GUIMemoryWA extends GUIComponent ViewLogicModelAdapter.addComponentAdapter(new WordAddressableMemoryAdapter()); IndirectGUIComponentCreator.setComponentSupplier(GUIAndGate.class.getCanonicalName(), (m, p, n) -> { - JsonObject obj = p.getAsJsonObject(); - return new GUIMemoryWA(m, obj.get(paramAddr).getAsInt(), obj.get(paramWordWidth).getAsInt(), obj.get(paramMaxAddr).getAsLong(), - obj.get(paramMinAddr).getAsLong(), n); + return new GUIMemoryWA(m, new Gson().fromJson(p, DefaultMainMemoryDefinition.class), n); }); } } diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java index 719c993e..037b17a9 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java @@ -5,24 +5,29 @@ import java.util.HashMap; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; +import net.mograsim.machine.MainMemory; +import net.mograsim.machine.MainMemoryDefinition; -public class WordAddressableMemory +public class WordAddressableMemory implements MainMemory { private final int cellWidth; private final long minimalAddress, maximalAddress; + private final MainMemoryDefinition definition; private final int pageSize = 64; private HashMap pages; - public WordAddressableMemory(int cellWidth, long minimalAddress, long maximalAddress) + public WordAddressableMemory(MainMemoryDefinition definition) { super(); - this.cellWidth = cellWidth; - this.minimalAddress = minimalAddress; - this.maximalAddress = maximalAddress; + this.cellWidth = definition.getCellWidth(); + this.minimalAddress = definition.getMinimalAddress(); + this.maximalAddress = definition.getMaximalAddress(); + this.definition = definition; this.pages = new HashMap<>(); } + @Override public void setCell(long address, BitVector b) { if (address < minimalAddress || address > maximalAddress) @@ -36,6 +41,7 @@ public class WordAddressableMemory p.setCell(offset, b); } + @Override public BitVector getCell(long address) { long page = address / pageSize; @@ -77,4 +83,10 @@ public class WordAddressableMemory return Arrays.deepToString(memory); } } + + @Override + public MainMemoryDefinition getDefinition() + { + return definition; + } } diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java index bc979dc7..ffacb74e 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java @@ -27,7 +27,7 @@ public class WordAddressableMemoryAdapter implements ComponentAdapter