From 3813eb83f6c17041dcb67d7d2744c66a8bfdb18d Mon Sep 17 00:00:00 2001 From: Christian Femers Date: Tue, 3 Sep 2019 07:08:49 +0200 Subject: [PATCH] Rough machine extension point implementation Attention: some parts are only experimental --- .../META-INF/MANIFEST.MF | 2 +- .../build.properties | 3 +- net.mograsim.logic.model.am2900/plugin.xml | 14 ++++ .../model/am2900/machine/Am2900Machine.java | 80 +++++++++++++++++++ .../machine/Am2900MachineDefinition.java | 47 +++++++++++ .../machine/Am2900MainMemoryDefinition.java | 32 ++++++++ net.mograsim.machine/build.properties | 4 +- net.mograsim.machine/plugin.xml | 3 +- ...t.mograsim.machine.machinedefinition.exsd} | 2 +- .../src/net/mograsim/machine/Machine.java | 3 + 10 files changed, 183 insertions(+), 7 deletions(-) create mode 100644 net.mograsim.logic.model.am2900/plugin.xml create mode 100644 net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java create mode 100644 net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java create mode 100644 net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MainMemoryDefinition.java rename net.mograsim.machine/schema/{net.mograsim.machinedefinition.exsd => net.mograsim.machine.machinedefinition.exsd} (97%) diff --git a/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF b/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF index fb03a1f6..cd8ecd1e 100644 --- a/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF +++ b/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF @@ -8,6 +8,6 @@ Export-Package: net.mograsim.logic.model.am2900.components, net.mograsim.logic.model.am2900.components.am2910, net.mograsim.logic.model.examples Bundle-RequiredExecutionEnvironment: JavaSE-11 -Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0";visibility:=reexport +Require-Bundle: net.mograsim.machine;bundle-version="0.1.0";visibility:=reexport Automatic-Module-Name: net.mograsim.logic.model.am2900 Bundle-Vendor: Mograsim Team diff --git a/net.mograsim.logic.model.am2900/build.properties b/net.mograsim.logic.model.am2900/build.properties index d6642e65..ba7fb993 100644 --- a/net.mograsim.logic.model.am2900/build.properties +++ b/net.mograsim.logic.model.am2900/build.properties @@ -1,4 +1,5 @@ source.. = src/ bin.includes = META-INF/,\ .,\ - OSGI-INF/ + OSGI-INF/,\ + plugin.xml diff --git a/net.mograsim.logic.model.am2900/plugin.xml b/net.mograsim.logic.model.am2900/plugin.xml new file mode 100644 index 00000000..7cfe4a72 --- /dev/null +++ b/net.mograsim.logic.model.am2900/plugin.xml @@ -0,0 +1,14 @@ + + + + + + + + + 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 new file mode 100644 index 00000000..df3b726f --- /dev/null +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java @@ -0,0 +1,80 @@ +package net.mograsim.logic.model.am2900.machine; + +import net.mograsim.logic.core.components.Clock; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.model.model.ViewModel; +import net.mograsim.logic.model.model.ViewModelModifiable; +import net.mograsim.logic.model.model.components.atomic.GUIClock; +import net.mograsim.logic.model.modeladapter.LogicModelParameters; +import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; +import net.mograsim.machine.Machine; +import net.mograsim.machine.MachineDefinition; +import net.mograsim.machine.Register; + +public class Am2900Machine implements Machine +{ + private Am2900MachineDefinition machineDefinition; + private ViewModel viewModel; + private Timeline timeline; + private Clock clock; + + public Am2900Machine(Am2900MachineDefinition am2900MachineDefinition) + { + this.machineDefinition = am2900MachineDefinition; + ViewModelModifiable viewModelModifiable = new ViewModelModifiable(); + IndirectGUIComponentCreator.createComponent(viewModelModifiable, "resource:Am2900Loader:/components/GUIAm2900.json"); + LogicModelParameters params = new LogicModelParameters(); + params.gateProcessTime = 50; + params.wireTravelTime = 10; + timeline = ViewLogicModelAdapter.convert(viewModelModifiable, params); + clock = ((GUIClock) viewModelModifiable.getComponentsByName().get("GUIClock#0")).getClock(); + } + + @Override + public MachineDefinition getDefinition() + { + return machineDefinition; + } + + @Override + public void reset() + { + // TODO Auto-generated method stub + + } + + @Override + public ViewModel getModel() + { + return viewModel; + } + + @Override + public Timeline getTimeline() + { + return timeline; + } + + @Override + public Clock getClock() + { + return clock; + } + + @Override + public BitVector getRegister(Register r) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setRegister(Register r, BitVector value) + { + // TODO Auto-generated method stub + + } + +} diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java new file mode 100644 index 00000000..6f9b6d8c --- /dev/null +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java @@ -0,0 +1,47 @@ +package net.mograsim.logic.model.am2900.machine; + +import java.util.Set; + +import net.mograsim.machine.ISASchema; +import net.mograsim.machine.Machine; +import net.mograsim.machine.MachineDefinition; +import net.mograsim.machine.MainMemoryDefinition; +import net.mograsim.machine.Register; + +public class Am2900MachineDefinition implements MachineDefinition +{ + private MainMemoryDefinition memoryDefinition = new Am2900MainMemoryDefinition(); + + @Override + public Machine createNew() + { + return new Am2900Machine(this); + } + + @Override + public ISASchema getISASchema() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set getRegisters() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getAddressBits() + { + return 16; + } + + @Override + public MainMemoryDefinition getMainMemoryDefinition() + { + return memoryDefinition; + } + +} diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MainMemoryDefinition.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MainMemoryDefinition.java new file mode 100644 index 00000000..478ec242 --- /dev/null +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MainMemoryDefinition.java @@ -0,0 +1,32 @@ +package net.mograsim.logic.model.am2900.machine; + +import net.mograsim.machine.MainMemoryDefinition; + +public class Am2900MainMemoryDefinition implements MainMemoryDefinition +{ + + @Override + public int getMemoryAddressBits() + { + return 16; + } + + @Override + public long getMinimalAddress() + { + return 0; + } + + @Override + public long getMaximalAddress() + { + return 0xFFFF; + } + + @Override + public int getCellWidth() + { + return 16; + } + +} diff --git a/net.mograsim.machine/build.properties b/net.mograsim.machine/build.properties index e9863e28..3090e4c0 100644 --- a/net.mograsim.machine/build.properties +++ b/net.mograsim.machine/build.properties @@ -1,5 +1,5 @@ source.. = src/ -output.. = bin/ bin.includes = META-INF/,\ .,\ - plugin.xml + plugin.xml,\ + schema/ diff --git a/net.mograsim.machine/plugin.xml b/net.mograsim.machine/plugin.xml index 4171a8db..8f737144 100644 --- a/net.mograsim.machine/plugin.xml +++ b/net.mograsim.machine/plugin.xml @@ -1,6 +1,5 @@ - - + diff --git a/net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd b/net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd similarity index 97% rename from net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd rename to net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd index ea6d2580..43763a6e 100644 --- a/net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd +++ b/net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd @@ -3,7 +3,7 @@ - + Mograsim extension for defining a machine diff --git a/net.mograsim.machine/src/net/mograsim/machine/Machine.java b/net.mograsim.machine/src/net/mograsim/machine/Machine.java index 00a1e34c..dc544da6 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/Machine.java +++ b/net.mograsim.machine/src/net/mograsim/machine/Machine.java @@ -1,6 +1,7 @@ package net.mograsim.machine; import net.mograsim.logic.core.components.Clock; +import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.model.model.ViewModel; @@ -16,4 +17,6 @@ public interface Machine { BitVector getRegister(Register r); void setRegister(Register r, BitVector value); + + Timeline getTimeline(); } -- 2.17.1