X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FMicroInstructionDefinition.java;h=6625fa666464f5bd235b42800634994a13d2936b;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=b940e6528dca724014406be1ec6a39ffac00650b;hpb=976f7f2be00457b5cda2489545635ccd076c9afd;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..6625fa66 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java @@ -1,5 +1,9 @@ package net.mograsim.machine.mi; +import java.util.Arrays; +import java.util.Optional; + +import net.mograsim.logic.core.types.Bit; import net.mograsim.machine.mi.parameters.MicroInstructionParameter; import net.mograsim.machine.mi.parameters.ParameterClassification; @@ -9,13 +13,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. */ @@ -23,9 +26,27 @@ public interface MicroInstructionDefinition { return getParameterClassifications().length; } - - public static MicroInstructionDefinition create(ParameterClassification... classes) + + /** + * @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) { - return new StandardMicroInstructionDefinition(classes); + int size = size(); + MicroInstructionParameter[] params = new MicroInstructionParameter[size]; + ParameterClassification[] classes = getParameterClassifications(); + for (int i = 0; i < size; i++) + { + ParameterClassification classification = classes[i]; + params[i] = classification.getDefault(); + } + return new StandardMicroInstruction(updateCallback, params); } + + public Optional getParameterDescription(int index); } \ No newline at end of file