X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui.am2900%2Ftest%2Fnet%2Fmograsim%2Flogic%2Fui%2Fam2900%2FAm2901Testbench.java;h=c35402b10dc535bdbfa2b9887dbbb3b70368b033;hb=69cb6725ef670328959d55649257ded6ac924b33;hp=0a06914bbeaf25dfa3ec978e717a93a075e6dc08;hpb=a2eef1d1616d03af5b464f347f6176ea9d2cc75e;p=Mograsim.git diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java index 0a06914b..c35402b1 100644 --- a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java +++ b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java @@ -1,5 +1,8 @@ package net.mograsim.logic.ui.am2900; +import java.util.ArrayList; +import java.util.List; + import net.mograsim.logic.ui.SimpleLogicUIStandalone; import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.components.GUIComponent; @@ -8,11 +11,9 @@ import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay; import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch; import net.mograsim.logic.ui.model.components.atomic.GUINotGate; import net.mograsim.logic.ui.model.components.atomic.TextComponent; -import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff; -import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901; -import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.model.wires.WireCrossPoint; +import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator; import net.mograsim.logic.ui.util.ModellingTool; public class Am2901Testbench @@ -24,7 +25,7 @@ public class Am2901Testbench public static void createTestbench(ViewModelModifiable model) { - SimpleRectangularSubmodelComponent comp = new GUIAm2901(model); + GUIComponent comp = IndirectGUIComponentCreator.createComponent(model, "GUIAm2901"); ModellingTool tool = ModellingTool.createFor(model); comp.moveTo(240, 0); @@ -49,22 +50,32 @@ public class Am2901Testbench and.moveTo(135, -30); Pin last = and.getPin("Y"); - for (int i = 0; i < comp.getInputPinNames().size(); i++) + // guess which pins are outputs and which are inputs + // TODO this code exists three times... but it seems too "hacky" to put it in a helper class + List inputPinNames = new ArrayList<>(); + List outputPinNames = new ArrayList<>(); + for (Pin p : comp.getPins().values()) + if (p.getRelX() == 0) + inputPinNames.add(p.name); + else + outputPinNames.add(p.name); + + for (int i = 0; i < inputPinNames.size(); i++) { double x = 55 + 70 * (i % 2); double y = 10 * i; WireCrossPoint wcp = new WireCrossPoint(model, 1); - GUIComponent d_ff = new GUIdff(model); + GUIComponent d_ff = IndirectGUIComponentCreator.createComponent(model, "GUIdff"); GUIManualSwitch sw = new GUIManualSwitch(model); tool.connect(last, wcp); tool.connect(wcp, d_ff, "C"); tool.connect(sw, d_ff, "", "D"); - tool.connect(d_ff, comp, "Q", comp.getInputPinNames().get(i)); + tool.connect(d_ff, comp, "Q", inputPinNames.get(i)); last = wcp.getPin(); - TextComponent label = new TextComponent(model, comp.getInputPinNames().get(i)); + TextComponent label = new TextComponent(model, inputPinNames.get(i)); sw.moveTo(x, y + 7.5); wcp.moveTo(160, y); @@ -72,15 +83,15 @@ public class Am2901Testbench label.moveTo(x - 25, y + 15); } - for (int i = 0; i < comp.getOutputPinNames().size(); i++) + for (int i = 0; i < outputPinNames.size(); i++) { double x = 300 + 75 * (i % 2); double y = 10 * i - 2.5; GUIBitDisplay bd = new GUIBitDisplay(model); bd.moveTo(x, y); - tool.connect(bd.getInputPin(), comp, comp.getOutputPinNames().get(i)); + tool.connect(bd.getInputPin(), comp, outputPinNames.get(i)); - TextComponent label = new TextComponent(model, comp.getOutputPinNames().get(i)); + TextComponent label = new TextComponent(model, outputPinNames.get(i)); label.moveTo(x + 50, y + 8); } }