Added Am2910 registers
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 7 Oct 2019 00:06:27 +0000 (02:06 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 7 Oct 2019 00:06:27 +0000 (02:06 +0200)
plugins/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/Am2910RegisterGroup.java [new file with mode: 0644]
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/RegCntrRegister.java [new file with mode: 0644]
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/SPRegister.java [new file with mode: 0644]
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/muPCRegister.java [new file with mode: 0644]
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/Am2910StackRegisterGroup.java [new file with mode: 0644]
plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/StackCellRegister.java [new file with mode: 0644]

index bf9b692..97d8cd0 100644 (file)
@@ -14,6 +14,8 @@ Export-Package: net.mograsim.logic.model.am2900,
  net.mograsim.logic.model.am2900.machine.registers.am2904,
  net.mograsim.logic.model.am2900.machine.registers.am2904.msr,
  net.mograsim.logic.model.am2900.machine.registers.am2904.musr,
+ net.mograsim.logic.model.am2900.machine.registers.am2910,
+ net.mograsim.logic.model.am2900.machine.registers.am2910.stack,
  net.mograsim.logic.model.examples
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.osgi,
index 7ad92b4..d9431da 100644 (file)
@@ -6,6 +6,7 @@ import java.util.List;
 
 import net.mograsim.logic.model.am2900.machine.registers.am2901.Am2901RegisterGroup;
 import net.mograsim.logic.model.am2900.machine.registers.am2904.Am2904RegisterGroup;
+import net.mograsim.logic.model.am2900.machine.registers.am2910.Am2910RegisterGroup;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.machine.ISASchema;
 import net.mograsim.machine.MachineDefinition;
@@ -30,7 +31,7 @@ public class AbstractAm2900MachineDefinition implements MachineDefinition
                List<RegisterGroup> registerGroupsModifiable = new ArrayList<>();
                registerGroupsModifiable.add(Am2901RegisterGroup.instance);
                registerGroupsModifiable.add(Am2904RegisterGroup.instance);
-               // TODO Am2910
+               registerGroupsModifiable.add(Am2910RegisterGroup.instance);
                registerGroups = Collections.unmodifiableList(registerGroupsModifiable);
        }
 
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/Am2910RegisterGroup.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/Am2910RegisterGroup.java
new file mode 100644 (file)
index 0000000..5b7a5df
--- /dev/null
@@ -0,0 +1,16 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910;
+
+import net.mograsim.logic.model.am2900.machine.registers.am2910.stack.Am2910StackRegisterGroup;
+import net.mograsim.machine.registers.RegisterGroup;
+import net.mograsim.machine.registers.SimpleRegisterGroup;
+
+public class Am2910RegisterGroup extends SimpleRegisterGroup
+{
+       public static final Am2910RegisterGroup instance = new Am2910RegisterGroup();
+
+       private Am2910RegisterGroup()
+       {
+               super("Am2910", new RegisterGroup[] { Am2910StackRegisterGroup.instance }, muPCRegister.instance, RegCntrRegister.instance,
+                               SPRegister.instance);
+       }
+}
\ No newline at end of file
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/RegCntrRegister.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/RegCntrRegister.java
new file mode 100644 (file)
index 0000000..ae28766
--- /dev/null
@@ -0,0 +1,14 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910;
+
+import net.mograsim.logic.model.am2900.machine.registers.Am2900Register;
+import net.mograsim.machine.registers.HighLevelStateBasedRegister;
+
+public class RegCntrRegister extends HighLevelStateBasedRegister implements Am2900Register
+{
+       public static final RegCntrRegister instance = new RegCntrRegister();
+
+       private RegCntrRegister()
+       {
+               super("Register / Counter", "am2910.r.q", 12);
+       }
+}
\ No newline at end of file
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/SPRegister.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/SPRegister.java
new file mode 100644 (file)
index 0000000..48f6ce1
--- /dev/null
@@ -0,0 +1,14 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910;
+
+import net.mograsim.logic.model.am2900.machine.registers.Am2900Register;
+import net.mograsim.machine.registers.HighLevelStateBasedRegister;
+
+public class SPRegister extends HighLevelStateBasedRegister implements Am2900Register
+{
+       public static final SPRegister instance = new SPRegister();
+
+       private SPRegister()
+       {
+               super("Stack pointer", "am2910.sp.q", 3);
+       }
+}
\ No newline at end of file
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/muPCRegister.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/muPCRegister.java
new file mode 100644 (file)
index 0000000..ed9d36b
--- /dev/null
@@ -0,0 +1,14 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910;
+
+import net.mograsim.logic.model.am2900.machine.registers.Am2900Register;
+import net.mograsim.machine.registers.HighLevelStateBasedRegister;
+
+public class muPCRegister extends HighLevelStateBasedRegister implements Am2900Register
+{
+       public static final muPCRegister instance = new muPCRegister();
+
+       private muPCRegister()
+       {
+               super("\u00b5PC", "am2910.mupc.q", 12);// 00b5 = micro symbol
+       }
+}
\ No newline at end of file
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/Am2910StackRegisterGroup.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/Am2910StackRegisterGroup.java
new file mode 100644 (file)
index 0000000..e437586
--- /dev/null
@@ -0,0 +1,14 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910.stack;
+
+import net.mograsim.machine.registers.Register;
+import net.mograsim.machine.registers.SimpleRegisterGroup;
+
+public class Am2910StackRegisterGroup extends SimpleRegisterGroup
+{
+       public static final Am2910StackRegisterGroup instance = new Am2910StackRegisterGroup();
+
+       private Am2910StackRegisterGroup()
+       {
+               super("Stack", StackCellRegister.instancesCorrectOrder.toArray(Register[]::new));
+       }
+}
\ No newline at end of file
diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/StackCellRegister.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/registers/am2910/stack/StackCellRegister.java
new file mode 100644 (file)
index 0000000..2ec544a
--- /dev/null
@@ -0,0 +1,36 @@
+package net.mograsim.logic.model.am2900.machine.registers.am2910.stack;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import net.mograsim.logic.model.am2900.machine.registers.Am2900Register;
+import net.mograsim.machine.registers.HighLevelStateBasedRegister;
+
+public class StackCellRegister extends HighLevelStateBasedRegister implements Am2900Register
+{
+       public static final List<StackCellRegister> instancesCorrectOrder;
+
+       static
+       {
+               List<StackCellRegister> instancesCorrectOrderModifiable = new ArrayList<>();
+               for (int i = 0; i < 5; i++)
+                       instancesCorrectOrderModifiable.add(new StackCellRegister(i));
+               instancesCorrectOrder = Collections.unmodifiableList(instancesCorrectOrderModifiable);
+       }
+
+       private StackCellRegister(int index)
+       {
+               super("cell #" + index, "am2910.stack.c" + getIndexAsBitstring(index) + ".q", 12);
+
+       }
+
+       private static String getIndexAsBitstring(int index)
+       {
+               StringBuilder sb = new StringBuilder();
+               sb.append((index & 0b100) != 0 ? '1' : '0');
+               sb.append((index & 0b010) != 0 ? '1' : '0');
+               sb.append((index & 0b001) != 0 ? '1' : '0');
+               return sb.toString();
+       }
+}
\ No newline at end of file