From: Christian Femers Date: Mon, 2 Sep 2019 01:26:39 +0000 (+0200) Subject: Fixed test setup and added support for high level state access X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=76fdc144f22b60491e61a32860fe2e6881751505 Fixed test setup and added support for high level state access --- diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java index 115f9cb5..5290c5a6 100644 --- a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java +++ b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.am2900.am2910; +import java.util.Arrays; +import java.util.stream.Stream; + import net.mograsim.logic.model.am2900.TestableCircuit; public interface TestableAm2910 extends TestableCircuit @@ -19,6 +22,8 @@ public interface TestableAm2910 extends TestableCircuit void set_OE(String val_1_bit); + void setDirectly(Register r, String val_X_bit); + String getY(); String get_FULL(); @@ -29,8 +34,27 @@ public interface TestableAm2910 extends TestableCircuit String get_VECT(); + String getDirectly(Register r); + enum Am2910_Inst { JZ, CJS, JMAP, CJP, PUSH, JSRP, CJV, JRP, RFCT, RPCT, CRTN, CJPP, LDCT, LOOP, CONT, TWB; } + + enum Register + { + S_0, S_1, S_2, S_3, S_4, SP, PC, REG_COUNT; + + public static Stream stream() + { + return Arrays.stream(values()); + } + + public int size() + { + if (this == SP) + return 3; + return 12; + } + } } diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java index f3686aa2..8b2cddf4 100644 --- a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java +++ b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java @@ -1,12 +1,9 @@ package net.mograsim.logic.model.am2900.am2910; -import org.junit.Test; - import net.mograsim.logic.core.components.BitDisplay; import net.mograsim.logic.core.components.ManualSwitch; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.model.am2900.TestEnvironmentHelper; import net.mograsim.logic.model.am2900.TestEnvironmentHelper.DebugState; import net.mograsim.logic.model.model.components.GUIComponent; @@ -22,13 +19,13 @@ public class TestableAm2910Impl implements TestableAm2910 private ManualSwitch D; private ManualSwitch _CC; private ManualSwitch _CCEN; - private ManualSwitch _RDL; + private ManualSwitch _RLD; private ManualSwitch _OE; private BitDisplay _FULL; private BitDisplay Y; private BitDisplay _PL, _MAP, _VECT; - private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "GUIAm2910"); + private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "file:components/am2910/GUIAm2910.json"); @Override public void setup() @@ -84,7 +81,7 @@ public class TestableAm2910Impl implements TestableAm2910 @Override public void set_RLD(String val_1_bit) { - _RDL.setState(BitVector.parse(val_1_bit)); + _RLD.setState(BitVector.parse(val_1_bit)); } @Override @@ -93,6 +90,12 @@ public class TestableAm2910Impl implements TestableAm2910 _OE.setState(BitVector.parse(val_1_bit)); } + @Override + public void setDirectly(Register r, String val_X_bit) + { + am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_X_bit)); + } + @Override public String getY() { @@ -123,4 +126,30 @@ public class TestableAm2910Impl implements TestableAm2910 return _VECT.getDisplayedValue().toString(); } + @Override + public String getDirectly(Register r) + { + return am2901.getHighLevelState(regToStateID(r)).toString(); + } + + private static String regToStateID(Register r) + { + switch (r) + { + case S_0: + case S_1: + case S_2: + case S_3: + case S_4: + return "stack.c" + BitVector.from(r.ordinal(), 3); + case SP: + return "sp.q"; + case PC: + return "mupc.q"; + case REG_COUNT: + return "r.q"; + default: + throw new IllegalArgumentException("unknown: " + r); + } + } }