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