Merge 'transportdelay' into development
[Mograsim.git] / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / am2900 / machine / Am2900MicroInstructionDefinition.java
1 package net.mograsim.logic.model.am2900.machine;
2
3 import net.mograsim.logic.core.types.Bit;
4 import net.mograsim.logic.core.types.BitVector;
5 import net.mograsim.machine.mi.MicroInstructionDefinition;
6 import net.mograsim.machine.mi.parameters.BooleanClassification;
7 import net.mograsim.machine.mi.parameters.IntegerClassification;
8 import net.mograsim.machine.mi.parameters.MnemonicFamily;
9 import net.mograsim.machine.mi.parameters.MnemonicFamily.MnemonicPair;
10 import net.mograsim.machine.mi.parameters.ParameterClassification;
11
12 public class Am2900MicroInstructionDefinition implements MicroInstructionDefinition
13 {
14         private final static MnemonicFamily am2910Instructions = new MnemonicFamily("JZ", "CJS", "JMAP", "PUSH", "JSRP", "CJV", "JRP", "RFCT",
15                         "RPCT", "CRTN", "CJPP", "LDCT", "LOOP", "CONT", "TWB");
16         private final static MnemonicFamily am2904StatusInstructions = new MnemonicFamily(
17                         new String[] { "Zero", "NotZero", "UGTEQ", "ULT", "UGT", "ULTEQ", "SGTEQ", "SLT", "SGT", "SLTEQ" },
18                         new long[] { 0x5, 0x4, 0xB, 0xA, 0xC, 0xD, 0x2, 0x3, 0x0, 0x1 }, 4);
19         private final static MnemonicFamily am2904ShiftInstructions = new MnemonicFamily("SL", "SH", "SCONI", "SDH", "SDC", "SDN", "SDL",
20                         "SDCO", "SRCO", "SRCIO", "SR", "SDIC", "SDRCI", "SDRCO", "SDXOR", "SDR");
21         private final static MnemonicFamily am2904CarryInstructions = new MnemonicFamily(new String[] { "0", "1", "Cx", "µ", "!µ", "M", "!M" },
22                         new long[] { 0b000000, 0b010000, 0b100000, 0b110000, 0b110100, 0b111000, 0b111100 }, 6);
23         private final static MnemonicFamily am2901DestInstructions = new MnemonicFamily("QREG", "NOP", "RAMA", "RAMF", "RAMQD", "RAMD", "RAMQU",
24                         "RAMU");
25         private final static MnemonicFamily am2901FuncInstructions = new MnemonicFamily("ADD", "SUBR", "SUBS", "OR", "AND", "NOTRS", "EXOR",
26                         "EXNOR");
27         private final static MnemonicFamily am2901SrcInstructions = new MnemonicFamily("AQ", "AB", "ZQ", "ZB", "ZA", "DA", "DQ", "DZ");
28         private final static MnemonicFamily interruptInstructions = new MnemonicFamily(
29                         new MnemonicPair("X", BitVector.of(Bit.ZERO, 4))/* TODO */);
30         private final static BooleanClassification hL = new BooleanClassification("H", "L");
31         private final static BooleanClassification registerSelect = new BooleanClassification("MR", "IR");
32         private final static IntegerClassification register = new IntegerClassification(4);
33
34         private final static ParameterClassification[] classes = { new BooleanClassification("R", "W"), hL, new BooleanClassification("H", "E"),
35                         new BooleanClassification("H", "I"), new BooleanClassification("H", "E"), hL, new IntegerClassification(11), am2910Instructions,
36                         new BooleanClassification("PS", "C"), am2904StatusInstructions, hL, hL, am2904ShiftInstructions, am2904CarryInstructions,
37                         new BooleanClassification("H", "DB"), new BooleanClassification("H", "AB"), registerSelect, register, registerSelect, register,
38                         am2901DestInstructions, am2901FuncInstructions, am2901SrcInstructions, new IntegerClassification(16),
39                         new BooleanClassification("D", "K"), interruptInstructions, new BooleanClassification("Dis", "IE") };
40
41         @Override
42         public ParameterClassification[] getParameterClassifications()
43         {
44                 return classes;
45         }
46
47         @Override
48         public ParameterClassification getParameterClassification(int index)
49         {
50                 return classes[index];
51         }
52
53 }