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=0885062ad73925732b1a4e4c79f910dec9862fd3;hp=3b2515edac3103d65ed2db46236f870acc66a9ce;hpb=e4a201cb63e74fb7780dae482e2fc953bee58fa5;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 3b2515ed..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,17 +1,19 @@ 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.GUIAndGate; -import net.mograsim.logic.ui.model.components.GUIBitDisplay; -import net.mograsim.logic.ui.model.components.GUIManualSwitch; -import net.mograsim.logic.ui.model.components.GUINotGate; -import net.mograsim.logic.ui.model.components.SimpleRectangularSubmodelComponent; -import net.mograsim.logic.ui.model.components.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.wires.ConnectionPoint; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.atomic.GUIAndGate; +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.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 @@ -23,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); @@ -46,24 +48,34 @@ public class Am2901Testbench not2.moveTo(80, -20); not3.moveTo(110, -20); and.moveTo(135, -30); - ConnectionPoint last = and.getPin("Y"); + Pin last = and.getPin("Y"); + + // 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 < comp.getInputPinNames().size(); i++) + for (int i = 0; i < inputPinNames.size(); i++) { double x = 55 + 70 * (i % 2); double y = 10 * i; WireCrossPoint wcp = new WireCrossPoint(model, 1); - GUIdff 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); @@ -71,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); } }