Added first test structures for Am2904 and Am2910
authorChristian Femers <femers@in.tum.de>
Fri, 23 Aug 2019 02:39:21 +0000 (04:39 +0200)
committerChristian Femers <femers@in.tum.de>
Fri, 23 Aug 2019 02:39:21 +0000 (04:39 +0200)
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904Impl.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java [new file with mode: 0644]

diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904.java
new file mode 100644 (file)
index 0000000..6cad170
--- /dev/null
@@ -0,0 +1,217 @@
+package net.mograsim.logic.model.am2900.am2904;\r
+\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import net.mograsim.logic.model.am2900.TestableCircuit;\r
+\r
+public interface TestableAm2904 extends TestableCircuit\r
+{\r
+\r
+       void setInstruction(Am2904_Inst inst);\r
+\r
+       void setCarry(Am2904_Carry carry);\r
+\r
+       void setShiftCode(String val_4_bit);\r
+\r
+       void setI10(Am2904_ShiftDir dir);\r
+\r
+       void setCX(String val_1_bit);\r
+\r
+       void setY3(String val_1_bit);\r
+\r
+       void setIZ(String val_1_bit);\r
+\r
+       void setIC(String val_1_bit);\r
+\r
+       void setIOVR(String val_1_bit);\r
+\r
+       void setIN(String val_1_bit);\r
+\r
+       default void setI(String z_c_ovr_n)\r
+       {\r
+               setIZ(z_c_ovr_n.substring(0, 1));\r
+               setIC(z_c_ovr_n.substring(1, 2));\r
+               setIOVR(z_c_ovr_n.substring(2, 3));\r
+               setIN(z_c_ovr_n.substring(3, 4));\r
+       }\r
+\r
+       void set_CEM(String val_1_bit);\r
+\r
+       void set_CEµ(String val_1_bit);\r
+\r
+       void set_OEY(String val_1_bit);\r
+\r
+       void set_OECT(String val_1_bit);\r
+\r
+       void set_SE(String val_1_bit);\r
+\r
+       void set_EZ(String val_1_bit);\r
+\r
+       void set_EC(String val_1_bit);\r
+\r
+       void set_EOVR(String val_1_bit);\r
+\r
+       void set_EN(String val_1_bit);\r
+\r
+       default void set_E(String z_c_ovr_n)\r
+       {\r
+               set_EZ(z_c_ovr_n.substring(0, 1));\r
+               set_EC(z_c_ovr_n.substring(1, 2));\r
+               set_EOVR(z_c_ovr_n.substring(2, 3));\r
+               set_EN(z_c_ovr_n.substring(3, 4));\r
+       }\r
+\r
+       void setSIO0(String val_1_bit);\r
+\r
+       void setSIO3(String val_1_bit);\r
+\r
+       void setQIO0(String val_1_bit);\r
+\r
+       void setQIO3(String val_1_bit);\r
+\r
+       String getC0();\r
+\r
+       String getCT();\r
+\r
+       String getY3();\r
+\r
+       String getSIO0();\r
+\r
+       String getSIO3();\r
+\r
+       String getQIO0();\r
+\r
+       String getQIO3();\r
+\r
+       public enum Am2904_ShiftDir\r
+       {\r
+               RIGHT, LEFT;\r
+       }\r
+\r
+       public enum Am2904_Carry\r
+       {\r
+               CI0, CI1, CX, USE_SR;\r
+       }\r
+\r
+       /**\r
+        * Pattern:<br>\r
+        * [microSR]_[machineSR]_[condCodeSource]_[condCode]<br>\r
+        * <ul>\r
+        * <li>Load = load from I inputs (Am2904s)</li>\r
+        * <li>condCodeSource = µ, M, I (and a special case: I and M)</li>\r
+        * <li>condCode = the boolean term defining the CT output</li>\r
+        * </ul>\r
+        */\r
+       public enum Am2904_Inst\r
+       {\r
+               // @formatter:off\r
+               LoadM_LoadY_µ_NxorOVRorZ(0_00),\r
+               Set_Set_µ_NxnorOVRornotZ(0_01),\r
+               Swap_Swap_µ_NxorOVR(0_02),\r
+               Reset_Reset_µ_NxnorOVR(0_03),\r
+               Load_LoadForShiftThroughOvr_µ_Z(0_04),\r
+               Load_Invert_µ_notZ(0_05),\r
+               LoadOvrRetain_Load_µ_OVR(0_06),\r
+               LoadOvrRetain_Load_µ_notOVR(0_07),\r
+               ResetZ_LoadCarryInvert_µ_CorZ(0_10),\r
+               SetZ_LoadCarryInvert_µ_notCandnotZ(0_11),\r
+               ResetC_Load_µ_C(0_12),\r
+               SetC_Load_µ_notC(0_13),\r
+               ResetN_Load_µ_notCorZ(0_14),\r
+               SetN_Load_µ_CandnotZ(0_15),\r
+               ResetOvr_Load_IM_NxorN(0_16),\r
+               SetOvr_Load_IM_NxnorN(0_17),\r
+               Load_Load_µ_NxorOVRorZ(0_20),\r
+               Load_Load_µ_NxnorOVRornotZ(0_21),\r
+               Load_Load_µ_NxorOVR(0_22),\r
+               Load_Load_µ_NxnorOVR(0_23),\r
+               Load_Load_µ_Z(0_24),\r
+               Load_Load_µ_notZ(0_25),\r
+               Load_Load_µ_OVR(0_26),\r
+               Load_Load_µ_notOVR(0_27),\r
+               LoadCarryInvert_LoadCarryInvert_µ_CorZ(0_30),\r
+               LoadCarryInvert_LoadCarryInvert_µ_notCandnotZ(0_31),\r
+               Load_Load_µ_C(0_32),\r
+               Load_Load_µ_notC(0_33),\r
+               Load_Load_µ_notCorZ(0_34),\r
+               Load_Load_µ_CandnotZ(0_35),\r
+               Load_Load_µ_N(0_36),\r
+               Load_Load_µ_notN(0_37),\r
+               Load_Load_M_NxorOVRorZ(0_40),\r
+               Load_Load_M_NxnorOVRornotZ(0_41),\r
+               Load_Load_M_NxorOVR(0_42),\r
+               Load_Load_M_NxnorOVR(0_43),\r
+               Load_Load_M_Z(0_44),\r
+               Load_Load_M_notZ(0_45),\r
+               Load_Load_M_OVR(0_46),\r
+               Load_Load_M_notOVR(0_47),\r
+               LoadCarryInvert_LoadCarryInvert_M_CorZ(0_50),\r
+               LoadCarryInvert_LoadCarryInvert_M_notCandnotZ(0_51),\r
+               Load_Load_M_C(0_52),\r
+               Load_Load_M_notC(0_53),\r
+               Load_Load_M_notCorZ(0_54),\r
+               Load_Load_M_CandnotZ(0_55),\r
+               Load_Load_M_N(0_56),\r
+               Load_Load_M_notN(0_57),\r
+               Load_Load_I_NxorOVRorZ(0_60),\r
+               Load_Load_I_NxnorOVRornotZ(0_61),\r
+               Load_Load_I_NxorOVR(0_62),\r
+               Load_Load_I_NxnorOVR(0_63),\r
+               Load_Load_I_Z(0_64),\r
+               Load_Load_I_notZ(0_65),\r
+               Load_Load_I_OVR(0_66),\r
+               Load_Load_I_notOVR(0_67),\r
+               LoadCarryInvert_LoadCarryInvert_I_notCorZ(0_70),\r
+               LoadCarryInvert_LoadCarryInvert_I_CandnotZ(0_71),\r
+               Load_Load_I_C(0_72),\r
+               Load_Load_I_notC(0_73),\r
+               Load_Load_I_notCorZ(0_74),\r
+               Load_Load_I_CandnotZ(0_75),\r
+               Load_Load_I_N(0_76),\r
+               Load_Load_I_notN(0_77);\r
+               // @formatter:on\r
+\r
+               public final int code;\r
+\r
+               private Am2904_Inst(int code)\r
+               {\r
+                       this.code = code;\r
+               }\r
+\r
+               private static final Map<Integer, Am2904_Inst> instCodes;\r
+\r
+               static\r
+               {\r
+                       Map<Integer, Am2904_Inst> instCodesMod = new HashMap<>();\r
+                       Am2904_Inst[] vals = values();\r
+                       for (Am2904_Inst inst : vals)\r
+                       {\r
+                               assert inst.code == inst.ordinal();\r
+                               instCodesMod.put(inst.code, inst);\r
+                       }\r
+                       if (instCodesMod.size() != 64)\r
+                               throw new IllegalStateException("There must be exactly 64 Am2904 instruction codes, but was " + instCodesMod.size());\r
+                       instCodes = Collections.unmodifiableMap(instCodesMod);\r
+               }\r
+\r
+               public static Am2904_Inst getInstFor(int I_543210)\r
+               {\r
+                       Am2904_Inst inst = instCodes.get(I_543210);\r
+                       if (inst != null)\r
+                               return inst;\r
+                       throw new IllegalArgumentException("Invaild Am2904 instruction code: " + I_543210);\r
+               }\r
+\r
+               public int getBlock()\r
+               {\r
+                       return code >> 4;\r
+               }\r
+\r
+               public boolean isLoadCarryInvert()\r
+               {\r
+                       return (code & 0b001_110) == 0b001_000;\r
+               }\r
+       }\r
+}\r
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904Impl.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2904/TestableAm2904Impl.java
new file mode 100644 (file)
index 0000000..4b2408c
--- /dev/null
@@ -0,0 +1,237 @@
+package net.mograsim.logic.model.am2900.am2904;\r
+\r
+public class TestableAm2904Impl implements TestableAm2904\r
+{\r
+\r
+       @Override\r
+       public void setup()\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public Result run()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public void clockOn(boolean isClockOn)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setInstruction(Am2904_Inst inst)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setCarry(Am2904_Carry carry)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setShiftCode(String val_4_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setI10(Am2904_ShiftDir dir)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setCX(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setY3(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setIZ(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setIC(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setIOVR(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setIN(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_CEM(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_CEµ(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_OEY(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_OECT(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_SE(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_EZ(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_EC(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_EOVR(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void set_EN(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setSIO0(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setSIO3(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setQIO0(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setQIO3(String val_1_bit)\r
+       {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public String getC0()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getCT()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getY3()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getSIO0()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getSIO3()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getQIO0()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String getQIO3()\r
+       {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+}\r
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
new file mode 100644 (file)
index 0000000..940a110
--- /dev/null
@@ -0,0 +1,36 @@
+package net.mograsim.logic.model.am2900.am2910;\r
+\r
+import net.mograsim.logic.model.am2900.TestableCircuit;\r
+\r
+public interface TestableAm2910 extends TestableCircuit\r
+{\r
+\r
+       void setInstruction(Am2910_Inst inst);\r
+\r
+       void set_CCEN(String val_1_bit);\r
+\r
+       void setD(String val_12_bit);\r
+\r
+       void set_CC(String val_1_bit);\r
+\r
+       void setCI(String val_1_bit);\r
+\r
+       void set_RLD(String val_1_bit);\r
+\r
+       void set_OE(String val_1_bit);\r
+\r
+       String getY();\r
+\r
+       String get_FULL();\r
+\r
+       String get_PL();\r
+\r
+       String get_MAP();\r
+\r
+       String get_VECT();\r
+\r
+       public enum Am2910_Inst\r
+       {\r
+               JZ, CJS, JMAP, CJP, PUSH, JSRP, CJV, JRP, RFCT, RPCT, CRTN, CJPP, LDCT, LOOP, CONT, TWB;\r
+       }\r
+}\r
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
new file mode 100644 (file)
index 0000000..513bc82
--- /dev/null
@@ -0,0 +1,126 @@
+package net.mograsim.logic.model.am2900.am2910;\r
+\r
+import org.junit.Test;\r
+\r
+import net.mograsim.logic.core.components.BitDisplay;\r
+import net.mograsim.logic.core.components.ManualSwitch;\r
+import net.mograsim.logic.core.timeline.Timeline;\r
+import net.mograsim.logic.core.types.BitVector;\r
+import net.mograsim.logic.core.types.BitVectorFormatter;\r
+import net.mograsim.logic.model.am2900.TestEnvironmentHelper;\r
+import net.mograsim.logic.model.am2900.TestEnvironmentHelper.DebugState;\r
+import net.mograsim.logic.model.model.components.GUIComponent;\r
+\r
+public class TestableAm2910Impl implements TestableAm2910\r
+{\r
+\r
+       private GUIComponent am2901;\r
+       private Timeline timeline;\r
+       private ManualSwitch I;\r
+       private ManualSwitch C;\r
+       private ManualSwitch CI;\r
+       private ManualSwitch D;\r
+       private ManualSwitch _CC;\r
+       private ManualSwitch _CCEN;\r
+       private ManualSwitch _RDL;\r
+       private ManualSwitch _OE;\r
+       private BitDisplay _FULL;\r
+       private BitDisplay Y;\r
+       private BitDisplay _PL, _MAP, _VECT;\r
+\r
+       private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "GUIAm2910");\r
+\r
+       @Override\r
+       public void setup()\r
+       {\r
+               testHelper.setup(DebugState.NO_DEBUG);\r
+       }\r
+\r
+       @Override\r
+       public Result run()\r
+       {\r
+               return testHelper.run();\r
+       }\r
+\r
+       @Override\r
+       public void clockOn(boolean isClockOn)\r
+       {\r
+               if (isClockOn)\r
+                       C.switchFullOn();\r
+               else\r
+                       C.switchFullOff();\r
+       }\r
+\r
+       @Override\r
+       public void setInstruction(Am2910_Inst inst)\r
+       {\r
+               I.setState(BitVector.of(inst.ordinal(), 4));\r
+       }\r
+\r
+       @Override\r
+       public void set_CCEN(String val_1_bit)\r
+       {\r
+               _CCEN.setState(BitVector.parse(val_1_bit));\r
+       }\r
+\r
+       @Override\r
+       public void setD(String val_12_bit)\r
+       {\r
+               D.setState(BitVector.parse(val_12_bit));\r
+       }\r
+\r
+       @Override\r
+       public void set_CC(String val_1_bit)\r
+       {\r
+               _CC.setState(BitVector.parse(val_1_bit));\r
+       }\r
+\r
+       @Override\r
+       public void setCI(String val_1_bit)\r
+       {\r
+               CI.setState(BitVector.parse(val_1_bit));\r
+       }\r
+\r
+       @Override\r
+       public void set_RLD(String val_1_bit)\r
+       {\r
+               _RDL.setState(BitVector.parse(val_1_bit));\r
+       }\r
+\r
+       @Override\r
+       public void set_OE(String val_1_bit)\r
+       {\r
+               _OE.setState(BitVector.parse(val_1_bit));\r
+       }\r
+\r
+       @Override\r
+       public String getY()\r
+       {\r
+               return Y.getDisplayedValue().toString();\r
+       }\r
+\r
+       @Override\r
+       public String get_FULL()\r
+       {\r
+               return _FULL.getDisplayedValue().toString();\r
+       }\r
+\r
+       @Override\r
+       public String get_PL()\r
+       {\r
+               return _PL.getDisplayedValue().toString();\r
+       }\r
+\r
+       @Override\r
+       public String get_MAP()\r
+       {\r
+               return _MAP.getDisplayedValue().toString();\r
+       }\r
+\r
+       @Override\r
+       public String get_VECT()\r
+       {\r
+               return _VECT.getDisplayedValue().toString();\r
+       }\r
+\r
+}\r