Fixed a bug causing CoreMemories using their own memories
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Sun, 15 Sep 2019 13:46:03 +0000 (15:46 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Sun, 15 Sep 2019 13:46:03 +0000 (15:46 +0200)
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemory.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemoryAdapter.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemory.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemoryAdapter.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java
net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java
net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMicroInstructionMemory.java
net.mograsim.machine/src/net/mograsim/machine/standard/memory/ModelWordAddressableMemory.java

index 33ccbbe..4450e07 100644 (file)
@@ -1,5 +1,6 @@
 package net.mograsim.logic.model.am2900.components;
 
+import net.mograsim.logic.model.am2900.machine.Am2900Machine;
 import net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
@@ -7,7 +8,7 @@ import net.mograsim.logic.model.serializing.IdentifyParams;
 import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
 import net.mograsim.machine.standard.memory.ModelWordAddressableMemory;
 
-public class ModelAm2900MainMemory extends ModelWordAddressableMemory
+public class ModelAm2900MainMemory extends ModelWordAddressableMemory<Am2900Machine>
 {
        public ModelAm2900MainMemory(LogicModelModifiable model, String name)
        {
index ef1e58c..e5e34eb 100644 (file)
@@ -10,7 +10,6 @@ import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.modeladapter.CoreModelParameters;
 import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
 import net.mograsim.machine.standard.memory.CoreWordAddressableMemory;
-import net.mograsim.machine.standard.memory.WordAddressableMemory;
 
 public class ModelAm2900MainMemoryAdapter implements ComponentAdapter<ModelAm2900MainMemory>
 {
@@ -28,8 +27,8 @@ public class ModelAm2900MainMemoryAdapter implements ComponentAdapter<ModelAm290
                ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd();
                ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd();
                ReadEnd mode = logicWiresPerPin.get(modelComponent.getReadWritePin()).createReadOnlyEnd();
-               CoreWordAddressableMemory mem = new CoreWordAddressableMemory(timeline, 2,
-                               new WordAddressableMemory(modelComponent.getDefinition()), data, mode, address);
+               CoreWordAddressableMemory mem = new CoreWordAddressableMemory(timeline, 2, modelComponent.getMachine().getMainMemory(), data, mode,
+                               address);
                modelComponent.setCoreModelBinding(mem);
        }
 }
index ffaaf51..cfd54c5 100644 (file)
@@ -1,5 +1,6 @@
 package net.mograsim.logic.model.am2900.components;
 
+import net.mograsim.logic.model.am2900.machine.Am2900Machine;
 import net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
@@ -7,7 +8,7 @@ import net.mograsim.logic.model.serializing.IdentifyParams;
 import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
 import net.mograsim.machine.mi.components.ModelMicroInstructionMemory;
 
-public class ModelAm2900MicroInstructionMemory extends ModelMicroInstructionMemory
+public class ModelAm2900MicroInstructionMemory extends ModelMicroInstructionMemory<Am2900Machine>
 {
        public ModelAm2900MicroInstructionMemory(LogicModelModifiable model, String name)
        {
index b390ab5..895c58a 100644 (file)
@@ -9,7 +9,6 @@ import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
 import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.modeladapter.CoreModelParameters;
 import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
-import net.mograsim.machine.mi.StandardMicroInstructionMemory;
 import net.mograsim.machine.mi.components.CoreMicroInstructionMemory;
 
 public class ModelAm2900MicroInstructionMemoryAdapter implements ComponentAdapter<ModelAm2900MicroInstructionMemory>
@@ -28,7 +27,7 @@ public class ModelAm2900MicroInstructionMemoryAdapter implements ComponentAdapte
                ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd();
                ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd();
                CoreMicroInstructionMemory mem = new CoreMicroInstructionMemory(timeline, 2,
-                               new StandardMicroInstructionMemory(modelComponent.getDefinition()), data, address);
+                               modelComponent.getMachine().getMicroInstructionMemory(), data, address);
                modelComponent.setCoreModelBinding(mem);
        }
 
index 2d6c70b..0a0787c 100644 (file)
@@ -3,6 +3,8 @@ package net.mograsim.logic.model.am2900.machine;
 import net.mograsim.logic.core.components.CoreClock;
 import net.mograsim.logic.core.timeline.Timeline;
 import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.am2900.components.ModelAm2900MainMemory;
+import net.mograsim.logic.model.am2900.components.ModelAm2900MicroInstructionMemory;
 import net.mograsim.logic.model.model.LogicModel;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.modeladapter.CoreModelParameters;
@@ -36,6 +38,9 @@ public class Am2900Machine implements Machine
                params.wireTravelTime = 10;
                mainMemory = new WordAddressableMemory(am2900MachineDefinition.getMainMemoryDefinition());
                instMemory = new StandardMicroInstructionMemory(am2900MachineDefinition.getMicroInstructionMemoryDefinition());
+               logicModel.getComponentBySubmodelPath("Am2900.Am2900MainMemory#0", ModelAm2900MainMemory.class).setMachine(this);
+               logicModel.getComponentBySubmodelPath("Am2900.Am2900MicroInstructionMemory#0", ModelAm2900MicroInstructionMemory.class)
+                               .setMachine(this);
                timeline = LogicCoreAdapter.convert(logicModel, params);
        }
 
index 04a4f55..d0459dc 100644 (file)
@@ -9,10 +9,11 @@ import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer
 import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
 import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
 
-public abstract class ModelMemory extends ModelComponent
+public abstract class ModelMemory<M extends Machine> extends ModelComponent
 {
        private Renderer symbolRenderer;
        private Renderer outlineRenderer;
+       private M machine;
 
        protected ModelMemory(LogicModelModifiable model, int width, int height, String name, String centerText, boolean callInit)
        {
@@ -39,4 +40,14 @@ public abstract class ModelMemory extends ModelComponent
                symbolRenderer.render(gc, visibleRegion);
                outlineRenderer.render(gc, visibleRegion);
        }
+
+       public void setMachine(M machine)
+       {
+               this.machine = machine;
+       }
+
+       public M getMachine()
+       {
+               return machine;
+       }
 }
index 94a4d0e..b3c4174 100644 (file)
@@ -3,10 +3,11 @@ package net.mograsim.machine.mi.components;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.model.wires.PinUsage;
+import net.mograsim.machine.Machine;
 import net.mograsim.machine.ModelMemory;
 import net.mograsim.machine.mi.MicroInstructionMemoryDefinition;
 
-public abstract class ModelMicroInstructionMemory extends ModelMemory
+public abstract class ModelMicroInstructionMemory<M extends Machine> extends ModelMemory<M>
 {
        private final Pin addrPin, dataPin;
        private CoreMicroInstructionMemory memory;
index 807c128..986dbe5 100644 (file)
@@ -3,10 +3,11 @@ package net.mograsim.machine.standard.memory;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.model.wires.PinUsage;
+import net.mograsim.machine.Machine;
 import net.mograsim.machine.MainMemoryDefinition;
 import net.mograsim.machine.ModelMemory;
 
-public abstract class ModelWordAddressableMemory extends ModelMemory
+public abstract class ModelWordAddressableMemory<M extends Machine> extends ModelMemory<M>
 {
        private final Pin addrPin, dataPin, rWPin;
        private CoreWordAddressableMemory memory;