X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FMicroInstructionDefinition.java;h=229c761f74283013bc211de243ead48e1bca6095;hb=259c5b8d38b6ed641fd9b5d78fe20969c67015dc;hp=b940e6528dca724014406be1ec6a39ffac00650b;hpb=2fe86b9ccd64afbe485b8290db9f11b93d9943bf;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java index b940e652..229c761f 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java @@ -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);