Improved addition loops in GUIAm2910RegCntr and GUIinc12
[Mograsim.git] / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / am2900 / components / GUIinc12.java
index 2092544..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;
@@ -15,6 +14,7 @@ import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedGUIComponent;
 import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
 import net.mograsim.logic.model.snippets.symbolrenderers.PinNamesSymbolRenderer.PinNamesParams.Position;
 
 public class GUIinc12 extends SimpleRectangularHardcodedGUIComponent
@@ -50,23 +50,16 @@ 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);
                return null;
        }
 
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIinc12.class.getCanonicalName(), (m, p, n) -> new GUIinc12(m, n));
+       }
 }
\ No newline at end of file