X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model.am2900%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fam2900%2Fmachine%2FAm2900MicroInstructionDefinition.java;h=12cbd37fe710676b784e41fa14b740d7c07b7684;hb=6f7a567274818eb91c38794155043a51fac4491c;hp=d61b751dda3019ccf49b5bfd59d8d6dbfe91db7d;hpb=52db0db90ba1361e96c0313b6e51817ef4891c49;p=Mograsim.git diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MicroInstructionDefinition.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MicroInstructionDefinition.java index d61b751d..12cbd37f 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MicroInstructionDefinition.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MicroInstructionDefinition.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.am2900.machine; +import java.util.Arrays; +import java.util.Optional; + import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; import net.mograsim.machine.mi.MicroInstructionDefinition; @@ -11,32 +14,45 @@ import net.mograsim.machine.mi.parameters.ParameterClassification; public class Am2900MicroInstructionDefinition implements MicroInstructionDefinition { - private final static MnemonicFamily am2910Instructions = new MnemonicFamily("JZ", "CJS", "JMAP", "PUSH", "JSRP", "CJV", "JRP", "RFCT", - "RPCT", "CRTN", "CJPP", "LDCT", "LOOP", "CONT", "TWB"); - private final static MnemonicFamily am2904StatusInstructions = new MnemonicFamily( - new String[] { "Zero", "NotZero", "UGTEQ", "ULT", "UGT", "ULTEQ", "SGTEQ", "SLT", "SGT", "SLTEQ" }, - new long[] { 0x5, 0x4, 0xB, 0xA, 0xC, 0xD, 0x2, 0x3, 0x0, 0x1 }, 4); - private final static MnemonicFamily am2904ShiftInstructions = new MnemonicFamily("SL", "SH", "SCONI", "SDH", "SDC", "SDN", "SDL", + private final static MnemonicFamily am2910Instructions = new MnemonicFamily(true, "JZ", "CJS", "JMAP", "PUSH", "JSRP", "CJV", "JRP", + "RFCT", "RPCT", "CRTN", "CJPP", "LDCT", "LOOP", "CONT", "TWB"); + private final static MnemonicFamily am2904StatusInstructions = new MnemonicFamily(true, + new String[] { "MI_Zero", "MI_NotZero", "MI_UGTEQ", "MI_ULT", "MI_UGT", "MI_ULTEQ", "MI_SGTEQ", "MI_SLT", "MI_SGT", "MI_SLTEQ", + "MA_Zero", "MA_NotZero", "MA_UGTEQ", "MA_ULT", "MA_UGT", "MA_ULTEQ", "MA_SGTEQ", "MA_SLT", "MA_SGT", "MA_SLTEQ" }, + new long[] { 0b01_0101, 0b01_0100, 0b01_1101, 0b01_1100, 0b01_1110, 0b01_1111, 0b01_0010, 0b01_0011, 0b01_0000, 0b01_0001, + 0b10_0101, 0b10_0100, 0b10_1101, 0b10_1100, 0b10_1110, 0b10_1111, 0b10_0010, 0b10_0011, 0b10_0000, 0b10_0001 }, + 6); + private final static MnemonicFamily am2904ShiftInstructions = new MnemonicFamily(true, "SL", "SH", "SCONI", "SDH", "SDC", "SDN", "SDL", "SDCO", "SRCO", "SRCIO", "SR", "SDIC", "SDRCI", "SDRCO", "SDXOR", "SDR"); - private final static MnemonicFamily am2904CarryInstructions = new MnemonicFamily(new String[] { "0", "1", "Cx", "µ", "!µ", "M", "!M" }, - new long[] { 0b000000, 0b010000, 0b100000, 0b110000, 0b110100, 0b111000, 0b111100 }, 6); - private final static MnemonicFamily am2901DestInstructions = new MnemonicFamily("QREG", "NOP", "RAMA", "RAMF", "RAMQD", "RAMD", "RAMQU", - "RAMU"); - private final static MnemonicFamily am2901FuncInstructions = new MnemonicFamily("ADD", "SUBR", "SUBS", "OR", "AND", "NOTRS", "EXOR", - "EXNOR"); - private final static MnemonicFamily am2901SrcInstructions = new MnemonicFamily("AQ", "AB", "ZQ", "ZB", "ZA", "DA", "DQ", "DZ"); + private final static MnemonicFamily am2904CarryInstructions = new MnemonicFamily(true, new String[] { "CI0", "CI1", "CIX", "CIC" }, + new long[] { 0b00, 0b01, 0b10, 0b11 }, 2); + private final static MnemonicFamily am2901DestInstructions = new MnemonicFamily(true, "QREG", "NOP", "RAMA", "RAMF", "RAMQD", "RAMD", + "RAMQU", "RAMU"); + private final static MnemonicFamily am2901FuncInstructions = new MnemonicFamily(true, "ADD", "SUBR", "SUBS", "OR", "AND", "NOTRS", + "EXOR", "EXNOR"); + private final static MnemonicFamily am2901SrcInstructions = new MnemonicFamily(true, "AQ", "AB", "ZQ", "ZB", "ZA", "DA", "DQ", "DZ"); private final static MnemonicFamily interruptInstructions = new MnemonicFamily( new MnemonicPair("X", BitVector.of(Bit.ZERO, 4))/* TODO */); private final static BooleanClassification hL = new BooleanClassification("H", "L"); private final static BooleanClassification registerSelect = new BooleanClassification("MR", "IR"); private final static IntegerClassification register = new IntegerClassification(4); - private final static ParameterClassification[] classes = { new BooleanClassification("R", "W"), hL, new BooleanClassification("H", "E"), - new BooleanClassification("H", "I"), new BooleanClassification("H", "E"), hL, new IntegerClassification(11), am2910Instructions, - new BooleanClassification("PS", "C"), am2904StatusInstructions, hL, hL, am2904ShiftInstructions, am2904CarryInstructions, - new BooleanClassification("H", "DB"), new BooleanClassification("H", "AB"), registerSelect, register, registerSelect, register, - am2901DestInstructions, am2901FuncInstructions, am2901SrcInstructions, new IntegerClassification(16), - new BooleanClassification("D", "K"), interruptInstructions, new BooleanClassification("Dis", "IE") }; + private final static ParameterClassification[] classes = { new BooleanClassification("Dis", "IE"), new IntegerClassification(16), + new BooleanClassification("D", "K"), interruptInstructions, new BooleanClassification("H", "AB"), registerSelect, register, + registerSelect, register, am2901DestInstructions, am2901FuncInstructions, am2901SrcInstructions, new IntegerClassification(12), + am2910Instructions, new BooleanClassification("PS", "C"), am2904StatusInstructions, hL, hL, am2904ShiftInstructions, + am2904CarryInstructions, new BooleanClassification("H", "DB"), new BooleanClassification("H", "E"), hL, + new BooleanClassification("H", "E"), new BooleanClassification("H", "I"), new BooleanClassification("R", "W"), hL }; + + private final static String[] paramDesc = { "Allow interrupts?", "Interrupt instructions; omitted for simplicity", + "Get D-input from data bus/constant value", "Constant value", "Operand sources for ALU operation", "ALU operation", + "Destination of ALU calculation", "Register for A-operand", "Get A-operand from instruction register/micro instruction?", + "Register for B-operand", "Get B-operand from instruction register/micro instruction?", + "Put data from Y-output on address bus?", "Put data from Y-output on data bus?", "Source for carry-in", "Shift instructions", + "Modify micro status register?", "Modify macro status register?", "Operations on the status register", + "Is conditional jump enabled?", "Instructions for the micro instruction pointer", "Absolute address of a micro instruction", + "Load instruction pointer from data bus?", "Put instruction pointer on data bus?", "Increment instruction pointer?", + "Put instruction pointer on address bus?", "Load instruction register from data bus?", "Read from/Write to main memory?" }; @Override public ParameterClassification[] getParameterClassifications() @@ -50,4 +66,22 @@ public class Am2900MicroInstructionDefinition implements MicroInstructionDefinit return classes[index]; } + @Override + public Optional 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))); + } }