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