Added register for muIR
[Mograsim.git] / plugins / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / am2900 / machine / AbstractAm2900MachineDefinition.java
1 package net.mograsim.logic.model.am2900.machine;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7 import net.mograsim.logic.model.am2900.machine.registers.muInstrRegister;
8 import net.mograsim.logic.model.am2900.machine.registers.am2901.Am2901RegisterGroup;
9 import net.mograsim.logic.model.am2900.machine.registers.am2904.Am2904RegisterGroup;
10 import net.mograsim.logic.model.am2900.machine.registers.am2910.Am2910RegisterGroup;
11 import net.mograsim.logic.model.model.LogicModelModifiable;
12 import net.mograsim.machine.ISASchema;
13 import net.mograsim.machine.MachineDefinition;
14 import net.mograsim.machine.registers.Register;
15 import net.mograsim.machine.registers.RegisterGroup;
16
17 //we can't use the Singleton pattern here because a MachineDefinition needs a public parameterless constructor
18 //(used for detecting installed machines in plugin.core)
19 public class AbstractAm2900MachineDefinition implements MachineDefinition
20 {
21         public static final String SIMPLE_AM2900_MACHINE_ID = "Am2900Simple";
22         public static final String STRICT_AM2900_MACHINE_ID = "Am2900Strict";
23
24         public static final List<Register> unsortedRegisters;
25         public static final List<RegisterGroup> registerGroups;
26
27         static
28         {
29                 List<Register> unsortedRegistersModifiable = new ArrayList<>();
30                 unsortedRegistersModifiable.add(muInstrRegister.instance);
31                 // TODO IR, PC/BZ...
32                 unsortedRegisters = Collections.unmodifiableList(unsortedRegistersModifiable);
33                 List<RegisterGroup> registerGroupsModifiable = new ArrayList<>();
34                 registerGroupsModifiable.add(Am2901RegisterGroup.instance);
35                 registerGroupsModifiable.add(Am2904RegisterGroup.instance);
36                 registerGroupsModifiable.add(Am2910RegisterGroup.instance);
37                 registerGroups = Collections.unmodifiableList(registerGroupsModifiable);
38         }
39
40         public final boolean strict;
41
42         protected AbstractAm2900MachineDefinition(boolean strict)
43         {
44                 this.strict = strict;
45         }
46
47         @Override
48         public String getId()
49         {
50                 return strict ? STRICT_AM2900_MACHINE_ID : SIMPLE_AM2900_MACHINE_ID;
51         }
52
53         @Override
54         public Am2900Machine createNew()
55         {
56                 return createNew(new LogicModelModifiable());
57         }
58
59         public Am2900Machine createNew(LogicModelModifiable model)
60         {
61                 return new Am2900Machine(model, this);
62         }
63
64         @Override
65         public ISASchema getISASchema()
66         {
67                 // TODO Auto-generated method stub
68                 return null;
69         }
70
71         @Override
72         public List<Register> getUnsortedRegisters()
73         {
74                 return unsortedRegisters;
75         }
76
77         @Override
78         public List<RegisterGroup> getRegisterGroups()
79         {
80                 return registerGroups;
81         }
82
83         @Override
84         public int getAddressBits()
85         {
86                 return 16;
87         }
88
89         @Override
90         public Am2900MainMemoryDefinition getMainMemoryDefinition()
91         {
92                 return Am2900MainMemoryDefinition.instance;
93         }
94
95         @Override
96         public int hashCode()
97         {
98                 return strict ? 12345 : 54321;
99         }
100
101         @Override
102         public boolean equals(Object obj)
103         {
104                 return obj != null && obj instanceof AbstractAm2900MachineDefinition
105                                 && ((AbstractAm2900MachineDefinition) obj).strict == this.strict;
106         }
107
108         @Override
109         public Am2900MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition()
110         {
111                 return Am2900MicroInstructionMemoryDefinition.instance;
112         }
113
114 }