Improved addition loops in GUIAm2910RegCntr and GUIinc12
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Sun, 11 Aug 2019 08:13:11 +0000 (10:13 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Sun, 11 Aug 2019 08:14:46 +0000 (10:14 +0200)
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/GUIinc12.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/am2910/GUIAm2910RegCntr.java

index 0b94583..cbd1f9f 100644 (file)
@@ -1,6 +1,5 @@
 package net.mograsim.logic.model.am2900.components;
 
-import static net.mograsim.logic.core.types.Bit.ONE;
 import static net.mograsim.logic.core.types.Bit.U;
 import static net.mograsim.logic.core.types.Bit.X;
 import static net.mograsim.logic.core.types.Bit.Z;
@@ -51,19 +50,8 @@ public class GUIinc12 extends SimpleRectangularHardcodedGUIComponent
                        for (int i = 11; i >= 0; i--)
                        {
                                Bit a = ABits[i];
-                               Bit z;
-                               if (a.isBinary() && carry.isBinary())
-                               {
-                                       boolean aBool = a == ONE;
-                                       boolean carryBool = carry == ONE;
-                                       z = aBool ^ carryBool ? ONE : ZERO;
-                                       carry = aBool && carryBool ? ONE : ZERO;
-                               } else
-                               {
-                                       carry = carry.join(a);
-                                       z = carry;
-                               }
-                               YBits[i] = z;
+                               YBits[i] = a.xor(carry);
+                               carry = a.and(carry);
                        }
                }
                readWriteEnds.get("Y").feedSignals(YBits);
index baf456a..ec228c1 100644 (file)
@@ -63,19 +63,8 @@ public class GUIAm2910RegCntr extends SimpleRectangularHardcodedGUIComponent
                                for (int i = 11; i >= 0; i--)
                                {
                                        Bit a = QC[i];
-                                       Bit z;
-                                       if (a.isBinary() && carry.isBinary())
-                                       {
-                                               boolean aBool = a == ONE;
-                                               boolean carryBool = carry == ONE;
-                                               z = !aBool ^ carryBool ? ONE : ZERO;
-                                               carry = aBool || carryBool ? ONE : ZERO;
-                                       } else
-                                       {
-                                               carry = carry.join(a);
-                                               z = carry;
-                                       }
-                                       QC[i] = z;
+                                       QC[i] = a.xnor(carry);
+                                       carry = a.or(carry);
                                }
                        }
                }