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
{
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);