package net.mograsim.logic.model.am2900.machine;
-import java.util.Objects;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
+import net.mograsim.logic.model.am2900.machine.registers.NumberedRegister;
+import net.mograsim.logic.model.am2900.machine.registers.QRegister;
import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.machine.ISASchema;
import net.mograsim.machine.MachineDefinition;
-import net.mograsim.machine.MachineRegistry;
import net.mograsim.machine.Register;
+//we can't use the Singleton pattern here because a MachineDefinition needs a public parameterless constructor
+//(used for detecting installed machines in plugin.core)
public class Am2900MachineDefinition implements MachineDefinition
{
- private Am2900MainMemoryDefinition memoryDefinition = new Am2900MainMemoryDefinition();
- private Am2900MicroInstructionMemoryDefinition microInstMemoryDefinition = new Am2900MicroInstructionMemoryDefinition();
- private final static Am2900MachineDefinition instance = new Am2900MachineDefinition();
+ public static final String AM2900_MACHINE_ID = "Am2900";
- public static Am2900MachineDefinition getInstance()
+ public static final Set<Register> allRegisters;
+
+ static
+ {
+ Set<Register> allRegistersModifiable = new HashSet<>();
+ allRegistersModifiable.add(QRegister.instance);
+ allRegistersModifiable.addAll(NumberedRegister.instancesCorrectOrder);
+ allRegisters = Collections.unmodifiableSet(allRegistersModifiable);
+ }
+
+ @Override
+ public String getId()
{
- return Objects.requireNonNullElseGet((Am2900MachineDefinition) MachineRegistry.getinstalledMachines().get("Am2900"),
- () -> instance);
+ return AM2900_MACHINE_ID;
}
@Override
@Override
public Set<Register> getRegisters()
{
- // TODO Auto-generated method stub
- return null;
+ return allRegisters;
}
@Override
@Override
public Am2900MainMemoryDefinition getMainMemoryDefinition()
{
- return memoryDefinition;
+ return Am2900MainMemoryDefinition.instance;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return 12345;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ return obj != null && obj instanceof Am2900MachineDefinition;
}
@Override
public Am2900MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition()
{
- return microInstMemoryDefinition;
+ return Am2900MicroInstructionMemoryDefinition.instance;
}
+
}