1 package net.mograsim.machine.mi;
3 import java.math.BigInteger;
4 import java.util.Optional;
6 import net.mograsim.machine.mi.parameters.IntegerClassification;
7 import net.mograsim.machine.mi.parameters.IntegerImmediate;
8 import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
9 import net.mograsim.machine.mi.parameters.MnemonicFamily;
10 import net.mograsim.machine.mi.parameters.ParameterClassification;
11 import net.mograsim.machine.mi.parameters.MicroInstructionParameter.ParameterType;
13 public interface MicroInstructionDefinition
16 * @return The {@link ParameterClassification}s of which a MicroInstruction is composed.
18 public ParameterClassification[] getParameterClassifications();
21 * @throws IndexOutOfBoundsException
23 public ParameterClassification getParameterClassification(int index);
27 * @return The amount of {@link MicroInstructionParameter}s in a {@link MicroInstruction} that follows this definition.
29 public default int size()
31 return getParameterClassifications().length;
34 public default MicroInstruction createDefaultInstruction()
37 MicroInstructionParameter[] params = new MicroInstructionParameter[size];
38 ParameterClassification[] classes = getParameterClassifications();
39 for(int i = 0; i < size; i++)
41 MicroInstructionParameter newParam;
42 ParameterClassification classification = classes[i];
43 ParameterType type = classification.getExpectedType();
46 case BOOLEAN_IMMEDIATE:
48 newParam = ((MnemonicFamily) classification).get(0);
50 case INTEGER_IMMEDIATE:
51 newParam = new IntegerImmediate(BigInteger.valueOf(0), ((IntegerClassification) classification).getExpectedBits());
54 throw new IllegalStateException("Unknown ParameterType " + type);
58 return new StandardMicroInstruction(params);
61 public Optional<String> getParameterDescription(int index);