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;
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)
{
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>
{
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);
}
}
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;
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)
{
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>
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);
}
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;
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);
}
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)
{
symbolRenderer.render(gc, visibleRegion);
outlineRenderer.render(gc, visibleRegion);
}
+
+ public void setMachine(M machine)
+ {
+ this.machine = machine;
+ }
+
+ public M getMachine()
+ {
+ return machine;
+ }
}
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;
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;