From: Fabian Stemmler Date: Fri, 13 Sep 2019 15:44:28 +0000 (+0200) Subject: Fleshed out Am2900MicroInstructionDefinition X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=6f7a567274818eb91c38794155043a51fac4491c Fleshed out Am2900MicroInstructionDefinition --- diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java index 4d5f9110..ee957566 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java @@ -491,4 +491,15 @@ public final class BitVector implements StrictLogicType, Iterable getParameterDescription(int index) + { + return Optional.of(paramDesc[index]); + } + + public static void main(String[] args) + { + String s = "new BooleanClassification(\"R\", \"W\"), hL, new BooleanClassification(\"H\", \"E\"),\r\n" + + " new BooleanClassification(\"H\", \"I\"), new BooleanClassification(\"H\", \"E\"), hL, new IntegerClassification(12), am2910Instructions,\r\n" + + " new BooleanClassification(\"PS\", \"C\"), am2904StatusInstructions, hL, hL, am2904ShiftInstructions, am2904CarryInstructions,\r\n" + + " new BooleanClassification(\"H\", \"DB\"), new BooleanClassification(\"H\", \"AB\"), registerSelect, register, registerSelect, register,\r\n" + + " am2901DestInstructions, am2901FuncInstructions, am2901SrcInstructions, new IntegerClassification(16),\r\n" + + " new BooleanClassification(\"D\", \"K\"), interruptInstructions, new BooleanClassification(\"Dis\", \"IE\")"; + s = s.replaceAll("[\r\n\t]", ""); + System.out.print(Arrays.stream(s.split(", new")).reduce((a, b) -> b + ", new" + a)); +// System.out.println(Arrays.stream(paramDesc).reduce("", (a, b) -> String.format("\"%s\", %s", b, a))); + } } 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..0ba3b413 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java @@ -1,6 +1,7 @@ package net.mograsim.machine.mi; import java.math.BigInteger; +import java.util.Optional; import net.mograsim.machine.mi.parameters.IntegerClassification; import net.mograsim.machine.mi.parameters.IntegerImmediate; @@ -56,9 +57,6 @@ public interface MicroInstructionDefinition } return new StandardMicroInstruction(params); } - - public static MicroInstructionDefinition create(ParameterClassification... classes) - { - return new StandardMicroInstructionDefinition(classes); - } + + public Optional getParameterDescription(int index); } \ No newline at end of file diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java deleted file mode 100644 index 2def5e1e..00000000 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.mograsim.machine.mi; - -import net.mograsim.machine.mi.parameters.ParameterClassification; - -class StandardMicroInstructionDefinition implements MicroInstructionDefinition -{ - private ParameterClassification[] classes; - - public StandardMicroInstructionDefinition(ParameterClassification... classes) - { - this.classes = classes; - } - - @Override - public ParameterClassification[] getParameterClassifications() - { - return classes.clone(); - } - - @Override - public ParameterClassification getParameterClassification(int index) - { - return classes[index]; - } - -} diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java index 54c275b4..f4343bd0 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java @@ -15,20 +15,39 @@ public class MnemonicFamily implements ParameterClassification private int vectorLength; public MnemonicFamily(String... names) + { + this(false, (int) Math.round(Math.ceil(Math.log(names.length) / Math.log(2))), names); + } + + public MnemonicFamily(boolean reverse, String... names) + { + this(reverse, (int) Math.round(Math.ceil(Math.log(names.length) / Math.log(2))), names); + } + + public MnemonicFamily(int bits, String... names) + { + this(false, bits, names); + } + + public MnemonicFamily(boolean reverse, int bits, String... names) { this.values = new Mnemonic[names.length]; this.stringValues = new String[names.length]; BitVector[] values = new BitVector[names.length]; - int bits = (int) Math.ceil(Math.log(names.length)); for(int i = 0; i < names.length; i++) { values[i] = BitVector.from(i, bits); } - setup(names, values); + setup(names, values, reverse); } public MnemonicFamily(String[] names, long[] values, int bits) + { + this(false, names, values, bits); + } + + public MnemonicFamily(boolean reverse, String[] names, long[] values, int bits) { if(names.length != values.length) throw new IllegalArgumentException(); @@ -41,20 +60,30 @@ public class MnemonicFamily implements ParameterClassification vectors[i] = BitVector.from(values[i], bits); } - setup(names, vectors); + setup(names, vectors, reverse); } public MnemonicFamily(String[] names, BitVector[] values) + { + this(false, names, values); + } + + public MnemonicFamily(boolean reverse, String[] names, BitVector[] values) { if(names.length != values.length) throw new IllegalArgumentException(); this.values = new Mnemonic[values.length]; this.stringValues = new String[values.length]; - setup(names, values); + setup(names, values, reverse); } public MnemonicFamily(MnemonicPair... values) + { + this(false, values); + } + + public MnemonicFamily(boolean reverse, MnemonicPair... values) { this.values = new Mnemonic[values.length]; this.stringValues = new String[values.length]; @@ -62,11 +91,11 @@ public class MnemonicFamily implements ParameterClassification setup(values); } - private void setup(String[] names, BitVector[] values) + private void setup(String[] names, BitVector[] values, boolean reverse) { MnemonicPair[] mnemonics = new MnemonicPair[values.length]; for(int i = 0; i < values.length; i++) - mnemonics[i] = new MnemonicPair(names[i], values[i]); + mnemonics[i] = new MnemonicPair(names[i], reverse ? values[i].reverse() : values[i]); setup(mnemonics); }