From 93f106a691015a63a6c5af27406b94303385698a Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Sun, 15 Sep 2019 15:46:03 +0200 Subject: [PATCH] Fixed a bug causing CoreMemories using their own memories --- .../am2900/components/ModelAm2900MainMemory.java | 3 ++- .../components/ModelAm2900MainMemoryAdapter.java | 5 ++--- .../ModelAm2900MicroInstructionMemory.java | 3 ++- .../ModelAm2900MicroInstructionMemoryAdapter.java | 3 +-- .../logic/model/am2900/machine/Am2900Machine.java | 5 +++++ .../src/net/mograsim/machine/ModelMemory.java | 13 ++++++++++++- .../mi/components/ModelMicroInstructionMemory.java | 3 ++- .../standard/memory/ModelWordAddressableMemory.java | 3 ++- 8 files changed, 28 insertions(+), 10 deletions(-) diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemory.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemory.java index 33ccbbe4..4450e07b 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemory.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemory.java @@ -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 { public ModelAm2900MainMemory(LogicModelModifiable model, String name) { diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemoryAdapter.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemoryAdapter.java index ef1e58c1..e5e34ebb 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemoryAdapter.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MainMemoryAdapter.java @@ -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 { @@ -28,8 +27,8 @@ public class ModelAm2900MainMemoryAdapter implements ComponentAdapter { public ModelAm2900MicroInstructionMemory(LogicModelModifiable model, String name) { diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemoryAdapter.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemoryAdapter.java index b390ab5c..895c58a5 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemoryAdapter.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MicroInstructionMemoryAdapter.java @@ -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 @@ -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); } diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java index 2d6c70bd..0a0787cc 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java @@ -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); } diff --git a/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java b/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java index 04a4f551..d0459dc1 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java @@ -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 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; + } } diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMicroInstructionMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMicroInstructionMemory.java index 94a4d0e0..b3c41749 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMicroInstructionMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMicroInstructionMemory.java @@ -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 extends ModelMemory { private final Pin addrPin, dataPin; private CoreMicroInstructionMemory memory; diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/ModelWordAddressableMemory.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/ModelWordAddressableMemory.java index 807c1281..986dbe50 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/ModelWordAddressableMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/ModelWordAddressableMemory.java @@ -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 extends ModelMemory { private final Pin addrPin, dataPin, rWPin; private CoreWordAddressableMemory memory; -- 2.17.1