Added Am2904 registers
[Mograsim.git] / plugins / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / am2900 / machine / Am2900MicroInstructionDefinition.java
index b67e93d..2f53e66 100644 (file)
@@ -1,5 +1,6 @@
 package net.mograsim.logic.model.am2900.machine;
 
 package net.mograsim.logic.model.am2900.machine;
 
+import java.util.Arrays;
 import java.util.Optional;
 
 import net.mograsim.machine.mi.MicroInstructionDefinition;
 import java.util.Optional;
 
 import net.mograsim.machine.mi.MicroInstructionDefinition;
@@ -21,8 +22,8 @@ public class Am2900MicroInstructionDefinition implements MicroInstructionDefinit
                        .add("AQ", "AB", "ZQ", "ZB", "ZA", "DA", "DQ", "DZ").build();
        private static final MnemonicFamily am2901FuncInstructions = new MnemonicFamilyBuilder(3).addX().setXDefault()
                        .add("ADD", "SUBR", "SUBS", "OR", "AND", "NOTRS", "EXOR", "EXNOR").build();
                        .add("AQ", "AB", "ZQ", "ZB", "ZA", "DA", "DQ", "DZ").build();
        private static final MnemonicFamily am2901FuncInstructions = new MnemonicFamilyBuilder(3).addX().setXDefault()
                        .add("ADD", "SUBR", "SUBS", "OR", "AND", "NOTRS", "EXOR", "EXNOR").build();
-       private static final MnemonicFamily am2901DestInstructions = new MnemonicFamilyBuilder(3).addX().setXDefault()
-                       .add("QREG", "NOP", "RAMA", "RAMF", "RAMQD", "RAMD", "RAMQU", "RAMU").build();
+       private static final MnemonicFamily am2901DestInstructions = new MnemonicFamilyBuilder(3).addX()
+                       .add("QREG", "NOP", "RAMA", "RAMF", "RAMQD", "RAMD", "RAMQU", "RAMU").setDefault("NOP").build();
        private static final IntegerClassification register = new IntegerClassification(0, 4);
        private static final BooleanClassification registerSelect = new BooleanClassification("MR", "IR");
        private static final BooleanClassification abus = new BooleanClassification(true, "H", "AB");
        private static final IntegerClassification register = new IntegerClassification(0, 4);
        private static final BooleanClassification registerSelect = new BooleanClassification("MR", "IR");
        private static final BooleanClassification abus = new BooleanClassification(true, "H", "AB");
@@ -42,27 +43,27 @@ public class Am2900MicroInstructionDefinition implements MicroInstructionDefinit
 //                                     0b10_0101, 0b10_0100, 0b10_1101, 0b10_1100, 0b10_1110, 0b10_1111, 0b10_0010, 0b10_0011, 0b10_0000, 0b10_0001 },
 //                     6);
        // TODO: Maybe "X" and "notX" are swapped.
 //                                     0b10_0101, 0b10_0100, 0b10_1101, 0b10_1100, 0b10_1110, 0b10_1111, 0b10_0010, 0b10_0011, 0b10_0000, 0b10_0001 },
 //                     6);
        // TODO: Maybe "X" and "notX" are swapped.
-       private static final MnemonicFamily am2904StatusInstructions = new MnemonicFamilyBuilder(6).addX().setXDefault()
-                       .add("LoadM_LoadY_µ_NxorOVRorZ", "Set_Set_µ_NxnorOVRornotZ", "Swap_Swap_µ_NxorOVR", "Reset_Reset_µ_NxnorOVR",
-                                       "Load_LoadForShiftThroughOvr_µ_Z", "Load_Invert_µ_notZ", "LoadOvrRetain_Load_µ_OVR", "LoadOvrRetain_Load_µ_notOVR",
-                                       "ResetZ_LoadCarryInvert_µ_CorZ", "SetZ_LoadCarryInvert_µ_notCandnotZ", "ResetC_Load_µ_C", "SetC_Load_µ_notC",
-                                       "ResetN_Load_µ_notCorZ", "SetN_Load_µ_CandnotZ", "ResetOvr_Load_IM_NxorN", "SetOvr_Load_IM_NxnorN",
-                                       "Load_Load_µ_NxorOVRorZ", "Load_Load_µ_NxnorOVRornotZ", "Load_Load_µ_NxorOVR", "Load_Load_µ_NxnorOVR", "Load_Load_µ_Z",
-                                       "Load_Load_µ_notZ", "Load_Load_µ_OVR", "Load_Load_µ_notOVR", "LoadCarryInvert_LoadCarryInvert_µ_CorZ",
-                                       "LoadCarryInvert_LoadCarryInvert_µ_notCandnotZ", "Load_Load_µ_C", "Load_Load_µ_notC", "Load_Load_µ_notCorZ",
-                                       "Load_Load_µ_CandnotZ", "Load_Load_µ_N", "Load_Load_µ_notN", "Load_Load_M_NxorOVRorZ", "Load_Load_M_NxnorOVRornotZ",
-                                       "Load_Load_M_NxorOVR", "Load_Load_M_NxnorOVR", "Load_Load_M_Z", "Load_Load_M_notZ", "Load_Load_M_OVR",
-                                       "Load_Load_M_notOVR", "LoadCarryInvert_LoadCarryInvert_M_CorZ", "LoadCarryInvert_LoadCarryInvert_M_notCandnotZ",
-                                       "Load_Load_M_C", "Load_Load_M_notC", "Load_Load_M_notCorZ", "Load_Load_M_CandnotZ", "Load_Load_M_N", "Load_Load_M_notN",
-                                       "Load_Load_I_NxorOVRorZ", "Load_Load_I_NxnorOVRornotZ", "Load_Load_I_NxorOVR", "Load_Load_I_NxnorOVR", "Load_Load_I_Z",
-                                       "Load_Load_I_notZ", "Load_Load_I_OVR", "Load_Load_I_notOVR", "LoadCarryInvert_LoadCarryInvert_I_notCorZ",
-                                       "LoadCarryInvert_LoadCarryInvert_I_CandnotZ", "Load_Load_I_C", "Load_Load_I_notC", "Load_Load_I_notCorZ",
-                                       "Load_Load_I_CandnotZ", "Load_Load_I_N", "Load_Load_I_notN")
-                       .build();
+       private static final MnemonicFamily am2904StatusInstructions = new MnemonicFamilyBuilder(6).addX().setXDefault().add(
+                       "LoadM_LoadY_\u00b5_NxorOVRorZ", "Set_Set_\u00b5_NxnorOVRornotZ", "Swap_Swap_\u00b5_NxorOVR", "Reset_Reset_\u00b5_NxnorOVR",
+                       "Load_LoadForShiftThroughOvr_\u00b5_Z", "Load_Invert_\u00b5_notZ", "LoadOvrRetain_Load_\u00b5_OVR",
+                       "LoadOvrRetain_Load_\u00b5_notOVR", "ResetZ_LoadCarryInvert_\u00b5_CorZ", "SetZ_LoadCarryInvert_\u00b5_notCandnotZ",
+                       "ResetC_Load_\u00b5_C", "SetC_Load_\u00b5_notC", "ResetN_Load_\u00b5_notCorZ", "SetN_Load_\u00b5_CandnotZ",
+                       "ResetOvr_Load_IM_NxorN", "SetOvr_Load_IM_NxnorN", "Load_Load_\u00b5_NxorOVRorZ", "Load_Load_\u00b5_NxnorOVRornotZ",
+                       "Load_Load_\u00b5_NxorOVR", "Load_Load_\u00b5_NxnorOVR", "Load_Load_\u00b5_Z", "Load_Load_\u00b5_notZ", "Load_Load_\u00b5_OVR",
+                       "Load_Load_\u00b5_notOVR", "LoadCarryInvert_LoadCarryInvert_\u00b5_CorZ", "LoadCarryInvert_LoadCarryInvert_\u00b5_notCandnotZ",
+                       "Load_Load_\u00b5_C", "Load_Load_\u00b5_notC", "Load_Load_\u00b5_notCorZ", "Load_Load_\u00b5_CandnotZ", "Load_Load_\u00b5_N",
+                       "Load_Load_\u00b5_notN", "Load_Load_M_NxorOVRorZ", "Load_Load_M_NxnorOVRornotZ", "Load_Load_M_NxorOVR", "Load_Load_M_NxnorOVR",
+                       "Load_Load_M_Z", "Load_Load_M_notZ", "Load_Load_M_OVR", "Load_Load_M_notOVR", "LoadCarryInvert_LoadCarryInvert_M_CorZ",
+                       "LoadCarryInvert_LoadCarryInvert_M_notCandnotZ", "Load_Load_M_C", "Load_Load_M_notC", "Load_Load_M_notCorZ",
+                       "Load_Load_M_CandnotZ", "Load_Load_M_N", "Load_Load_M_notN", "Load_Load_I_NxorOVRorZ", "Load_Load_I_NxnorOVRornotZ",
+                       "Load_Load_I_NxorOVR", "Load_Load_I_NxnorOVR", "Load_Load_I_Z", "Load_Load_I_notZ", "Load_Load_I_OVR", "Load_Load_I_notOVR",
+                       "LoadCarryInvert_LoadCarryInvert_I_notCorZ", "LoadCarryInvert_LoadCarryInvert_I_CandnotZ", "Load_Load_I_C", "Load_Load_I_notC",
+                       "Load_Load_I_notCorZ", "Load_Load_I_CandnotZ", "Load_Load_I_N", "Load_Load_I_notN").build();
+       // 00b5 = micro symbol
        private static final BooleanClassification ccen = new BooleanClassification(true, "PS", "C");
        private static final BooleanClassification ccen = new BooleanClassification(true, "PS", "C");
-       private static final MnemonicFamily am2910Instructions = new MnemonicFamilyBuilder(4).addX().setXDefault()
+       private static final MnemonicFamily am2910Instructions = new MnemonicFamilyBuilder(4).addX()
                        .add("JZ", "CJS", "JMAP", "CJP", "PUSH", "JSRP", "CJV", "JRP", "RFCT", "RPCT", "CRTN", "CJPP", "LDCT", "LOOP", "CONT", "TWB")
                        .add("JZ", "CJS", "JMAP", "CJP", "PUSH", "JSRP", "CJV", "JRP", "RFCT", "RPCT", "CRTN", "CJPP", "LDCT", "LOOP", "CONT", "TWB")
-                       .build();
+                       .setDefault("CONT").build();
 
        private static final IntegerClassification constant_12bit = new IntegerClassification(0, 12);
        private static final IntegerClassification constant_16bit = new IntegerClassification(0, 16);
 
        private static final IntegerClassification constant_12bit = new IntegerClassification(0, 12);
        private static final IntegerClassification constant_16bit = new IntegerClassification(0, 16);
@@ -89,7 +90,7 @@ public class Am2900MicroInstructionDefinition implements MicroInstructionDefinit
        @Override
        public ParameterClassification[] getParameterClassifications()
        {
        @Override
        public ParameterClassification[] getParameterClassifications()
        {
-               return classes;
+               return Arrays.copyOf(classes, classes.length);
        }
 
        @Override
        }
 
        @Override