1 package net.mograsim.logic.model.am2900.machine;
3 import java.util.Collections;
4 import java.util.HashSet;
7 import net.mograsim.logic.model.am2900.machine.registers.NumberedRegister;
8 import net.mograsim.logic.model.am2900.machine.registers.QRegister;
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.Register;
13 import net.mograsim.machine.RegisterGroup;
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
19 public static final String SIMPLE_AM2900_MACHINE_ID = "Am2900Simple";
20 public static final String STRICT_AM2900_MACHINE_ID = "Am2900Strict";
22 public static final Set<Register> allRegisters;
26 Set<Register> allRegistersModifiable = new HashSet<>();
27 allRegistersModifiable.add(QRegister.instance);
28 allRegistersModifiable.addAll(NumberedRegister.instancesCorrectOrder);
29 // TODO MSR, muSR, MIR, IR, PC/BZ...
30 allRegisters = Collections.unmodifiableSet(allRegistersModifiable);
33 public final boolean strict;
35 protected AbstractAm2900MachineDefinition(boolean strict)
43 return strict ? STRICT_AM2900_MACHINE_ID : SIMPLE_AM2900_MACHINE_ID;
47 public Am2900Machine createNew()
49 return createNew(new LogicModelModifiable());
52 public Am2900Machine createNew(LogicModelModifiable model)
54 return new Am2900Machine(model, this);
58 public ISASchema getISASchema()
60 // TODO Auto-generated method stub
65 public Set<Register> getRegisters()
71 public int getAddressBits()
77 public Am2900MainMemoryDefinition getMainMemoryDefinition()
79 return Am2900MainMemoryDefinition.instance;
85 return strict ? 12345 : 54321;
89 public boolean equals(Object obj)
91 return obj != null && obj instanceof AbstractAm2900MachineDefinition
92 && ((AbstractAm2900MachineDefinition) obj).strict == this.strict;
96 public Am2900MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition()
98 return Am2900MicroInstructionMemoryDefinition.instance;
102 public Set<RegisterGroup> getRegisterGroups()
104 return null; // TODO create groups for am2904, am2901-asmUsable, am2901-internal, ...