SimpleLogicUIStandalone now supports a pre-run hook
[Mograsim.git] / net.mograsim.logic.model.am2900 / src / net / mograsim / logic / model / examples / Am2910Testbench.java
index e7b7e8c..132b913 100644 (file)
@@ -1,7 +1,10 @@
 package net.mograsim.logic.model.examples;
 
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.GUIComponent;
 import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
@@ -13,7 +16,7 @@ public class Am2910Testbench
 {
        public static void main(String[] args)
        {
-               SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create);
+               SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create, Am2910Testbench::beforeRun);
        }
 
        @SuppressWarnings("unused") // for GUIWires being created
@@ -27,6 +30,7 @@ public class Am2910Testbench
                GUIManualSwitch _CCEN = new GUIManualSwitch(model, 1, "_CCEN");
                GUIManualSwitch I = new GUIManualSwitch(model, 4, "I");
                GUIManualSwitch CI = new GUIManualSwitch(model, 1, "CI");
+               GUIManualSwitch _OE = new GUIManualSwitch(model, 1, "_OE");
                GUIBitDisplay _FULL = new GUIBitDisplay(model, 1, "_FULL");
                GUIBitDisplay _PL = new GUIBitDisplay(model, 1, "_PL");
                GUIBitDisplay _MAP = new GUIBitDisplay(model, 1, "_MAP");
@@ -45,6 +49,7 @@ public class Am2910Testbench
                _MAP.moveTo(30, 105);
                _VECT.moveTo(30, 125);
                Y.moveTo(40, 65);
+               _OE.moveTo(60, 85);
 
                new GUIWire(model, C.getOutputPin(), am2910.getPin("C"), new Point(60, -27.5));
                new GUIWire(model, D.getOutputPin(), am2910.getPin("D"), new Point(36, -12.5));
@@ -58,5 +63,18 @@ public class Am2910Testbench
                new GUIWire(model, am2910.getPin("_MAP"), _MAP.getInputPin(), new Point(19, 112.5));
                new GUIWire(model, am2910.getPin("_VECT"), _VECT.getInputPin(), new Point(25, 132.5));
                new GUIWire(model, am2910.getPin("Y"), Y.getInputPin(), new Point(38, 72.5));
+               new GUIWire(model, am2910.getPin("_OE"), _OE.getOutputPin());
+       }
+
+       public static void beforeRun(VisualisationObjects vis)
+       {
+               vis.model.getComponentsByName().values().forEach(c ->
+               {
+                       if (c instanceof GUIManualSwitch)
+                       {
+                               GUIManualSwitch cCasted = (GUIManualSwitch) c;
+                               cCasted.setHighLevelState("out", BitVector.of(Bit.ZERO, cCasted.logicWidth));
+                       }
+               });
        }
 }
\ No newline at end of file