Implemented some infrastructure for MPROMs
[Mograsim.git] / plugins / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / am2900 / machine / AbstractAm2900MachineDefinition.java
index aed5356..0fcaed5 100644 (file)
@@ -4,9 +4,16 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import net.mograsim.logic.model.am2900.machine.registers.InstrRegister;
+import net.mograsim.logic.model.am2900.machine.registers.PCRegister;
+import net.mograsim.logic.model.am2900.machine.registers.muInstrRegister;
+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;
+import net.mograsim.machine.mi.MPROMDefinition;
 import net.mograsim.machine.registers.Register;
 import net.mograsim.machine.registers.RegisterGroup;
 
@@ -14,8 +21,11 @@ import net.mograsim.machine.registers.RegisterGroup;
 //(used for detecting installed machines in plugin.core)
 public class AbstractAm2900MachineDefinition implements MachineDefinition
 {
-       public static final String SIMPLE_AM2900_MACHINE_ID = "Am2900Simple";
-       public static final String STRICT_AM2900_MACHINE_ID = "Am2900Strict";
+       public static final String AM2900_TEACHING_MACHINE_ID = "Am2900Teaching";
+       public static final String AM2900_EXPERT_MACHINE_ID = "Am2900Expert";
+       public static final String AM2900_TEACHING_DESCRIPTION = "Am2900 for teaching purposes.\nAll registers are reset to 0 when starting.";
+       public static final String AM2900_EXPERT_DESCRIPTION = "Am2900 \"for experts\".\nOnly the \u00b5PC will be reset to 0 when starting."
+                       + "The microprogram will have to reset the other registers manually, including the PC.";
 
        public static final List<Register> unsortedRegisters;
        public static final List<RegisterGroup> registerGroups;
@@ -23,24 +33,34 @@ public class AbstractAm2900MachineDefinition implements MachineDefinition
        static
        {
                List<Register> unsortedRegistersModifiable = new ArrayList<>();
-               // TODO MIR, IR, PC/BZ...
+               unsortedRegistersModifiable.add(muInstrRegister.instance);
+               unsortedRegistersModifiable.add(InstrRegister.instance);
+               unsortedRegistersModifiable.add(PCRegister.instance);
                unsortedRegisters = Collections.unmodifiableList(unsortedRegistersModifiable);
                List<RegisterGroup> registerGroupsModifiable = new ArrayList<>();
-               // TODO Am2901, Am2904, Am2910
+               registerGroupsModifiable.add(Am2901RegisterGroup.instance);
+               registerGroupsModifiable.add(Am2904RegisterGroup.instance);
+               registerGroupsModifiable.add(Am2910RegisterGroup.instance);
                registerGroups = Collections.unmodifiableList(registerGroupsModifiable);
        }
 
-       public final boolean strict;
+       public final boolean expert;
 
-       protected AbstractAm2900MachineDefinition(boolean strict)
+       protected AbstractAm2900MachineDefinition(boolean expert)
        {
-               this.strict = strict;
+               this.expert = expert;
        }
 
        @Override
        public String getId()
        {
-               return strict ? STRICT_AM2900_MACHINE_ID : SIMPLE_AM2900_MACHINE_ID;
+               return expert ? AM2900_EXPERT_MACHINE_ID : AM2900_TEACHING_MACHINE_ID;
+       }
+
+       @Override
+       public String getDescription()
+       {
+               return expert ? AM2900_EXPERT_DESCRIPTION : AM2900_TEACHING_DESCRIPTION;
        }
 
        @Override
@@ -88,14 +108,14 @@ public class AbstractAm2900MachineDefinition implements MachineDefinition
        @Override
        public int hashCode()
        {
-               return strict ? 12345 : 54321;
+               return expert ? 12345 : 54321;
        }
 
        @Override
        public boolean equals(Object obj)
        {
                return obj != null && obj instanceof AbstractAm2900MachineDefinition
-                               && ((AbstractAm2900MachineDefinition) obj).strict == this.strict;
+                               && ((AbstractAm2900MachineDefinition) obj).expert == this.expert;
        }
 
        @Override
@@ -104,4 +124,9 @@ public class AbstractAm2900MachineDefinition implements MachineDefinition
                return Am2900MicroInstructionMemoryDefinition.instance;
        }
 
+       @Override
+       public MPROMDefinition getMPROMDefinition()
+       {
+               return Am2900MPROMDefinition.instance;
+       }
 }