package net.mograsim.logic.model.am2900.machine;
-import java.util.Objects;
import java.util.Set;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.machine.ISASchema;
-import net.mograsim.machine.Machine;
import net.mograsim.machine.MachineDefinition;
-import net.mograsim.machine.MachineRegistry;
-import net.mograsim.machine.MainMemoryDefinition;
import net.mograsim.machine.Register;
-import net.mograsim.machine.mi.MicroInstructionMemoryDefinition;
+//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 MainMemoryDefinition memoryDefinition = new Am2900MainMemoryDefinition();
- private MicroInstructionMemoryDefinition microInstMemoryDefinition = new Am2900MicroInstructionMemoryDefinition();
- private final static Am2900MachineDefinition instance = new Am2900MachineDefinition();
+ public static final String AM2900_MACHINE_ID = "Am2900";
- public static Am2900MachineDefinition getInstance()
+ @Override
+ public String getId()
{
- return Objects.requireNonNullElseGet((Am2900MachineDefinition) MachineRegistry.getinstalledMachines().get("Am2900"),
- () -> instance);
+ return AM2900_MACHINE_ID;
}
@Override
- public Machine createNew()
+ public Am2900Machine createNew()
+ {
+ return createNew(new LogicModelModifiable());
+ }
+
+ public Am2900Machine createNew(LogicModelModifiable model)
{
- return new Am2900Machine(this);
+ return new Am2900Machine(model, this);
}
@Override
}
@Override
- public MainMemoryDefinition getMainMemoryDefinition()
+ public Am2900MainMemoryDefinition getMainMemoryDefinition()
{
- return memoryDefinition;
+ return Am2900MainMemoryDefinition.instance;
}
@Override
- public MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition()
+ public int hashCode()
{
- return microInstMemoryDefinition;
+ return 12345;
}
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ return obj != null && obj instanceof Am2900MachineDefinition;
+ }
+
+ @Override
+ public Am2900MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition()
+ {
+ return Am2900MicroInstructionMemoryDefinition.instance;
+ }
+
}