Updated Am2900Machine and -Definition; Added MachineContext
[Mograsim.git] / net.mograsim.machine / src / net / mograsim / machine / mi / MicroInstructionDefinition.java
index b940e65..229c761 100644 (file)
@@ -1,7 +1,13 @@
 package net.mograsim.machine.mi;
 
+import java.math.BigInteger;
+
+import net.mograsim.machine.mi.parameters.IntegerClassification;
+import net.mograsim.machine.mi.parameters.IntegerImmediate;
 import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
+import net.mograsim.machine.mi.parameters.MnemonicFamily;
 import net.mograsim.machine.mi.parameters.ParameterClassification;
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter.ParameterType;
 
 public interface MicroInstructionDefinition
 {
@@ -24,6 +30,33 @@ public interface MicroInstructionDefinition
                return getParameterClassifications().length;
        }
        
+       public default MicroInstruction createDefaultInstruction()
+       {
+               int size = size();
+               MicroInstructionParameter[] params = new MicroInstructionParameter[size];
+               ParameterClassification[] classes = getParameterClassifications();
+               for(int i = 0; i < size; i++)
+               {
+                       MicroInstructionParameter newParam;
+                       ParameterClassification classification = classes[i];
+                       ParameterType type = classification.getExpectedType();
+                       switch(type)
+                       {
+                       case BOOLEAN_IMMEDIATE:
+                       case MNEMONIC:
+                               newParam = ((MnemonicFamily) classification).get(0);
+                               break;
+                       case INTEGER_IMMEDIATE:
+                               newParam = new IntegerImmediate(BigInteger.valueOf(0), ((IntegerClassification) classification).getExpectedBits());
+                               break;
+                       default:
+                               throw new IllegalStateException("Unknown ParameterType " + type);
+                       }
+                       params[i] = newParam;
+               }
+               return new StandardMicroInstruction(params);
+       }
+       
        public static MicroInstructionDefinition create(ParameterClassification... classes)
        {
                return new StandardMicroInstructionDefinition(classes);