From 5145372e475b764b56745909726ba64749e067b0 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Fri, 4 Oct 2019 13:06:55 +0200 Subject: [PATCH] Added simple version of Am2900Machine --- .../plugin.xml | 8 ++++++-- ...a => AbstractAm2900MachineDefinition.java} | 19 ++++++++++++++----- .../model/am2900/machine/Am2900Machine.java | 11 +++++++++-- .../SimpleAm2900MachineDefinition.java | 9 +++++++++ .../StrictAm2900MachineDefinition.java | 9 +++++++++ .../examples/ModelComponentTestbench.java | 4 ++-- 6 files changed, 49 insertions(+), 11 deletions(-) rename plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/{Am2900MachineDefinition.java => AbstractAm2900MachineDefinition.java} (75%) create mode 100644 plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/SimpleAm2900MachineDefinition.java create mode 100644 plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/StrictAm2900MachineDefinition.java diff --git a/plugins/net.mograsim.logic.model.am2900/plugin.xml b/plugins/net.mograsim.logic.model.am2900/plugin.xml index 7a324ad9..a3376d51 100644 --- a/plugins/net.mograsim.logic.model.am2900/plugin.xml +++ b/plugins/net.mograsim.logic.model.am2900/plugin.xml @@ -4,8 +4,12 @@ + class="net.mograsim.logic.model.am2900.machine.SimpleAm2900MachineDefinition" + unique_id="Am2900Simple"> + + 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/AbstractAm2900MachineDefinition.java similarity index 75% rename from plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MachineDefinition.java rename to plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java index 325f63fb..37d93153 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/AbstractAm2900MachineDefinition.java @@ -13,9 +13,10 @@ 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 +public class AbstractAm2900MachineDefinition implements MachineDefinition { - public static final String AM2900_MACHINE_ID = "Am2900"; + public static final String SIMPLE_AM2900_MACHINE_ID = "Am2900Simple"; + public static final String STRICT_AM2900_MACHINE_ID = "Am2900Strict"; public static final Set allRegisters; @@ -27,10 +28,17 @@ public class Am2900MachineDefinition implements MachineDefinition allRegisters = Collections.unmodifiableSet(allRegistersModifiable); } + public final boolean strict; + + protected AbstractAm2900MachineDefinition(boolean strict) + { + this.strict = strict; + } + @Override public String getId() { - return AM2900_MACHINE_ID; + return strict ? STRICT_AM2900_MACHINE_ID : SIMPLE_AM2900_MACHINE_ID; } @Override @@ -72,13 +80,14 @@ public class Am2900MachineDefinition implements MachineDefinition @Override public int hashCode() { - return 12345; + return strict ? 12345 : 54321; } @Override public boolean equals(Object obj) { - return obj != null && obj instanceof Am2900MachineDefinition; + return obj != null && obj instanceof AbstractAm2900MachineDefinition + && ((AbstractAm2900MachineDefinition) obj).strict == this.strict; } @Override diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java index 3d6db31c..352ce123 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java @@ -8,6 +8,7 @@ import java.util.function.Consumer; import net.mograsim.logic.core.components.CoreClock; import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.model.am2900.machine.registers.NumberedRegister; import net.mograsim.logic.model.am2900.machine.registers.QRegister; @@ -32,7 +33,7 @@ import net.mograsim.machine.standard.memory.WordAddressableMemory; public class Am2900Machine implements Machine { - private Am2900MachineDefinition machineDefinition; + private AbstractAm2900MachineDefinition machineDefinition; private LogicModelModifiable logicModel; private ModelComponent am2900; private Timeline timeline; @@ -44,7 +45,7 @@ public class Am2900Machine implements Machine private final Set amicListeners; private final Map, Consumer>> modelListenersPerRegisterListenerPerRegister; - public Am2900Machine(LogicModelModifiable model, Am2900MachineDefinition am2900MachineDefinition) + public Am2900Machine(LogicModelModifiable model, AbstractAm2900MachineDefinition am2900MachineDefinition) { this.machineDefinition = am2900MachineDefinition; this.logicModel = model; @@ -89,6 +90,12 @@ public class Am2900Machine implements Machine defaultParams[19] = paramClassifications[19].parse("JZ"); MicroInstruction jzMI = MicroInstruction.create(defaultParams); am2900.setHighLevelState("muir_2.q", jzMI.toBitVector()); + if (!machineDefinition.strict) + { + for (Register r : machineDefinition.getRegisters()) + setRegister(r, BitVector.of(Bit.ZERO, r.getWidth())); + // TODO reset latches? + } } @Override diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/SimpleAm2900MachineDefinition.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/SimpleAm2900MachineDefinition.java new file mode 100644 index 00000000..895b1c2c --- /dev/null +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/SimpleAm2900MachineDefinition.java @@ -0,0 +1,9 @@ +package net.mograsim.logic.model.am2900.machine; + +public class SimpleAm2900MachineDefinition extends AbstractAm2900MachineDefinition +{ + public SimpleAm2900MachineDefinition() + { + super(false); + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/StrictAm2900MachineDefinition.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/StrictAm2900MachineDefinition.java new file mode 100644 index 00000000..ace5fb27 --- /dev/null +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/StrictAm2900MachineDefinition.java @@ -0,0 +1,9 @@ +package net.mograsim.logic.model.am2900.machine; + +public class StrictAm2900MachineDefinition extends AbstractAm2900MachineDefinition +{ + public StrictAm2900MachineDefinition() + { + super(true); + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ModelComponentTestbench.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ModelComponentTestbench.java index 297075a8..eb3f0b2c 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ModelComponentTestbench.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ModelComponentTestbench.java @@ -6,7 +6,7 @@ import java.util.List; import net.mograsim.logic.model.SimpleLogicUIStandalone; import net.mograsim.logic.model.am2900.Am2900Loader; -import net.mograsim.logic.model.am2900.machine.Am2900MachineDefinition; +import net.mograsim.logic.model.am2900.machine.StrictAm2900MachineDefinition; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay; @@ -26,7 +26,7 @@ public class ModelComponentTestbench public static void createTestbench(LogicModelModifiable model) { Am2900Loader.setup(); - ModelComponent comp = new Am2900MachineDefinition().createNew(model).getAm2900(); + ModelComponent comp = new StrictAm2900MachineDefinition().createNew(model).getAm2900(); List inputPinNames = new ArrayList<>(); List outputPinNames = new ArrayList<>(); -- 2.17.1