X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model.am2900%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fam2900%2Fmachine%2FAm2900MachineDefinition.java;h=325f63fb70b22a33eae1424bb41504dc0ab54605;hb=c59feb481f39dc2af89475a1ea53c1b234913cb7;hp=0ac06ea77b1b658c2c3e4967739bd3eda57a0896;hpb=7d05144c25daa53e60fc9ed9fd503546a86567f8;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java index 0ac06ea7..325f63fb 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java @@ -1,32 +1,47 @@ 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.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() + public static final Set allRegisters; + + static + { + Set 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 - public Machine createNew() + public Am2900Machine createNew() { - return new Am2900Machine(this); + return createNew(new LogicModelModifiable()); + } + + public Am2900Machine createNew(LogicModelModifiable model) + { + return new Am2900Machine(model, this); } @Override @@ -39,8 +54,7 @@ public class Am2900MachineDefinition implements MachineDefinition @Override public Set getRegisters() { - // TODO Auto-generated method stub - return null; + return allRegisters; } @Override @@ -50,14 +64,27 @@ public class Am2900MachineDefinition implements MachineDefinition } @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; + } + }