Rough machine extension point implementation
authorChristian Femers <femers@in.tum.de>
Tue, 3 Sep 2019 05:08:49 +0000 (07:08 +0200)
committerChristian Femers <femers@in.tum.de>
Tue, 3 Sep 2019 05:08:49 +0000 (07:08 +0200)
Attention: some parts are only experimental

net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF
net.mograsim.logic.model.am2900/build.properties
net.mograsim.logic.model.am2900/plugin.xml [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MainMemoryDefinition.java [new file with mode: 0644]
net.mograsim.machine/build.properties
net.mograsim.machine/plugin.xml
net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd [new file with mode: 0644]
net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd [deleted file]
net.mograsim.machine/src/net/mograsim/machine/Machine.java

index fb03a1f..cd8ecd1 100644 (file)
@@ -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
index d6642e6..ba7fb99 100644 (file)
@@ -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 (file)
index 0000000..7cfe4a7
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         id="net.mograsim.machine.machinedefinition.am2900"
+         name="Am2900 Machine"
+         point="net.mograsim.machine.machinedefinition">
+      <MachineDefinitionImplementation
+            class="net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition"
+            name="net.mograsim.logic.model.am2900.machine.am2900machinedefinition">
+      </MachineDefinitionImplementation>
+   </extension>
+
+</plugin>
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 (file)
index 0000000..df3b726
--- /dev/null
@@ -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 (file)
index 0000000..6f9b6d8
--- /dev/null
@@ -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<Register> 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 (file)
index 0000000..478ec24
--- /dev/null
@@ -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;
+       }
+
+}
index e9863e2..3090e4c 100644 (file)
@@ -1,5 +1,5 @@
 source.. = src/
-output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               plugin.xml
+               plugin.xml,\
+               schema/
index 4171a8d..8f73714 100644 (file)
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.4"?>
 <plugin>
-   <extension-point id="net.mograsim.machinedefinition" name="Mograsim Machine Definition" schema="schema/net.mograsim.machinedefinition.exsd"/>
-
+   <extension-point id="net.mograsim.machine.machinedefinition" name="Mograsim Machine Definition" schema="schema/net.mograsim.machine.machinedefinition.exsd"/>
 </plugin>
diff --git a/net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd b/net.mograsim.machine/schema/net.mograsim.machine.machinedefinition.exsd
new file mode 100644 (file)
index 0000000..43763a6
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="net.mograsim.machine" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="net.mograsim.machine" id="net.mograsim.machine.machinedefinition" name="Mograsim Machine Definition"/>
+      </appinfo>
+      <documentation>
+         Mograsim extension for defining a machine
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="MachineDefinitionImplementation"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="MachineDefinitionImplementation">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The machines name
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A Class that implements the Mograsim Machine Definition
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":net.mograsim.machine.MachineDefinition"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.1.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd b/net.mograsim.machine/schema/net.mograsim.machinedefinition.exsd
deleted file mode 100644 (file)
index ea6d258..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="net.mograsim.machine" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="net.mograsim.machine" id="net.mograsim.machinedefinition" name="Mograsim Machine Definition"/>
-      </appinfo>
-      <documentation>
-         Mograsim extension for defining a machine
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice minOccurs="1" maxOccurs="unbounded">
-            <element ref="MachineDefinitionImplementation"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute translatable="true"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="MachineDefinitionImplementation">
-      <complexType>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The machines name
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  A Class that implements the Mograsim Machine Definition
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":net.mograsim.machine.MachineDefinition"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         0.1.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="examples"/>
-      </appinfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="apiinfo"/>
-      </appinfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="implementation"/>
-      </appinfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-
-</schema>
index 00a1e34..dc544da 100644 (file)
@@ -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();
 }