X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FMicroInstructionDefinition.java;h=5221e3e9a896debf76031c5cf7eca998e1dafc5f;hb=93f106a691015a63a6c5af27406b94303385698a;hp=229c761f74283013bc211de243ead48e1bca6095;hpb=259c5b8d38b6ed641fd9b5d78fe20969c67015dc;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 229c761f..5221e3e9 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java @@ -1,13 +1,16 @@ package net.mograsim.machine.mi; import java.math.BigInteger; +import java.util.Arrays; +import java.util.Optional; +import net.mograsim.logic.core.types.Bit; 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.MicroInstructionParameter.ParameterType; 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 { @@ -15,13 +18,12 @@ public interface MicroInstructionDefinition * @return The {@link ParameterClassification}s of which a MicroInstruction is composed. */ public ParameterClassification[] getParameterClassifications(); - + /** * @throws IndexOutOfBoundsException */ public ParameterClassification getParameterClassification(int index); - - + /** * @return The amount of {@link MicroInstructionParameter}s in a {@link MicroInstruction} that follows this definition. */ @@ -29,18 +31,26 @@ public interface MicroInstructionDefinition { return getParameterClassifications().length; } - - public default MicroInstruction createDefaultInstruction() + + /** + * @return The amount of {@link Bit}s in a {@link MicroInstruction} that follows this definition. + */ + public default int sizeInBits() + { + return Arrays.stream(getParameterClassifications()).mapToInt(e -> e.getExpectedBits()).reduce(0, (a, b) -> a + b); + } + + public default MicroInstruction createDefaultInstruction(Runnable updateCallback) { int size = size(); MicroInstructionParameter[] params = new MicroInstructionParameter[size]; ParameterClassification[] classes = getParameterClassifications(); - for(int i = 0; i < size; i++) + for (int i = 0; i < size; i++) { MicroInstructionParameter newParam; ParameterClassification classification = classes[i]; ParameterType type = classification.getExpectedType(); - switch(type) + switch (type) { case BOOLEAN_IMMEDIATE: case MNEMONIC: @@ -54,11 +64,8 @@ public interface MicroInstructionDefinition } params[i] = newParam; } - return new StandardMicroInstruction(params); - } - - public static MicroInstructionDefinition create(ParameterClassification... classes) - { - return new StandardMicroInstructionDefinition(classes); + return new StandardMicroInstruction(updateCallback, params); } + + public Optional getParameterDescription(int index); } \ No newline at end of file