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