Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / model / am2900 / am2904 / TestableAm2904Impl.java
index e36ca6d..b43f130 100644 (file)
@@ -1,32 +1,36 @@
 package net.mograsim.logic.model.am2900.am2904;
 
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.components.CoreBitDisplay;
+import net.mograsim.logic.core.components.CoreManualSwitch;
 import net.mograsim.logic.core.types.Bit;
 import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.model.am2900.util.SwitchWithDisplay;
 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper;
 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper.DebugState;
-import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.ModelComponent;
 
 public class TestableAm2904Impl implements TestableAm2904
 {
 
-       private GUIComponent am2904;
-       private ManualSwitch I;
-       private ManualSwitch C;
-       private ManualSwitch Cx;
-       private ManualSwitch IC, IN, IOVR, IZ;
-       private ManualSwitch _CEM, _CEmu;
-       private ManualSwitch _EC, _EN, _EOVR, _EZ;
-       private ManualSwitch _OECT, _OEY;
-       private ManualSwitch _SE;
-       private BitDisplay C0;
-       private BitDisplay CT;
+       private ModelComponent am2904;
+       private CoreManualSwitch I_5_0;
+       private CoreManualSwitch I_6_9;
+       private CoreManualSwitch I_10;
+       private CoreManualSwitch I_11_12;
+       private CoreManualSwitch C;
+       private CoreManualSwitch Cx;
+       private CoreManualSwitch IC, IN, IOVR, IZ;
+       private CoreManualSwitch _CEM, _CEmu;
+       private CoreManualSwitch _EC, _EN, _EOVR, _EZ;
+       private CoreManualSwitch _OECT, _OEY;
+       private CoreManualSwitch _SE;
+       private CoreBitDisplay C0;
+       private CoreBitDisplay CT;
        private SwitchWithDisplay SIO0, SIOn, QIO0, QIOn;
        private SwitchWithDisplay YC, YN, YOVR, YZ;
 
-       private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "file:components/am2904/GUIAm2904.json");
+       private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this,
+                       "resloader:Am2900Loader:jsonres:net/mograsim/logic/model/am2900/am2904/TestableAm2904.json");
 
        @Override
        public void setup()
@@ -52,33 +56,25 @@ public class TestableAm2904Impl implements TestableAm2904
        @Override
        public void setInstruction(Am2904_Inst inst)
        {
-               var old = I.getValues();
-               var newPart = BitVector.from(inst.ordinal(), 6);
-               I.setState(old.subVector(0, 7).concat(newPart));
+               I_5_0.setState(BitVector.from(inst.ordinal(), 6));
        }
 
        @Override
        public void setShiftCode(String val_4_bit)
        {
-               var old = I.getValues();
-               var newPart = BitVector.parse(val_4_bit);
-               I.setState(old.subVector(0, 3).concat(newPart).concat(old.subVector(7)));
+               I_6_9.setState(BitVector.parse(val_4_bit));
        }
 
        @Override
        public void setI10(Am2904_ShiftDir dir)
        {
-               var old = I.getValues();
-               var newPart = BitVector.from(dir.ordinal(), 1);
-               I.setState(old.subVector(0, 2).concat(newPart).concat(old.subVector(3)));
+               I_10.setState(BitVector.from(dir.ordinal(), 1));
        }
 
        @Override
        public void setCarry(Am2904_Carry carry)
        {
-               var old = I.getValues();
-               var newPart = BitVector.from(carry.ordinal(), 2);
-               I.setState(newPart.concat(old.subVector(2)));
+               I_11_12.setState(BitVector.from(carry.ordinal(), 2));
        }
 
        @Override
@@ -88,14 +84,14 @@ public class TestableAm2904Impl implements TestableAm2904
        }
 
        @Override
-       public void setY(String ovr_n_c_z)
+       public void setY(String z_c_n_ovr)
        {
-               var bv = BitVector.parse(ovr_n_c_z);
-               // correct order apparently unknown :/
-               YOVR.setState(bv.getLSBit(3).toVector());
-               YN.setState(bv.getLSBit(2).toVector());
-               YC.setState(bv.getLSBit(1).toVector());
-               YZ.setState(bv.getLSBit(0).toVector());
+               var bv = BitVector.parse(z_c_n_ovr);
+               // correct order apparently unknown, most likely Z-C-N-OVR
+               YZ.setState(bv.getLSBit(3).toVector());
+               YC.setState(bv.getLSBit(2).toVector());
+               YN.setState(bv.getLSBit(1).toVector());
+               YOVR.setState(bv.getLSBit(0).toVector());
        }
 
        @Override
@@ -204,10 +200,16 @@ public class TestableAm2904Impl implements TestableAm2904
        public void setDirectly(Register r, String val_1_bit)
        {
                var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
-               bv = bv.withBitChanged(3 - r.ordinal() % 4, b -> Bit.parse(val_1_bit));
+               bv = bv.withBitChanged(r.ordinal() % 4, b -> Bit.parse(val_1_bit));
                am2904.setHighLevelState(regToStateID(r), bv);
        }
 
+       @Override
+       public void setDirectly(CompleteStatus r, String z_c_n_ovr)
+       {
+               am2904.setHighLevelState(regToStateID(r), BitVector.parse(z_c_n_ovr));
+       }
+
        @Override
        public String getC0()
        {
@@ -223,11 +225,11 @@ public class TestableAm2904Impl implements TestableAm2904
        @Override
        public String getY()
        {
-               // correct order apparently unknown :/
-               var y3 = YOVR.getDisplayedValue();
-               var y2 = YN.getDisplayedValue();
-               var y1 = YC.getDisplayedValue();
-               var y0 = YZ.getDisplayedValue();
+               // correct order apparently unknown, most likely Z-C-N-OVR
+               var y3 = YZ.getDisplayedValue();
+               var y2 = YC.getDisplayedValue();
+               var y1 = YN.getDisplayedValue();
+               var y0 = YOVR.getDisplayedValue();
                return y3.concat(y2).concat(y1).concat(y0).toString();
        }
 
@@ -259,14 +261,28 @@ public class TestableAm2904Impl implements TestableAm2904
        public String getDirectly(Register r)
        {
                var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
-               return bv.getLSBit(r.ordinal() % 4).getSymbol();
+               return bv.getMSBit(r.ordinal() % 4).getSymbol();
+       }
+
+       @Override
+       public String getDirectly(CompleteStatus r)
+       {
+               var bv = (BitVector) am2904.getHighLevelState(regToStateID(r));
+               return bv.toString();
        }
 
        private static String regToStateID(Register r)
        {
-               if (r.ordinal() > 3)
-                       return "msr.q";
-               return "musr.q";
+               if (r.ordinal() < 4)
+                       return "musr.q";
+               return "msr.q";
+       }
+
+       private static String regToStateID(CompleteStatus r)
+       {
+               if (r == CompleteStatus.micro)
+                       return "musr.q";
+               return "msr.q";
        }
 
        @Override