From: Fabian Stemmler Date: Sat, 13 Jul 2019 10:33:03 +0000 (+0200) Subject: Merge branch 'development' of X-Git-Url: https://mograsim.net/gitweb/?p=Mograsim.git;a=commitdiff_plain;h=47ea68ed5c444dd14864412639f6a6fd60ab8a0f Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim-2019.git into development Conflicts: net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/DeserializedSubmodelComponent.java net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/IndirectGUIComponentCreator.java --- 47ea68ed5c444dd14864412639f6a6fd60ab8a0f diff --cc net.mograsim.logic.model.editor/.classpath index 00000000,00000000..c4b0fff7 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/.classpath @@@ -1,0 -1,0 +1,11 @@@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --cc net.mograsim.logic.model.editor/.gitignore index 00000000,00000000..ae3c1726 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/.gitignore @@@ -1,0 -1,0 +1,1 @@@ ++/bin/ diff --cc net.mograsim.logic.model.editor/.project index 00000000,00000000..4f792a69 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/.project @@@ -1,0 -1,0 +1,28 @@@ ++ ++ ++ net.mograsim.logic.model.editor ++ ++ ++ ++ ++ ++ org.eclipse.jdt.core.javabuilder ++ ++ ++ ++ ++ org.eclipse.pde.ManifestBuilder ++ ++ ++ ++ ++ org.eclipse.pde.SchemaBuilder ++ ++ ++ ++ ++ ++ org.eclipse.jdt.core.javanature ++ org.eclipse.pde.PluginNature ++ ++ diff --cc net.mograsim.logic.model.editor/.settings/org.eclipse.jdt.core.prefs index 00000000,00000000..e2561585 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/.settings/org.eclipse.jdt.core.prefs @@@ -1,0 -1,0 +1,12 @@@ ++eclipse.preferences.version=1 ++org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled ++org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 ++org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve ++org.eclipse.jdt.core.compiler.compliance=11 ++org.eclipse.jdt.core.compiler.debug.lineNumber=generate ++org.eclipse.jdt.core.compiler.debug.localVariable=generate ++org.eclipse.jdt.core.compiler.debug.sourceFile=generate ++org.eclipse.jdt.core.compiler.problem.assertIdentifier=error ++org.eclipse.jdt.core.compiler.problem.enumIdentifier=error ++org.eclipse.jdt.core.compiler.release=enabled ++org.eclipse.jdt.core.compiler.source=11 diff --cc net.mograsim.logic.model.editor/META-INF/MANIFEST.MF index 00000000,00000000..40d06541 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/META-INF/MANIFEST.MF @@@ -1,0 -1,0 +1,13 @@@ ++Manifest-Version: 1.0 ++Bundle-ManifestVersion: 2 ++Bundle-Name: Editor ++Bundle-SymbolicName: net.mograsim.logic.model.editor ++Bundle-Version: 0.1.0.qualifier ++Export-Package: net.mograsim.logic.model.editor, ++ net.mograsim.logic.model.editor.handles, ++ net.mograsim.logic.model.editor.states ++Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0", ++ net.mograsim.preferences;bundle-version="0.1.0" ++Bundle-RequiredExecutionEnvironment: JavaSE-11 ++Automatic-Module-Name: net.mograsim.logic.ui ++Bundle-Vendor: Mograsim Team diff --cc net.mograsim.logic.model.editor/build.properties index 00000000,00000000..d1763276 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/build.properties @@@ -1,0 -1,0 +1,3 @@@ ++source.. = src/ ++bin.includes = META-INF/,\ ++ .,\ diff --cc net.mograsim.logic.model.editor/components/GUI_rsLatch.json index 00000000,00000000..a91b8159 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUI_rsLatch.json @@@ -1,0 -1,0 +1,222 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "_Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "_R", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "_S", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 12.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 7.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 16.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "_S" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "_R" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 35.0, ++ "y": 27.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 42.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 42.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 17.5 ++ }, ++ { ++ "x": 35.0, ++ "y": 7.5 ++ }, ++ { ++ "x": 65.0, ++ "y": 7.5 ++ }, ++ { ++ "x": 65.0, ++ "y": 12.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "_Q" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "_rsLatch", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIand.json index 00000000,00000000..58772918 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIand.json @@@ -1,0 -1,0 +1,146 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIand", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIand41.json index 00000000,00000000..973a4c9d new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIand41.json @@@ -1,0 -1,0 +1,328 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 50.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 71.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 46.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 96.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 7.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 57.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#2" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 32.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#1" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 82.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#3" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "GUIand#2", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "GUIand#3", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 112.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#3", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIand41", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIandor414.json index 00000000,00000000..5cadf0f6 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIandor414.json @@@ -1,0 -1,0 +1,487 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 90.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "C1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "C2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "C3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "C4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 37.5 ++ }, ++ "id": "GUIor_4", ++ "name": "GUIor_4#0" ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 137.5 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#0" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 112.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 142.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 137.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 152.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 187.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 172.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 212.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 182.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C1" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 12.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C2" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 52.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C3" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C4" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 87.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 72.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 142.5 ++ }, ++ { ++ "x": 70.0, ++ "y": 120.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 120.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 152.5 ++ }, ++ { ++ "x": 65.0, ++ "y": 125.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 125.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 162.5 ++ }, ++ { ++ "x": 60.0, ++ "y": 130.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 130.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 102.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIor_4#0", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 172.5 ++ }, ++ { ++ "x": 55.0, ++ "y": 135.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 135.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 112.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIor_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 42.5 ++ }, ++ { ++ "x": 75.0, ++ "y": 12.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIor_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [ ++ { ++ "x": 80.0, ++ "y": 52.5 ++ }, ++ { ++ "x": 80.0, ++ "y": 37.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIor_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIor_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [ ++ { ++ "x": 80.0, ++ "y": 72.5 ++ }, ++ { ++ "x": 80.0, ++ "y": 87.5 ++ } ++ ] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIandor414", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIdemux2.json index 00000000,00000000..5ded84b7 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIdemux2.json @@@ -1,0 -1,0 +1,511 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 40.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y00", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y11", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y10", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y01", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "S0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "S1", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 2.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 52.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#2" ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 27.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#1" ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 77.5 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#3" ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 16.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 36.5, ++ "y": 61.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 66.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 41.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S0" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 62.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 67.5 ++ }, ++ { ++ "x": 32.5, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 37.5, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 37.5, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y00" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y01" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y10" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y11" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIdemux2", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIdff.json index 00000000,00000000..55151f8b new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIdff.json @@@ -1,0 -1,0 +1,328 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "_Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "D", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.2, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 10.0 ++ }, ++ "id": "GUI_rsLatch", ++ "name": "GUI_rsLatch#0" ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 40.0 ++ }, ++ "id": "GUInand3", ++ "name": "GUInand3#0" ++ }, ++ { ++ "pos": { ++ "x": 120.0, ++ "y": 60.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 120.0, ++ "y": 30.0 ++ }, ++ "id": "GUI_rsLatch", ++ "name": "GUI_rsLatch#1" ++ }, ++ { ++ "pos": { ++ "x": 19.0, ++ "y": 64.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 99.0, ++ "y": 44.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 99.0, ++ "y": 34.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_R" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 55.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 145.0, ++ "y": 70.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 85.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 85.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_S" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_Q" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 35.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 45.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#1", ++ "pinName": "_S" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInand3#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#1", ++ "pinName": "_R" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 65.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUI_rsLatch#1", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUI_rsLatch#1", ++ "pinName": "_Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "_Q" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIdff", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIdlatch.json index 00000000,00000000..69562cea new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIdlatch.json @@@ -1,0 -1,0 +1,238 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "_Q", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "D", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "E", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 7.5 ++ }, ++ "id": "GUI_rsLatch", ++ "name": "GUI_rsLatch#0" ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "E" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 25.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_S" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_R" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 40.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUI_rsLatch#0", ++ "pinName": "_Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "_Q" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIdlatch", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIdlatch4.json index 00000000,00000000..29f4ac0f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIdlatch4.json @@@ -1,0 -1,0 +1,328 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 50.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Q1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Q2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Q3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Q4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 71.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 46.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 96.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 32.5 ++ }, ++ "id": "GUIdlatch", ++ "name": "GUIdlatch#1" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 7.5 ++ }, ++ "id": "GUIdlatch", ++ "name": "GUIdlatch#0" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 82.5 ++ }, ++ "id": "GUIdlatch", ++ "name": "GUIdlatch#3" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 57.5 ++ }, ++ "id": "GUIdlatch", ++ "name": "GUIdlatch#2" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 112.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#3", ++ "pinName": "E" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#2", ++ "pinName": "E" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#1", ++ "pinName": "E" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#0", ++ "pinName": "E" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#0", ++ "pinName": "D" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#1", ++ "pinName": "D" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#2", ++ "pinName": "D" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch#3", ++ "pinName": "D" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch#0", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch#1", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch#2", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch#3", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIdlatch4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIfulladder.json index 00000000,00000000..dc4c6162 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIfulladder.json @@@ -1,0 -1,0 +1,188 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 30.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Z", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 57.5, ++ "y": 40.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 5.0, ++ "y": 40.0 ++ }, ++ "id": "GUIhalfadder", ++ "name": "GUIhalfadder#0" ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 7.5 ++ }, ++ "id": "GUIhalfadder", ++ "name": "GUIhalfadder#1" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A" ++ }, ++ "pin2": { ++ "compName": "GUIhalfadder#1", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "GUIhalfadder#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "GUIhalfadder#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIhalfadder#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIhalfadder#1", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIhalfadder#0", ++ "pinName": "_Z" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIhalfadder#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIhalfadder#1", ++ "pinName": "_Z" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 82.5, ++ "y": 22.5 ++ }, ++ { ++ "x": 82.5, ++ "y": 35.0 ++ }, ++ { ++ "x": 52.5, ++ "y": 35.0 ++ }, ++ { ++ "x": 52.5, ++ "y": 45.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Z" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIfulladder", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIhalfadder.json index 00000000,00000000..761d6ce1 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIhalfadder.json @@@ -1,0 -1,0 +1,317 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "_Z", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "_Z" ++ }, ++ "path": [ ++ { ++ "x": 80.0, ++ "y": 25.0 ++ }, ++ { ++ "x": 80.0, ++ "y": 37.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 62.5, ++ "y": 12.5 ++ }, ++ { ++ "x": 62.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 62.5, ++ "y": 37.5 ++ }, ++ { ++ "x": 62.5, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIhalfadder", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUImux1.json index 00000000,00000000..7ce90023 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUImux1.json @@@ -1,0 -1,0 +1,230 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 30.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "S0", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 22.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 7.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 60.0, ++ "y": 30.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 21.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 47.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S0" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 52.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUImux1", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUImux1_4.json index 00000000,00000000..21e2f213 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUImux1_4.json @@@ -1,0 -1,0 +1,468 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 90.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I0_1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "I0_3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "I1_2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I0_2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "I1_1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "I1_4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "S0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "I0_4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "I1_3", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 112.5 ++ }, ++ "id": "GUImux1", ++ "name": "GUImux1#3" ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 46.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 7.5 ++ }, ++ "id": "GUImux1", ++ "name": "GUImux1#0" ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 81.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 77.5 ++ }, ++ "id": "GUImux1", ++ "name": "GUImux1#2" ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 42.5 ++ }, ++ "id": "GUImux1", ++ "name": "GUImux1#1" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S0" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "S0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0_1" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1_1" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 137.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1#1", ++ "pinName": "S0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0_2" ++ }, ++ "pin2": { ++ "compName": "GUImux1#1", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 62.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1_2" ++ }, ++ "pin2": { ++ "compName": "GUImux1#1", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 162.5 ++ }, ++ { ++ "x": 15.0, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1#2", ++ "pinName": "S0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0_3" ++ }, ++ "pin2": { ++ "compName": "GUImux1#2", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 87.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1_3" ++ }, ++ "pin2": { ++ "compName": "GUImux1#2", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 187.5 ++ }, ++ { ++ "x": 20.0, ++ "y": 102.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1#3", ++ "pinName": "S0" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 117.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0_4" ++ }, ++ "pin2": { ++ "compName": "GUImux1#3", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 112.5 ++ }, ++ { ++ "x": 5.0, ++ "y": 127.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1_4" ++ }, ++ "pin2": { ++ "compName": "GUImux1#3", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 212.5 ++ }, ++ { ++ "x": 25.0, ++ "y": 137.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUImux1_4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUInand3.json index 00000000,00000000..b3a6300f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUInand3.json @@@ -1,0 -1,0 +1,204 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 30.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 62.5, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 57.5, ++ "y": 25.0 ++ }, ++ { ++ "x": 57.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 62.5 ++ }, ++ { ++ "x": 60.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUInand3", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUInot4.json index 00000000,00000000..7d575c84 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUInot4.json @@@ -1,0 -1,0 +1,374 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 40.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 77.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 30.0, ++ "y": 52.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 86.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 61.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUInot4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIor4.json index 00000000,00000000..d4bcd579 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIor4.json @@@ -1,0 -1,0 +1,525 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 40.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.2, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 65.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 165.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 115.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 74.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 174.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 124.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 104.0, ++ "y": 149.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 104.0, ++ "y": 49.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 140.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 140.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 40.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 110.0, ++ "y": 140.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 110.0, ++ "y": 40.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 70.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 120.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 170.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 80.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 130.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 45.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 55.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 145.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 155.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#8", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIor4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIor_4.json index 00000000,00000000..86b44135 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIor_4.json @@@ -1,0 -1,0 +1,846 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 80.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "B4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 77.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 52.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 77.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 52.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 86.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 61.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 136.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 111.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 186.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 161.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 127.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 102.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 177.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 152.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 107.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 117.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 132.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 142.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 157.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 167.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 182.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 192.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 12.5 ++ }, ++ { ++ "x": 40.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 112.5 ++ }, ++ { ++ "x": 45.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 40.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 137.5 ++ }, ++ { ++ "x": 50.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 62.5 ++ }, ++ { ++ "x": 40.0, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 162.5 ++ }, ++ { ++ "x": 55.0, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 87.5 ++ }, ++ { ++ "x": 40.0, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 187.5 ++ }, ++ { ++ "x": 60.0, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#8", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#9", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#10", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#11", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIor_4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIram2.json index 00000000,00000000..3cb8583f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIram2.json @@@ -1,0 -1,0 +1,2829 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 90.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "QA1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "QB2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "QB1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "QA3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 75.0 ++ }, ++ "name": "QB4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "QA2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 65.0 ++ }, ++ "name": "QB3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "QA4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "B0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "WE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.1, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 649.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 639.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 129.0, ++ "y": 329.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#16", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 659.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 119.0, ++ "y": 349.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#18", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 124.0, ++ "y": 339.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#17", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 114.0, ++ "y": 359.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#19", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 104.0, ++ "y": 164.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 109.0, ++ "y": 154.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 94.0, ++ "y": 184.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 99.0, ++ "y": 174.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 649.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 549.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 809.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 749.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 489.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 479.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 499.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 629.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 509.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 735.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#5" ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 435.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#3" ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 585.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#4" ++ }, ++ { ++ "pos": { ++ "x": 235.0, ++ "y": 635.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#1" ++ }, ++ { ++ "pos": { ++ "x": 235.0, ++ "y": 785.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#2" ++ }, ++ { ++ "pos": { ++ "x": 235.0, ++ "y": 485.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#0" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 475.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#1" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 325.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#0" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 775.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#3" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 625.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#2" ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 325.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#2" ++ }, ++ { ++ "pos": { ++ "x": 119.0, ++ "y": 799.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#30", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 114.0, ++ "y": 809.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#31", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 130.0, ++ "y": 150.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#0" ++ }, ++ { ++ "pos": { ++ "x": 235.0, ++ "y": 375.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#1" ++ }, ++ { ++ "pos": { ++ "x": 124.0, ++ "y": 639.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#25", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 129.0, ++ "y": 629.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#24", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 114.0, ++ "y": 659.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#27", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 119.0, ++ "y": 649.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#26", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 124.0, ++ "y": 789.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#29", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 129.0, ++ "y": 779.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#28", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 150.0 ++ }, ++ "id": "GUIdemux2", ++ "name": "GUIdemux2#1" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 45.0 ++ }, ++ "id": "GUIdemux2", ++ "name": "GUIdemux2#0" ++ }, ++ { ++ "pos": { ++ "x": 124.0, ++ "y": 489.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#21", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 129.0, ++ "y": 479.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#20", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 114.0, ++ "y": 509.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#23", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 119.0, ++ "y": 499.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#22", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A0" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#0", ++ "pinName": "S0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#0", ++ "pinName": "S1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 150.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B0" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#1", ++ "pinName": "S0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 250.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 155.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#1", ++ "pinName": "S1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 350.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 165.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y00" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y01" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y10" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y11" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "WE" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 450.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 300.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 300.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 195.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 185.0, ++ "y": 155.0 ++ }, ++ { ++ "x": 185.0, ++ "y": 250.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 250.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 370.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 165.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 245.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 245.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 520.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 175.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 240.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 240.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 170.0, ++ "y": 185.0 ++ }, ++ { ++ "x": 170.0, ++ "y": 235.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 235.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 820.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 850.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D1" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 330.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D2" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 340.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D3" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 350.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D4" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 360.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "D1" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 780.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "D2" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 790.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "D3" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 800.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#2", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#3", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y00" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 50.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 420.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y01" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 570.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y10" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 70.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 720.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y11" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 195.0, ++ "y": 80.0 ++ }, ++ { ++ "x": 195.0, ++ "y": 870.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 110.0, ++ "y": 370.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 520.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 820.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 380.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 390.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 400.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 410.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 530.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 540.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 550.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 560.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 680.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 690.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 700.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 710.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 830.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 840.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 850.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 860.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 380.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 445.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 445.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 490.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 285.0, ++ "y": 390.0 ++ }, ++ { ++ "x": 285.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 500.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 280.0, ++ "y": 400.0 ++ }, ++ { ++ "x": 280.0, ++ "y": 435.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 435.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 510.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 275.0, ++ "y": 410.0 ++ }, ++ { ++ "x": 275.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 520.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 490.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 595.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 595.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 640.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 285.0, ++ "y": 500.0 ++ }, ++ { ++ "x": 285.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 280.0, ++ "y": 510.0 ++ }, ++ { ++ "x": 280.0, ++ "y": 585.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 585.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 660.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 275.0, ++ "y": 520.0 ++ }, ++ { ++ "x": 275.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 640.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 745.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 745.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 790.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 285.0, ++ "y": 650.0 ++ }, ++ { ++ "x": 285.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 800.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 280.0, ++ "y": 660.0 ++ }, ++ { ++ "x": 280.0, ++ "y": 735.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 735.0 ++ }, ++ { ++ "x": 220.0, ++ "y": 810.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 275.0, ++ "y": 670.0 ++ }, ++ { ++ "x": 275.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 820.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA1" ++ }, ++ "path": [ ++ { ++ "x": 300.0, ++ "y": 790.0 ++ }, ++ { ++ "x": 300.0, ++ "y": 50.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA2" ++ }, ++ "path": [ ++ { ++ "x": 305.0, ++ "y": 800.0 ++ }, ++ { ++ "x": 305.0, ++ "y": 150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA3" ++ }, ++ "path": [ ++ { ++ "x": 310.0, ++ "y": 810.0 ++ }, ++ { ++ "x": 310.0, ++ "y": 250.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA4" ++ }, ++ "path": [ ++ { ++ "x": 315.0, ++ "y": 820.0 ++ }, ++ { ++ "x": 315.0, ++ "y": 350.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 190.0, ++ "y": 330.0 ++ }, ++ { ++ "x": 190.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 440.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 185.0, ++ "y": 340.0 ++ }, ++ { ++ "x": 185.0, ++ "y": 425.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 425.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 450.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 350.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 420.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 420.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 460.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 360.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 415.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 415.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 470.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 190.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 190.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 590.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 185.0, ++ "y": 450.0 ++ }, ++ { ++ "x": 185.0, ++ "y": 575.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 575.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 600.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 460.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 570.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 570.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 610.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 470.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 565.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 565.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 620.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 190.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 190.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 740.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 185.0, ++ "y": 600.0 ++ }, ++ { ++ "x": 185.0, ++ "y": 725.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 725.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 750.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 610.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 720.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 720.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 760.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 620.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 715.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 715.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 770.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB1" ++ }, ++ "path": [ ++ { ++ "x": 190.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 190.0, ++ "y": 880.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 880.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 450.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB2" ++ }, ++ "path": [ ++ { ++ "x": 185.0, ++ "y": 750.0 ++ }, ++ { ++ "x": 185.0, ++ "y": 885.0 ++ }, ++ { ++ "x": 330.0, ++ "y": 885.0 ++ }, ++ { ++ "x": 330.0, ++ "y": 550.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB3" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 760.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 890.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 890.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB4" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 770.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 895.0 ++ }, ++ { ++ "x": 340.0, ++ "y": 895.0 ++ }, ++ { ++ "x": 340.0, ++ "y": 750.0 ++ } ++ ] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIram2", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIram4.json index 00000000,00000000..99f606dd new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIram4.json @@@ -1,0 -1,0 +1,3197 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 130.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "QA1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "QB2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "QB1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "QA3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 75.0 ++ }, ++ "name": "QB4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "QA2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 65.0 ++ }, ++ "name": "QB3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "QA4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "B0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "WE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 105.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 115.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 125.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.1, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 69.0, ++ "y": 854.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 844.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 484.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#16", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 864.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 504.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#18", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 494.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#17", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 54.0, ++ "y": 514.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#19", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 155.0, ++ "y": 325.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#2" ++ }, ++ { ++ "pos": { ++ "x": 224.0, ++ "y": 164.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 229.0, ++ "y": 154.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 214.0, ++ "y": 184.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 219.0, ++ "y": 174.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 544.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 59.0, ++ "y": 534.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 564.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 69.0, ++ "y": 554.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 694.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 59.0, ++ "y": 684.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 69.0, ++ "y": 704.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 235.0, ++ "y": 150.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#0" ++ }, ++ { ++ "pos": { ++ "x": 59.0, ++ "y": 834.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 250.0, ++ "y": 375.0 ++ }, ++ "id": "GUIand41", ++ "name": "GUIand41#1" ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 714.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 155.0, ++ "y": 735.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#5" ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 349.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#25", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 334.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#24", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 155.0, ++ "y": 435.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#3" ++ }, ++ { ++ "pos": { ++ "x": 54.0, ++ "y": 749.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#27", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 155.0, ++ "y": 585.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#4" ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 649.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#26", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 780.0 ++ }, ++ "id": "GUIram2", ++ "name": "GUIram2#3" ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 630.0 ++ }, ++ "id": "GUIram2", ++ "name": "GUIram2#2" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 150.0 ++ }, ++ "id": "GUIdemux2", ++ "name": "GUIdemux2#1" ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 480.0 ++ }, ++ "id": "GUIram2", ++ "name": "GUIram2#1" ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 330.0 ++ }, ++ "id": "GUIram2", ++ "name": "GUIram2#0" ++ }, ++ { ++ "pos": { ++ "x": 250.0, ++ "y": 635.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#1" ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 45.0 ++ }, ++ "id": "GUIdemux2", ++ "name": "GUIdemux2#0" ++ }, ++ { ++ "pos": { ++ "x": 250.0, ++ "y": 785.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#2" ++ }, ++ { ++ "pos": { ++ "x": 250.0, ++ "y": 485.0 ++ }, ++ "id": "GUIandor414", ++ "name": "GUIandor414#0" ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 644.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#21", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 634.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#20", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 54.0, ++ "y": 664.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#23", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 654.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#22", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A0" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#0", ++ "pinName": "S0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#0", ++ "pinName": "S1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 150.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B0" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#1", ++ "pinName": "S0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 450.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 155.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUIdemux2#1", ++ "pinName": "S1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 550.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 165.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y00" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y01" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y10" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#1", ++ "pinName": "Y11" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "WE" ++ }, ++ "pin2": { ++ "compName": "GUIand41#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 850.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 195.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 155.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 230.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 230.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 375.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 285.0, ++ "y": 165.0 ++ }, ++ { ++ "x": 285.0, ++ "y": 225.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 225.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 525.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 280.0, ++ "y": 175.0 ++ }, ++ { ++ "x": 280.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 675.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 275.0, ++ "y": 185.0 ++ }, ++ { ++ "x": 275.0, ++ "y": 215.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 215.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 825.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "A0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 345.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "B0" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 355.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 365.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "A0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "B0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "B1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "A0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "B0" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "B1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "A0" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 785.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 795.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "B0" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 805.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 815.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 250.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "D1" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 385.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "D2" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 395.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "D3" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 405.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#0", ++ "pinName": "D4" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 415.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#1", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#2", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIram2#3", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 950.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 1050.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 1150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 1250.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y00" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 135.0, ++ "y": 50.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 370.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y01" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 520.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y10" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 70.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdemux2#0", ++ "pinName": "Y11" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 80.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 820.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 230.0, ++ "y": 420.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 225.0, ++ "y": 570.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 220.0, ++ "y": 720.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 215.0, ++ "y": 870.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QB1" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 375.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 380.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QB2" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 385.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 390.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QB3" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 395.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 400.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QB4" ++ }, ++ "pin2": { ++ "compName": "GUIand41#1", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 405.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 410.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QB1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 525.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 530.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QB2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 535.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 540.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QB3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 545.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 550.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QB4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 555.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 560.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QB1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 675.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 680.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QB2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 685.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 690.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QB3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 695.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 700.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QB4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 705.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 710.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QB1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 825.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 830.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QB2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 835.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 840.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QB3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 845.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 850.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QB4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 855.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 860.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QA1" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 335.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 330.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QA2" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 345.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 340.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QA3" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 355.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 350.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#0", ++ "pinName": "QA4" ++ }, ++ "pin2": { ++ "compName": "GUIand41#2", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 365.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 360.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QA1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 485.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 480.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QA2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 495.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 490.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QA3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 505.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 500.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#1", ++ "pinName": "QA4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 515.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 510.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QA1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 635.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 630.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QA2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 645.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 640.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QA3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 655.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#2", ++ "pinName": "QA4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 665.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 660.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QA1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 785.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 780.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QA2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 795.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 790.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QA3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 805.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 800.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram2#3", ++ "pinName": "QA4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 815.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 810.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 305.0, ++ "y": 380.0 ++ }, ++ { ++ "x": 305.0, ++ "y": 445.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 445.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 490.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 300.0, ++ "y": 390.0 ++ }, ++ { ++ "x": 300.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 500.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 295.0, ++ "y": 400.0 ++ }, ++ { ++ "x": 295.0, ++ "y": 435.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 435.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 510.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#1", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#0", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 410.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 520.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 305.0, ++ "y": 490.0 ++ }, ++ { ++ "x": 305.0, ++ "y": 595.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 595.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 640.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 300.0, ++ "y": 500.0 ++ }, ++ { ++ "x": 300.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 295.0, ++ "y": 510.0 ++ }, ++ { ++ "x": 295.0, ++ "y": 585.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 585.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 660.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#1", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 520.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 305.0, ++ "y": 640.0 ++ }, ++ { ++ "x": 305.0, ++ "y": 745.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 745.0 ++ }, ++ { ++ "x": 245.0, ++ "y": 790.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 300.0, ++ "y": 650.0 ++ }, ++ { ++ "x": 300.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 240.0, ++ "y": 800.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 295.0, ++ "y": 660.0 ++ }, ++ { ++ "x": 295.0, ++ "y": 735.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 735.0 ++ }, ++ { ++ "x": 235.0, ++ "y": 810.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#1", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#2", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 670.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 820.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB1" ++ }, ++ "path": [ ++ { ++ "x": 330.0, ++ "y": 790.0 ++ }, ++ { ++ "x": 330.0, ++ "y": 450.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB2" ++ }, ++ "path": [ ++ { ++ "x": 335.0, ++ "y": 800.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 550.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB3" ++ }, ++ "path": [ ++ { ++ "x": 340.0, ++ "y": 810.0 ++ }, ++ { ++ "x": 340.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#2", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QB4" ++ }, ++ "path": [ ++ { ++ "x": 345.0, ++ "y": 820.0 ++ }, ++ { ++ "x": 345.0, ++ "y": 750.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 330.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 430.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 440.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 340.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 425.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 425.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 450.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 350.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 420.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 420.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 460.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand41#2", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#3", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 195.0, ++ "y": 360.0 ++ }, ++ { ++ "x": 195.0, ++ "y": 415.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 415.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 470.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 440.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 590.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 450.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 575.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 575.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 600.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 460.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 570.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 570.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 610.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#3", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#4", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 195.0, ++ "y": 470.0 ++ }, ++ { ++ "x": 195.0, ++ "y": 565.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 565.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 620.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 740.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 600.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 725.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 725.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 750.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 610.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 720.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 720.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 760.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#4", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIandor414#5", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 195.0, ++ "y": 620.0 ++ }, ++ { ++ "x": 195.0, ++ "y": 715.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 715.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 770.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA1" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 880.0 ++ }, ++ { ++ "x": 310.0, ++ "y": 880.0 ++ }, ++ { ++ "x": 310.0, ++ "y": 50.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA2" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 750.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 885.0 ++ }, ++ { ++ "x": 315.0, ++ "y": 885.0 ++ }, ++ { ++ "x": 315.0, ++ "y": 150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA3" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 760.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 890.0 ++ }, ++ { ++ "x": 320.0, ++ "y": 890.0 ++ }, ++ { ++ "x": 320.0, ++ "y": 250.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIandor414#5", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QA4" ++ }, ++ "path": [ ++ { ++ "x": 195.0, ++ "y": 770.0 ++ }, ++ { ++ "x": 195.0, ++ "y": 895.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 895.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 350.0 ++ } ++ ] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIram4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIsel2_4.json index 00000000,00000000..219e1b9d new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIsel2_4.json @@@ -1,0 -1,0 +1,812 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 100.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "SA", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "SB", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "B4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 52.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 152.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 102.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 77.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 52.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 66.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 16.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 41.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 116.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 141.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 91.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 65.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 77.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 177.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 127.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 62.5 ++ }, ++ { ++ "x": 15.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 17.5, ++ "y": 87.5 ++ }, ++ { ++ "x": 17.5, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 17.5, ++ "y": 112.5 ++ }, ++ { ++ "x": 17.5, ++ "y": 107.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 17.5, ++ "y": 137.5 ++ }, ++ { ++ "x": 17.5, ++ "y": 157.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 162.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 12.5, ++ "y": 187.5 ++ }, ++ { ++ "x": 12.5, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 212.5 ++ }, ++ { ++ "x": 15.0, ++ "y": 132.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B4" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 237.5 ++ }, ++ { ++ "x": 10.0, ++ "y": 182.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SA" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SB" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 167.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 192.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 42.5, ++ "y": 12.5 ++ }, ++ { ++ "x": 42.5, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 37.5 ++ }, ++ { ++ "x": 45.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 47.5, ++ "y": 62.5 ++ }, ++ { ++ "x": 47.5, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 87.5 ++ }, ++ { ++ "x": 50.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 52.5, ++ "y": 112.5 ++ }, ++ { ++ "x": 52.5, ++ "y": 57.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 137.5 ++ }, ++ { ++ "x": 55.0, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 57.5, ++ "y": 162.5 ++ }, ++ { ++ "x": 57.5, ++ "y": 82.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 187.5 ++ }, ++ { ++ "x": 60.0, ++ "y": 92.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#8", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#9", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#10", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#11", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIsel2_4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIsel3_4.json index 00000000,00000000..1cae789a new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIsel3_4.json @@@ -1,0 -1,0 +1,878 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 150.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "SA", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 115.0 ++ }, ++ "name": "C1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "SB", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 125.0 ++ }, ++ "name": "C2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "SC", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 135.0 ++ }, ++ "name": "C3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 145.0 ++ }, ++ "name": "C4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 105.0 ++ }, ++ "name": "B4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.2, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 620.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 570.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 720.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 670.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 75.0, ++ "y": 250.0 ++ }, ++ "id": "GUInot4", ++ "name": "GUInot4#0" ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 634.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 584.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 684.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 152.5, ++ "y": 65.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 250.0 ++ }, ++ "id": "GUIsel2_4", ++ "name": "GUIsel2_4#0" ++ }, ++ { ++ "pos": { ++ "x": 152.5, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 152.5, ++ "y": 165.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 152.5, ++ "y": 115.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SA" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "SA" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 25.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 255.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SB" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "SB" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 75.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 265.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 175.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 275.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 225.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 285.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 275.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 295.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 325.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 305.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 375.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 315.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 425.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 325.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 475.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 335.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B4" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 525.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 345.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUInot4#0", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUInot4#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUInot4#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUInot4#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SC" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 125.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 125.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 125.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 735.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C1" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C2" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C3" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C4" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInot4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 255.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInot4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 265.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 70.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInot4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 275.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 120.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInot4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 285.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 170.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 135.0, ++ "y": 580.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 630.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 80.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 145.0, ++ "y": 680.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 130.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 150.0, ++ "y": 730.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIsel3_4", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/GUIxor.json index 00000000,00000000..9e3ec592 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/GUIxor.json @@@ -1,0 -1,0 +1,267 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 20.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "A", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "B", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 2.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 7.5, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 62.5, ++ "y": 15.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 35.0, ++ "y": 27.5 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 11.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 32.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 42.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIxor", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json index 00000000,00000000..7563d838 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json @@@ -1,0 -1,0 +1,3245 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 270.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 85.0 ++ }, ++ "name": "ORAMn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 265.0 ++ }, ++ "name": "IQn+3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "I0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 255.0 ++ }, ++ "name": "IQn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "I1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "I2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "I3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 65.0 ++ }, ++ "name": "OVR", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "I4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 105.0 ++ }, ++ "name": "Cn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 115.0 ++ }, ++ "name": "OQn+3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "I5", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I6", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 105.0 ++ }, ++ "name": "OQn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I7", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I8", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 155.0 ++ }, ++ "name": "A0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 165.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 175.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 185.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 235.0 ++ }, ++ "name": "IRAMn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "Cn+4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 95.0 ++ }, ++ "name": "ORAMn+3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "F\u003d0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 115.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 245.0 ++ }, ++ "name": "IRAMn+3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 75.0 ++ }, ++ "name": "F3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 125.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 195.0 ++ }, ++ "name": "B0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 135.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 205.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 145.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 215.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 225.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Y1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Y2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Y3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Y4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.1, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 2310.0 ++ }, ++ "id": "GUIsel3_4", ++ "name": "GUIsel3_4#0" ++ }, ++ { ++ "pos": { ++ "x": 144.0, ++ "y": 2524.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 2510.0 ++ }, ++ "id": "GUIsel3_4", ++ "name": "GUIsel3_4#1" ++ }, ++ { ++ "pos": { ++ "x": 139.0, ++ "y": 2514.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 234.0, ++ "y": 2524.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#16", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 219.0, ++ "y": 2494.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 45.0 ++ }, ++ "id": "GUIAm2901DestDecode", ++ "name": "GUIAm2901DestDecode#0" ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 2634.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#18", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 2624.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#17", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 279.0, ++ "y": 2114.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#19", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 154.0, ++ "y": 89.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 154.0, ++ "y": 949.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 154.0, ++ "y": 2319.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 154.0, ++ "y": 2264.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 2324.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 2314.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 219.0, ++ "y": 2224.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 2334.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 229.0, ++ "y": 2244.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 224.0, ++ "y": 2234.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 234.0, ++ "y": 2254.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 134.0, ++ "y": 2504.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 129.0, ++ "y": 2494.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 160.0, ++ "y": 2275.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#1" ++ }, ++ { ++ "pos": { ++ "x": 160.0, ++ "y": 2220.0 ++ }, ++ "id": "GUIdlatch4", ++ "name": "GUIdlatch4#0" ++ }, ++ { ++ "pos": { ++ "x": 314.0, ++ "y": 449.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#40", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 90.0, ++ "y": 2490.0 ++ }, ++ "id": "GUIAm2901QReg", ++ "name": "GUIAm2901QReg#0" ++ }, ++ { ++ "pos": { ++ "x": 320.0, ++ "y": 440.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 2384.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#36", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 160.0, ++ "y": 75.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 2414.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#35", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 19.0, ++ "y": 2434.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#38", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 2424.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#37", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 2444.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#39", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 190.0, ++ "y": 65.0 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 275.0, ++ "y": 135.0 ++ }, ++ "id": "GUImux1_4", ++ "name": "GUImux1_4#0" ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 2354.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#30", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 19.0, ++ "y": 2374.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#32", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 2364.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#31", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 19.0, ++ "y": 2404.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#34", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 2394.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#33", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 269.0, ++ "y": 2104.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#25", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 264.0, ++ "y": 2099.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#24", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 259.0, ++ "y": 459.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#27", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 254.0, ++ "y": 449.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#26", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 275.0, ++ "y": 445.0 ++ }, ++ "id": "GUIor4", ++ "name": "GUIor4#0" ++ }, ++ { ++ "pos": { ++ "x": 269.0, ++ "y": 479.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#29", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 240.0, ++ "y": 2110.0 ++ }, ++ "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode", ++ "name": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0" ++ }, ++ { ++ "pos": { ++ "x": 264.0, ++ "y": 469.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#28", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 95.0, ++ "y": 2220.0 ++ }, ++ "id": "GUIram4", ++ "name": "GUIram4#0" ++ }, ++ { ++ "pos": { ++ "x": 329.0, ++ "y": 949.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#21", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 294.0, ++ "y": 2144.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#20", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 259.0, ++ "y": 2094.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#23", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 254.0, ++ "y": 2089.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#22", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I8" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "I8" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I7" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "I7" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 150.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I6" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "I6" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 250.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 70.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I5" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I5" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 350.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 2115.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I4" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 450.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 2125.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I3" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 550.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 2135.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I2" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 650.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 2145.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 110.0, ++ "y": 750.0 ++ }, ++ { ++ "x": 110.0, ++ "y": 2155.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 850.0 ++ }, ++ { ++ "x": 105.0, ++ "y": 2165.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 155.0, ++ "y": 80.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 155.0, ++ "y": 2485.0 ++ }, ++ { ++ "x": 80.0, ++ "y": 2485.0 ++ }, ++ { ++ "x": 80.0, ++ "y": 2495.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "LSH" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 90.0 ++ }, ++ { ++ "x": 55.0, ++ "y": 125.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 125.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "NSH" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 50.0 ++ }, ++ { ++ "x": 60.0, ++ "y": 120.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 120.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "RSH" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 115.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 115.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SA" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SB" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SC" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "SA" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 2515.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "SB" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 2525.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "SC" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 2535.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A0" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "A0" ++ }, ++ "path": [ ++ { ++ "x": 80.0, ++ "y": 1550.0 ++ }, ++ { ++ "x": 80.0, ++ "y": 2225.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 1650.0 ++ }, ++ { ++ "x": 75.0, ++ "y": 2235.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 1750.0 ++ }, ++ { ++ "x": 70.0, ++ "y": 2245.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 1850.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 2255.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B0" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "B0" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 1950.0 ++ }, ++ { ++ "x": 60.0, ++ "y": 2265.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 2050.0 ++ }, ++ { ++ "x": 55.0, ++ "y": 2275.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 2150.0 ++ }, ++ { ++ "x": 50.0, ++ "y": 2285.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 2250.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 2295.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QA1" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QA2" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QA3" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QA4" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QB1" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D1" ++ }, ++ "path": [ ++ { ++ "x": 150.0, ++ "y": 2265.0 ++ }, ++ { ++ "x": 150.0, ++ "y": 2280.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QB2" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D2" ++ }, ++ "path": [ ++ { ++ "x": 145.0, ++ "y": 2275.0 ++ }, ++ { ++ "x": 145.0, ++ "y": 2290.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QB3" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D3" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 2285.0 ++ }, ++ { ++ "x": 140.0, ++ "y": 2300.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIram4#0", ++ "pinName": "QB4" ++ }, ++ "pin2": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "D4" ++ }, ++ "path": [ ++ { ++ "x": 135.0, ++ "y": 2295.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 2310.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Cn" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 1050.0 ++ }, ++ { ++ "x": 100.0, ++ "y": 2175.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "D1" ++ }, ++ "path": [ ++ { ++ "x": 180.0, ++ "y": 1150.0 ++ }, ++ { ++ "x": 180.0, ++ "y": 2185.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "D2" ++ }, ++ "path": [ ++ { ++ "x": 175.0, ++ "y": 1250.0 ++ }, ++ { ++ "x": 175.0, ++ "y": 2195.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "D3" ++ }, ++ "path": [ ++ { ++ "x": 170.0, ++ "y": 1350.0 ++ }, ++ { ++ "x": 170.0, ++ "y": 2205.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "D4" ++ }, ++ "path": [ ++ { ++ "x": 165.0, ++ "y": 1450.0 ++ }, ++ { ++ "x": 165.0, ++ "y": 2215.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#0", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I0_1" ++ }, ++ "path": [ ++ { ++ "x": 220.0, ++ "y": 150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I0_2" ++ }, ++ "path": [ ++ { ++ "x": 225.0, ++ "y": 160.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I0_3" ++ }, ++ "path": [ ++ { ++ "x": 230.0, ++ "y": 170.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I0_4" ++ }, ++ "path": [ ++ { ++ "x": 235.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 200.0, ++ "y": 2280.0 ++ }, ++ { ++ "x": 200.0, ++ "y": 2265.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 205.0, ++ "y": 2290.0 ++ }, ++ { ++ "x": 205.0, ++ "y": 2275.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 210.0, ++ "y": 2300.0 ++ }, ++ { ++ "x": 210.0, ++ "y": 2285.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdlatch4#1", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 215.0, ++ "y": 2310.0 ++ }, ++ { ++ "x": 215.0, ++ "y": 2295.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "OQn" ++ }, ++ "path": [ ++ { ++ "x": 335.0, ++ "y": 2495.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 1050.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "OQn+3" ++ }, ++ "path": [ ++ { ++ "x": 340.0, ++ "y": 2525.0 ++ }, ++ { ++ "x": 340.0, ++ "y": 1150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 135.0, ++ "y": 2670.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 2670.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 2635.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 2635.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 140.0, ++ "y": 2675.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 2675.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 2640.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 2640.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "C1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "C2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 145.0, ++ "y": 2680.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 2680.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 2645.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "IQn+3" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 2650.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 2655.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "IQn" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 2550.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 2545.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 2665.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 2665.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 2630.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 2630.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 2555.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Q1" ++ }, ++ "path": [ ++ { ++ "x": 220.0, ++ "y": 2305.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Q2" ++ }, ++ "path": [ ++ { ++ "x": 225.0, ++ "y": 2505.0 ++ }, ++ { ++ "x": 225.0, ++ "y": 2315.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Q3" ++ }, ++ "path": [ ++ { ++ "x": 230.0, ++ "y": 2515.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 2325.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Q4" ++ }, ++ "path": [ ++ { ++ "x": 235.0, ++ "y": 2335.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 2565.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 2575.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "Cn+4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn+4" ++ }, ++ "path": [ ++ { ++ "x": 315.0, ++ "y": 2155.0 ++ }, ++ { ++ "x": 315.0, ++ "y": 550.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "OVR" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "OVR" ++ }, ++ "path": [ ++ { ++ "x": 320.0, ++ "y": 2165.0 ++ }, ++ { ++ "x": 320.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "F1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "F4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "ORAMn" ++ }, ++ "path": [ ++ { ++ "x": 325.0, ++ "y": 2115.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 850.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 330.0, ++ "y": 2145.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "ORAMn+3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#21", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F3" ++ }, ++ "path": [ ++ { ++ "x": 330.0, ++ "y": 750.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 280.0, ++ "y": 2090.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "F2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 285.0, ++ "y": 2125.0 ++ }, ++ { ++ "x": 285.0, ++ "y": 2095.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0", ++ "pinName": "F3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 290.0, ++ "y": 2135.0 ++ }, ++ { ++ "x": 290.0, ++ "y": 2100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#20", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 295.0, ++ "y": 2105.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIor4#0", ++ "pinName": "A1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIor4#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIor4#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIor4#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#26", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I1_1" ++ }, ++ "path": [ ++ { ++ "x": 255.0, ++ "y": 190.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#27", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I1_2" ++ }, ++ "path": [ ++ { ++ "x": 260.0, ++ "y": 200.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#28", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I1_3" ++ }, ++ "path": [ ++ { ++ "x": 265.0, ++ "y": 210.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#29", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "I1_4" ++ }, ++ "path": [ ++ { ++ "x": 270.0, ++ "y": 220.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#22", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 2090.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#23", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 2095.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#24", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#32", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 2100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "IRAMn" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 2350.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 2345.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#32", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#31", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#33", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#32", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#34", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#25", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#35", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 2105.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#30", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#36", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#36", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#33", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#34", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#35", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#33", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#37", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#34", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#38", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#35", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#39", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#37", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#38", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#39", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "IRAMn+3" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 2450.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 2455.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#36", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 2585.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#37", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 2595.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#38", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 2605.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#39", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#1", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 2615.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "D1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "D2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "D3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "D4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "RAMWE" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIram4#0", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 230.0, ++ "y": 70.0 ++ }, ++ { ++ "x": 230.0, ++ "y": 105.0 ++ }, ++ { ++ "x": 90.0, ++ "y": 105.0 ++ }, ++ { ++ "x": 90.0, ++ "y": 2305.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "QWE" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901QReg#0", ++ "pinName": "WE" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 100.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 2505.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901DestDecode#0", ++ "pinName": "YF" ++ }, ++ "pin2": { ++ "compName": "GUImux1_4#0", ++ "pinName": "S0" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 80.0 ++ }, ++ { ++ "x": 70.0, ++ "y": 140.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y1" ++ }, ++ "path": [ ++ { ++ "x": 335.0, ++ "y": 140.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 50.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y3" ++ }, ++ "path": [ ++ { ++ "x": 335.0, ++ "y": 160.0 ++ }, ++ { ++ "x": 335.0, ++ "y": 250.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Y4" ++ }, ++ "path": [ ++ { ++ "x": 325.0, ++ "y": 170.0 ++ }, ++ { ++ "x": 325.0, ++ "y": 350.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIor4#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#40", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#40", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 315.0, ++ "y": 445.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#40", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 315.0, ++ "y": 455.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F\u003d0" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUFuncDecode.json index 00000000,00000000..a24476b3 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUFuncDecode.json @@@ -1,0 -1,0 +1,681 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 60.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "SBE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "FN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "SN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I5", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "L", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "RN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "CinE", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.25, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 10.0 ++ }, ++ "id": "GUInand3", ++ "name": "GUInand3#0" ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 70.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 55.0, ++ "y": 45.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 100.0, ++ "y": 135.0 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 44.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 64.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 54.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 99.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 84.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 74.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 34.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 100.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I5" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 45.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 50.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "FN" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 40.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 40.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "SN" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 105.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 105.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "RN" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 220.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "CinE" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUInand3#0", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUInand3#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "L" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "SBE" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901ALUFuncDecode", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclDecode.json index 00000000,00000000..62d78f1e new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclDecode.json @@@ -1,0 -1,0 +1,1453 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 120.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "R2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 105.0 ++ }, ++ "name": "S3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "R3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 115.0 ++ }, ++ "name": "S4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "R4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "OVR", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "Cn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "F1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I5", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "F2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "F3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "F4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "Cn+4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "S1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "R1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "S2", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.25, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 354.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 254.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 36.5, ++ "y": 264.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#16", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 36.5, ++ "y": 164.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 84.0, ++ "y": 374.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#18", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 36.5, ++ "y": 364.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#17", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 20.0, ++ "y": 2.5 ++ }, ++ "id": "GUIAm2901ALUFuncDecode", ++ "name": "GUIAm2901ALUFuncDecode#0" ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 80.0 ++ }, ++ "id": "GUIAm2901ALUOneBit", ++ "name": "GUIAm2901ALUOneBit#0" ++ }, ++ { ++ "pos": { ++ "x": 84.0, ++ "y": 384.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#19", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 95.0, ++ "y": 400.0 ++ }, ++ "id": "GUIxor", ++ "name": "GUIxor#0" ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 194.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 94.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 26.5, ++ "y": 104.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 294.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 26.5, ++ "y": 304.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 26.5, ++ "y": 204.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 180.0 ++ }, ++ "id": "GUIAm2901ALUOneBit", ++ "name": "GUIAm2901ALUOneBit#1" ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 224.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 280.0 ++ }, ++ "id": "GUIAm2901ALUOneBit", ++ "name": "GUIAm2901ALUOneBit#2" ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 124.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 380.0 ++ }, ++ "id": "GUIAm2901ALUOneBit", ++ "name": "GUIAm2901ALUOneBit#3" ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 144.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 29.0, ++ "y": 324.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 244.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 154.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 344.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I5" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "I5" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 20.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 7.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "I4" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 17.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "I3" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 100.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 27.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "SBE" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 62.5, ++ "y": 37.5 ++ }, ++ { ++ "x": 62.5, ++ "y": 70.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 70.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "CoutE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "CoutE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "CoutE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "CoutE" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 395.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "CinE" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 7.5 ++ }, ++ { ++ "x": 70.0, ++ "y": 77.5 ++ }, ++ { ++ "x": 27.5, ++ "y": 77.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "CinE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "CinE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "CinE" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "CinE" ++ }, ++ "path": [ ++ { ++ "x": 27.5, ++ "y": 405.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "RN" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 57.5, ++ "y": 57.5 ++ }, ++ { ++ "x": 57.5, ++ "y": 65.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 65.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "RN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "RN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "RN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "RN" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 425.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "SN" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 27.5 ++ }, ++ { ++ "x": 65.0, ++ "y": 72.5 ++ }, ++ { ++ "x": 32.5, ++ "y": 72.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "SN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "SN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "SN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "SN" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 445.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "FN" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 47.5 ++ }, ++ { ++ "x": 60.0, ++ "y": 67.5 ++ }, ++ { ++ "x": 35.0, ++ "y": 67.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "FN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "FN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "FN" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "FN" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 455.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUFuncDecode#0", ++ "pinName": "L" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 67.5, ++ "y": 17.5 ++ }, ++ { ++ "x": 67.5, ++ "y": 75.0 ++ }, ++ { ++ "x": 37.5, ++ "y": 75.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "L" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#16", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "L" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "L" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#17", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "L" ++ }, ++ "path": [ ++ { ++ "x": 37.5, ++ "y": 465.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "R1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "R" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 180.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 115.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "R2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "R" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 215.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "R3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "R" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 260.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 315.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "R4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "R" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 300.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 415.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "S" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 340.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 135.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "S" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 380.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 235.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "S" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 420.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 335.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "S" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 460.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 435.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "Cin" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 140.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 85.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "Cout" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "Cin" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 85.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 175.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 175.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 185.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "Cout" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "Cin" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 185.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 275.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 275.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 285.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "Cout" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 285.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "Cin" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 375.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 385.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "Cout" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#0", ++ "pinName": "F" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F1" ++ }, ++ "path": [ ++ { ++ "x": 90.0, ++ "y": 95.0 ++ }, ++ { ++ "x": 90.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#1", ++ "pinName": "F" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F2" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 195.0 ++ }, ++ { ++ "x": 95.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#2", ++ "pinName": "F" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F3" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 295.0 ++ }, ++ { ++ "x": 100.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUOneBit#3", ++ "pinName": "F" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F4" ++ }, ++ "path": [ ++ { ++ "x": 105.0, ++ "y": 395.0 ++ }, ++ { ++ "x": 105.0, ++ "y": 140.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#18", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIxor#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 90.0, ++ "y": 375.0 ++ }, ++ { ++ "x": 90.0, ++ "y": 405.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIxor#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 415.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#19", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn+4" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 385.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIxor#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "OVR" ++ } ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901ALUInclDecode", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json index 00000000,00000000..75c63dd1 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json @@@ -1,0 -1,0 +1,1313 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 230.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 195.0 ++ }, ++ "name": "Q1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 205.0 ++ }, ++ "name": "Q2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 215.0 ++ }, ++ "name": "Q3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 225.0 ++ }, ++ "name": "Q4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "I0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "I1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "I2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "OVR", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "Cn", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I5", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 115.0 ++ }, ++ "name": "A1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 125.0 ++ }, ++ "name": "A2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 135.0 ++ }, ++ "name": "A3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 145.0 ++ }, ++ "name": "A4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "Cn+4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "F1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "F2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "F3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "F4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 95.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 155.0 ++ }, ++ "name": "B1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 105.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 165.0 ++ }, ++ "name": "B2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 175.0 ++ }, ++ "name": "B3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 185.0 ++ }, ++ "name": "B4", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.25, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 575.0 ++ }, ++ "id": "GUIsel3_4", ++ "name": "GUIsel3_4#0" ++ }, ++ { ++ "pos": { ++ "x": 14.0, ++ "y": 499.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 459.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 60.0, ++ "y": 15.0 ++ }, ++ "id": "GUIAm2901ALUInclDecode", ++ "name": "GUIAm2901ALUInclDecode#0" ++ }, ++ { ++ "pos": { ++ "x": 24.0, ++ "y": 579.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 19.0, ++ "y": 539.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 45.0, ++ "y": 365.0 ++ }, ++ "id": "GUIsel2_4", ++ "name": "GUIsel2_4#0" ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 165.0 ++ }, ++ "id": "GUIAm2901SourceDecode", ++ "name": "GUIAm2901SourceDecode#0" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I5" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "I5" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "I4" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 30.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "I3" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 100.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 40.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "I2" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 140.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 170.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "I1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 190.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "Cn" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 260.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 50.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 300.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 390.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 340.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 400.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 380.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 410.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "A4" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A3" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "A4" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 430.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B2" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 440.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 450.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 460.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A1" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 610.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A2" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 620.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A3" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 630.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "A4" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 640.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B1" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B1" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 620.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 650.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B2" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B3" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B3" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 700.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 670.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "B4" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "B4" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 740.0 ++ }, ++ { ++ "x": 10.0, ++ "y": 680.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Q1" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C1" ++ }, ++ "path": [ ++ { ++ "x": 15.0, ++ "y": 780.0 ++ }, ++ { ++ "x": 15.0, ++ "y": 690.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Q2" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C2" ++ }, ++ "path": [ ++ { ++ "x": 20.0, ++ "y": 820.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 700.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Q3" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C3" ++ }, ++ "path": [ ++ { ++ "x": 25.0, ++ "y": 860.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 710.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Q4" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "C4" ++ }, ++ "path": [ ++ { ++ "x": 30.0, ++ "y": 900.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 720.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "SQ" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SC" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 170.0 ++ }, ++ { ++ "x": 75.0, ++ "y": 240.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 240.0 ++ }, ++ { ++ "x": 30.0, ++ "y": 600.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "RA" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "SB" ++ }, ++ "path": [ ++ { ++ "x": 70.0, ++ "y": 180.0 ++ }, ++ { ++ "x": 70.0, ++ "y": 235.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 235.0 ++ }, ++ { ++ "x": 20.0, ++ "y": 380.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "SB" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SB" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 190.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 230.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 230.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 590.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "SA" ++ }, ++ "pin2": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "SA" ++ }, ++ "path": [ ++ { ++ "x": 60.0, ++ "y": 200.0 ++ }, ++ { ++ "x": 60.0, ++ "y": 225.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 225.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 580.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901SourceDecode#0", ++ "pinName": "RD" ++ }, ++ "pin2": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "SA" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 210.0 ++ }, ++ { ++ "x": 55.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 220.0 ++ }, ++ { ++ "x": 25.0, ++ "y": 370.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "R1" ++ }, ++ "path": [ ++ { ++ "x": 82.5, ++ "y": 370.0 ++ }, ++ { ++ "x": 82.5, ++ "y": 162.5 ++ }, ++ { ++ "x": 20.0, ++ "y": 162.5 ++ }, ++ { ++ "x": 20.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "R2" ++ }, ++ "path": [ ++ { ++ "x": 85.0, ++ "y": 380.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 160.0 ++ }, ++ { ++ "x": 22.5, ++ "y": 160.0 ++ }, ++ { ++ "x": 22.5, ++ "y": 70.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "R3" ++ }, ++ "path": [ ++ { ++ "x": 87.5, ++ "y": 390.0 ++ }, ++ { ++ "x": 87.5, ++ "y": 157.5 ++ }, ++ { ++ "x": 25.0, ++ "y": 157.5 ++ }, ++ { ++ "x": 25.0, ++ "y": 80.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel2_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "R4" ++ }, ++ "path": [ ++ { ++ "x": 90.0, ++ "y": 400.0 ++ }, ++ { ++ "x": 90.0, ++ "y": 155.0 ++ }, ++ { ++ "x": 27.5, ++ "y": 155.0 ++ }, ++ { ++ "x": 27.5, ++ "y": 90.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y1" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "S1" ++ }, ++ "path": [ ++ { ++ "x": 92.5, ++ "y": 580.0 ++ }, ++ { ++ "x": 92.5, ++ "y": 152.5 ++ }, ++ { ++ "x": 30.0, ++ "y": 152.5 ++ }, ++ { ++ "x": 30.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y2" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "S2" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 590.0 ++ }, ++ { ++ "x": 95.0, ++ "y": 150.0 ++ }, ++ { ++ "x": 32.5, ++ "y": 150.0 ++ }, ++ { ++ "x": 32.5, ++ "y": 110.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y3" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "S3" ++ }, ++ "path": [ ++ { ++ "x": 97.5, ++ "y": 600.0 ++ }, ++ { ++ "x": 97.5, ++ "y": 147.5 ++ }, ++ { ++ "x": 35.0, ++ "y": 147.5 ++ }, ++ { ++ "x": 35.0, ++ "y": 120.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIsel3_4#0", ++ "pinName": "Y4" ++ }, ++ "pin2": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "S4" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 610.0 ++ }, ++ { ++ "x": 100.0, ++ "y": 145.0 ++ }, ++ { ++ "x": 37.5, ++ "y": 145.0 ++ }, ++ { ++ "x": 37.5, ++ "y": 130.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "F1" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "F2" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F2" ++ }, ++ "path": [ ++ { ++ "x": 135.0, ++ "y": 30.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "F3" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F3" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 40.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "F4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F4" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 50.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 140.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "Cn+4" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Cn+4" ++ }, ++ "path": [ ++ { ++ "x": 120.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 120.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIAm2901ALUInclDecode#0", ++ "pinName": "OVR" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "OVR" ++ }, ++ "path": [ ++ { ++ "x": 115.0, ++ "y": 70.0 ++ }, ++ { ++ "x": 115.0, ++ "y": 220.0 ++ } ++ ] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUOneBit.json index 00000000,00000000..b6b05e1d new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUOneBit.json @@@ -1,0 -1,0 +1,521 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 90.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "R", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "S", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "F", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 75.0 ++ }, ++ "name": "FN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "Cin", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 65.0 ++ }, ++ "name": "SN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Cout", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "RN", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 85.0 ++ }, ++ "name": "L", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "CinE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "CoutE", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.2, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 60.0, ++ "y": 55.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 54.0, ++ "y": 69.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 49.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 90.0, ++ "y": 70.0 ++ }, ++ "id": "GUImux1", ++ "name": "GUImux1#0" ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 20.0 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 290.0 ++ }, ++ "id": "GUIxor", ++ "name": "GUIxor#1" ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 70.0 ++ }, ++ "id": "GUIxor", ++ "name": "GUIxor#2" ++ }, ++ { ++ "pos": { ++ "x": 60.0, ++ "y": 20.0 ++ }, ++ "id": "GUIfulladder", ++ "name": "GUIfulladder#0" ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 190.0 ++ }, ++ "id": "GUIxor", ++ "name": "GUIxor#0" ++ }, ++ { ++ "pos": { ++ "x": 135.0, ++ "y": 20.0 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#1" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "Cin" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "CoutE" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 75.0 ++ }, ++ { ++ "x": 5.0, ++ "y": 10.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 10.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "CinE" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 125.0 ++ }, ++ { ++ "x": 7.5, ++ "y": 35.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "R" ++ }, ++ "pin2": { ++ "compName": "GUIxor#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "RN" ++ }, ++ "pin2": { ++ "compName": "GUIxor#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "S" ++ }, ++ "pin2": { ++ "compName": "GUIxor#1", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "SN" ++ }, ++ "pin2": { ++ "compName": "GUIxor#1", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "FN" ++ }, ++ "pin2": { ++ "compName": "GUIxor#2", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 375.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 85.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "L" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "S0" ++ }, ++ "path": [ ++ { ++ "x": 87.5, ++ "y": 425.0 ++ }, ++ { ++ "x": 87.5, ++ "y": 75.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIfulladder#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIxor#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 195.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIfulladder#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 50.0, ++ "y": 35.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIxor#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 295.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIfulladder#0", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 55.0, ++ "y": 45.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIfulladder#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "I0" ++ }, ++ "path": [ ++ { ++ "x": 100.0, ++ "y": 25.0 ++ }, ++ { ++ "x": 100.0, ++ "y": 65.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 65.0 ++ }, ++ { ++ "x": 85.0, ++ "y": 85.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIfulladder#0", ++ "pinName": "Z" ++ }, ++ "pin2": { ++ "compName": "GUIand#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUImux1#0", ++ "pinName": "I1" ++ }, ++ "path": [ ++ { ++ "x": 82.5, ++ "y": 65.0 ++ }, ++ { ++ "x": 82.5, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUImux1#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUIxor#2", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Cout" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIxor#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "F" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901ALUOneBit", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901DestDecode.json index 00000000,00000000..d80d0806 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901DestDecode.json @@@ -1,0 -1,0 +1,1035 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 60.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "LSH", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "NSH", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "RSH", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I6", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "YF", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I7", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "RAMWE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 55.0 ++ }, ++ "name": "QWE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I8", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.25, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 159.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 104.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 150.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 15.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 109.0, ++ "y": 214.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 14.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 24.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 104.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 9.0, ++ "y": 64.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 154.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 54.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 44.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 39.0, ++ "y": 134.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 99.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 74.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 115.0, ++ "y": 210.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 110.0, ++ "y": 105.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 145.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 80.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 130.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I8" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I7" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 55.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I6" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 165.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 40.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 65.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "NSH" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 135.0, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 45.0, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 10.0, ++ "y": 115.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 115.0 ++ }, ++ { ++ "x": 45.0, ++ "y": 105.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 40.0, ++ "y": 145.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "RAMWE" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 60.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 100.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "LSH" ++ }, ++ "path": [ ++ { ++ "x": 125.0, ++ "y": 140.0 ++ }, ++ { ++ "x": 125.0, ++ "y": 180.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 150.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#8", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "RSH" ++ }, ++ "path": [ ++ { ++ "x": 130.0, ++ "y": 20.0 ++ }, ++ { ++ "x": 130.0, ++ "y": 60.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#9", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 75.0, ++ "y": 170.0 ++ }, ++ { ++ "x": 105.0, ++ "y": 170.0 ++ }, ++ { ++ "x": 105.0, ++ "y": 120.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#10", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 110.0, ++ "y": 155.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#12", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#12", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 110.0, ++ "y": 225.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#11", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "YF" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#12", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "QWE" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901DestDecode", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json index 00000000,00000000..6af804d7 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json @@@ -1,0 -1,0 +1,408 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 60.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 0.0, ++ "y": 55.0 ++ }, ++ "name": "D4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "Q1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "Q2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "Q3", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "C", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "Q4", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "D1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "WE", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 35.0 ++ }, ++ "name": "D2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 45.0 ++ }, ++ "name": "D3", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.4, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 32.5 ++ }, ++ "id": "GUIdff", ++ "name": "GUIdff#1" ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 7.5 ++ }, ++ "id": "GUIdff", ++ "name": "GUIdff#0" ++ }, ++ { ++ "pos": { ++ "x": 41.5, ++ "y": 36.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 41.5, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 41.5, ++ "y": 61.5 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 5.0, ++ "y": 15.0 ++ }, ++ "id": "GUIand", ++ "name": "GUIand#0" ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 82.5 ++ }, ++ "id": "GUIdff", ++ "name": "GUIdff#3" ++ }, ++ { ++ "pos": { ++ "x": 50.0, ++ "y": 57.5 ++ }, ++ "id": "GUIdff", ++ "name": "GUIdff#2" ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "C" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "WE" ++ }, ++ "pin2": { ++ "compName": "GUIand#0", ++ "pinName": "B" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUIand#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdff#0", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 42.5, ++ "y": 12.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdff#1", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdff#2", ++ "pinName": "C" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUIdff#3", ++ "pinName": "C" ++ }, ++ "path": [ ++ { ++ "x": 42.5, ++ "y": 87.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D1" ++ }, ++ "pin2": { ++ "compName": "GUIdff#0", ++ "pinName": "D" ++ }, ++ "path": [ ++ { ++ "x": 17.5, ++ "y": 62.5 ++ }, ++ { ++ "x": 17.5, ++ "y": 42.5 ++ }, ++ { ++ "x": 45.0, ++ "y": 42.5 ++ }, ++ { ++ "x": 45.0, ++ "y": 22.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D2" ++ }, ++ "pin2": { ++ "compName": "GUIdff#1", ++ "pinName": "D" ++ }, ++ "path": [ ++ { ++ "x": 22.5, ++ "y": 87.5 ++ }, ++ { ++ "x": 22.5, ++ "y": 47.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D3" ++ }, ++ "pin2": { ++ "compName": "GUIdff#2", ++ "pinName": "D" ++ }, ++ "path": [ ++ { ++ "x": 27.5, ++ "y": 112.5 ++ }, ++ { ++ "x": 27.5, ++ "y": 72.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "D4" ++ }, ++ "pin2": { ++ "compName": "GUIdff#3", ++ "pinName": "D" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 137.5 ++ }, ++ { ++ "x": 32.5, ++ "y": 97.5 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdff#0", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q1" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdff#1", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q2" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdff#2", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q3" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUIdff#3", ++ "pinName": "Q" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "Q4" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "GUIAm2901QReg", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/components/am2901/GUIAm2901SourceDecode.json index 00000000,00000000..e36193d9 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901SourceDecode.json @@@ -1,0 -1,0 +1,1076 @@@ ++mograsim version: 0.1.3 ++{ ++ "width": 35.0, ++ "height": 50.0, ++ "interfacePins": [ ++ { ++ "location": { ++ "x": 35.0, ++ "y": 45.0 ++ }, ++ "name": "RD", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 25.0 ++ }, ++ "name": "I0", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 15.0 ++ }, ++ "name": "I1", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 0.0, ++ "y": 5.0 ++ }, ++ "name": "I2", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ "name": "SQ", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 35.0 ++ }, ++ "name": "SA", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 15.0 ++ }, ++ "name": "RA", ++ "logicWidth": 1 ++ }, ++ { ++ "location": { ++ "x": 35.0, ++ "y": 25.0 ++ }, ++ "name": "SB", ++ "logicWidth": 1 ++ } ++ ], ++ "submodel": { ++ "innerScale": 0.25, ++ "subComps": [ ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 94.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 139.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 10.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 94.0, ++ "y": 179.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#15", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#1", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 19.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#0", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#3", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 4.0, ++ "y": 144.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#2", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 104.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 6.5, ++ "y": 99.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 31.5, ++ "y": 54.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#6", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 134.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 34.0, ++ "y": 64.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 36.5, ++ "y": 99.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 99.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 64.0, ++ "y": 59.0 ++ }, ++ "id": "WireCrossPoint", ++ "name": "WireCrossPoint#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 70.0, ++ "y": 170.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#12", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 70.0, ++ "y": 130.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#11", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 100.0, ++ "y": 170.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#14", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 100.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#13", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 70.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#10", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 70.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#9", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 70.0, ++ "y": 10.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#8", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 90.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#5", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 50.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#4", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 170.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#7", ++ "params": 1 ++ }, ++ { ++ "pos": { ++ "x": 40.0, ++ "y": 130.0 ++ }, ++ "id": "GUINandGate", ++ "name": "GUINandGate#6", ++ "params": 1 ++ } ++ ], ++ "innerWires": [ ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I2" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 5.0 ++ }, ++ { ++ "x": 35.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#1", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#0", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#0", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#2", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#12", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 5.0, ++ "y": 195.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 195.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 185.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I1" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 55.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#3", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#1", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 65.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "_submodelinterface", ++ "pinName": "I0" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#4", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#2", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#5", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 7.5, ++ "y": 112.5 ++ }, ++ { ++ "x": 32.5, ++ "y": 112.5 ++ }, ++ { ++ "x": 32.5, ++ "y": 105.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#0", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 20.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#6", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#5", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 32.5, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#1", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#3", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#7", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#4", ++ "pinName": "B" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#8", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#6", ++ "pinName": "A" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#9", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 35.0, ++ "y": 175.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#2", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 37.5, ++ "y": 35.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 35.0 ++ }, ++ { ++ "x": 65.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#10", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#7", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 37.5, ++ "y": 185.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#3", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#8", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#4", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 55.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#11", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#9", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 65.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#5", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 95.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#12", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#10", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 105.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#6", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 135.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#13", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#11", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 65.0, ++ "y": 145.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#7", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#12", ++ "pinName": "A" ++ } ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#8", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#13", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 15.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#14", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#13", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 25.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#9", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "RA" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#10", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "SB" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#11", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "SA" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#12", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#14", ++ "pinName": "A" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 175.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "WireCrossPoint#15", ++ "pinName": "" ++ }, ++ "pin2": { ++ "compName": "GUINandGate#14", ++ "pinName": "B" ++ }, ++ "path": [ ++ { ++ "x": 95.0, ++ "y": 185.0 ++ } ++ ] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#13", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "SQ" ++ }, ++ "path": [] ++ }, ++ { ++ "pin1": { ++ "compName": "GUINandGate#14", ++ "pinName": "Y" ++ }, ++ "pin2": { ++ "compName": "_submodelinterface", ++ "pinName": "RD" ++ }, ++ "path": [] ++ } ++ ] ++ }, ++ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer", ++ "symbolRendererParams": { ++ "centerText": "Am2901SourceDecode", ++ "horizontalComponentCenter": 17.5, ++ "centerTextHeight": 5.0, ++ "pinLabelHeight": 3.5, ++ "pinLabelMargin": 0.5 ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/DialogManager.java index 00000000,00000000..347e6222 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/DialogManager.java @@@ -1,0 -1,0 +1,131 @@@ ++package net.mograsim.logic.model.editor; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.layout.GridData; ++import org.eclipse.swt.layout.GridLayout; ++import org.eclipse.swt.widgets.Button; ++import org.eclipse.swt.widgets.Display; ++import org.eclipse.swt.widgets.Label; ++import org.eclipse.swt.widgets.MessageBox; ++import org.eclipse.swt.widgets.Shell; ++import org.eclipse.swt.widgets.Text; ++ ++public class DialogManager ++{ ++ private Shell parent; ++ ++ public DialogManager(Shell parent) ++ { ++ this.parent = parent; ++ } ++ ++ public void openWarningDialog(String title, String message) ++ { ++ MessageBox b = new MessageBox(parent, SWT.ICON_WARNING | SWT.OK); ++ b.setText(title); ++ b.setMessage(message); ++ b.open(); ++ } ++ ++ public static class InteractiveDialog ++ { ++ private String[] finalInput; ++ private final Display display; ++ private final Shell shell; ++ private final Button b1, b2; ++ private Text[] textFields; ++ private InteractiveDialog.InteractiveDialogState state; ++ ++ public InteractiveDialog(String title, String acceptLabel, String cancelLabel, String... inputs) ++ { ++ display = Display.getDefault(); ++ shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.ON_TOP | SWT.APPLICATION_MODAL); ++ shell.setMinimumSize(500, 150); ++ shell.setText(title); ++ GridLayout layout = new GridLayout(); ++ layout.numColumns = 2; ++ shell.setLayout(layout); ++ ++ this.textFields = new Text[inputs.length]; ++ for (int i = 0; i < inputs.length; i++) ++ { ++ Label textFieldName = new Label(shell, SWT.NONE); ++ textFieldName.setText(inputs[i].concat(":")); ++ GridData g = new GridData(); ++ g.grabExcessHorizontalSpace = true; ++ g.horizontalAlignment = SWT.FILL; ++ Text newTextField = new Text(shell, SWT.BORDER); ++ newTextField.setLayoutData(g); ++ textFields[i] = newTextField; ++ } ++ b1 = new Button(shell, SWT.PUSH); ++ b1.addListener(SWT.Selection, e -> ++ { ++ state = InteractiveDialogState.ACCEPTED; ++ buildFinalInput(); ++ dispose(); ++ }); ++ b1.setText(acceptLabel); ++ b2 = new Button(shell, SWT.PUSH); ++ b2.addListener(SWT.Selection, e -> ++ { ++ state = InteractiveDialogState.CANCELLED; ++ buildFinalInput(); ++ dispose(); ++ }); ++ b2.setText(cancelLabel); ++ ++ state = InteractiveDialogState.ACTIVE; ++ ++ shell.pack(); ++ } ++ ++ public String getText() ++ { ++ return getText(0); ++ } ++ ++ public String getText(int index) ++ { ++ if (!shell.isDisposed()) ++ return textFields[index].getText(); ++ else ++ return finalInput[index]; ++ } ++ ++ public void open() ++ { ++ shell.open(); ++ while (!shell.isDisposed()) ++ if (!display.readAndDispatch()) ++ display.sleep(); ++ } ++ ++ public void dispose() ++ { ++ shell.dispose(); ++ } ++ ++ public InteractiveDialog.InteractiveDialogState getState() ++ { ++ return state; ++ } ++ ++ private void buildFinalInput() ++ { ++ finalInput = new String[textFields.length]; ++ for (int i = 0; i < textFields.length; i++) ++ finalInput[i] = textFields[i].getText(); ++ } ++ ++ public static enum InteractiveDialogState ++ { ++ ACTIVE, ACCEPTED, CANCELLED; ++ } ++ } ++ ++ public static void openAddPinDialog(Editor editor, double x, double y) ++ { ++ ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java index 00000000,00000000..fac23049 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java @@@ -1,0 -1,0 +1,89 @@@ ++package net.mograsim.logic.model.editor; ++ ++import org.eclipse.swt.graphics.Color; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Font; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.model.ViewModelModifiable; ++import net.mograsim.logic.model.model.wires.MovablePin; ++import net.mograsim.logic.model.model.wires.Pin; ++import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; ++import net.mograsim.preferences.Preferences; ++ ++public class EditableSubmodelComponent extends DeserializedSubmodelComponent ++{ ++ private static final double labelFontHeight = 5; ++ private static final double pinNameFontHeight = 3; ++ private String label; ++ ++ public EditableSubmodelComponent(ViewModelModifiable model, String label) ++ { ++ super(model, label); //TODO: set name properly ++ this.label = label; ++ setSubmodelScale(0.2); ++ addSubmodelInterface(new MovablePin(this, "A Pin", 1, 0, 10)); ++ ++ } ++ ++ public ViewModelModifiable getSubmodelModifiable() ++ { ++ return submodelModifiable; ++ } ++ ++ @Override ++ protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) ++ { ++ Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); ++ if (foreground != null) ++ gc.setForeground(foreground); ++ gc.drawRectangle(getBounds()); ++ } ++ ++ @Override ++ protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) ++ { ++ Font oldFont = gc.getFont(); ++ gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle())); ++ Point textExtent = gc.textExtent(label); ++ Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); ++ if (textColor != null) ++ gc.setForeground(textColor); ++ gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2, ++ true); ++ gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle())); ++ for (String name : pinsUnmodifiable.keySet()) ++ { ++ Pin p = pinsUnmodifiable.get(name); ++ Point pos = p.getPos(); ++ gc.drawText(name, pos.x, pos.y, true); ++ } ++ gc.setFont(oldFont); ++ } ++ ++ public void setSubmodelScale(double scale) ++ { ++ super.setSubmodelScale(scale); ++ } ++ ++ public double getSubmodelScale() ++ { ++ return super.getSubmodelScale(); ++ } ++ ++ public void setSize(double width, double height) ++ { ++ super.setSize(width, height); ++ } ++ ++ public String getLabel() ++ { ++ return label; ++ } ++ ++ public void setLabel(String label) ++ { ++ this.label = label; ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java index 00000000,00000000..36dcbc7f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java @@@ -1,0 -1,0 +1,215 @@@ ++package net.mograsim.logic.model.editor; ++ ++import java.util.HashMap; ++import java.util.HashSet; ++import java.util.Map; ++import java.util.Optional; ++import java.util.Set; ++ ++import com.google.gson.JsonElement; ++import com.google.gson.JsonObject; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.editor.handles.ComponentHandle; ++import net.mograsim.logic.model.editor.handles.Handle; ++import net.mograsim.logic.model.editor.handles.HandleManager; ++import net.mograsim.logic.model.editor.handles.PinHandle; ++import net.mograsim.logic.model.editor.states.StateManager; ++import net.mograsim.logic.model.model.ViewModelModifiable; ++import net.mograsim.logic.model.model.components.GUIComponent; ++import net.mograsim.logic.model.model.wires.GUIWire; ++import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; ++import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; ++ ++public final class Editor ++{ ++ final Selection selection = new Selection(); ++ final Set copyBuffer = new HashSet<>(); ++ public final DeserializedSubmodelComponent toBeEdited; ++ public final HandleManager handleManager; ++ final static Map identifierPerComponent = new HashMap<>(); ++ public final EditorGUI gui; ++ public final StateManager stateManager; ++ private final SaveLoadManager saveManager; ++ Snapping snapping = Snapping.ABSOLUTE; ++ private double snapX = 5, snapY = 5; ++ public final DialogManager dialogManager; ++ ++ public Editor(DeserializedSubmodelComponent toBeEdited) ++ { ++ this.toBeEdited = toBeEdited; ++ handleManager = new HandleManager(this); ++ gui = new EditorGUI(this); ++ stateManager = new StateManager(this); ++ handleManager.init(); ++ saveManager = new SaveLoadManager(this); ++ dialogManager = new DialogManager(gui.shell); ++ ++ toBeEdited.submodel.addComponentRemovedListener(c -> identifierPerComponent.remove(c)); ++ ++ gui.open(); ++ } ++ ++ public ViewModelModifiable getSubmodel() ++ { ++ return toBeEdited.getSubmodelModifiable(); ++ } ++ ++ public Selection getSelection() ++ { ++ return selection; ++ } ++ ++ //TODO: Remove this error prone method: Relative offset may change between multiple moves, ++ //because Handles have different ways of responding to reqMove(...), causing strange behaviour ++ @Deprecated ++ public void moveSelection(double x, double y) ++ { ++ Point ref = selection.getTopLeft(); ++ Point snapped = new Point(x, y); ++ applySnapping(snapped); ++ ++ for (Handle c : selection) ++ { ++ double newX, newY; ++ newX = snapped.x + c.getPosX() - ref.x; ++ newY = snapped.y + c.getPosY() - ref.y; ++ c.reqMove(newX, newY); ++ } ++ } ++ ++ public void moveHandles(double x, double y, Map handleOffsetMap) ++ { ++ Point snapped = new Point(x, y); ++ applySnapping(snapped); ++ ++ for (Handle c : handleOffsetMap.keySet()) ++ { ++ Point offset = handleOffsetMap.get(c); ++ double newX, newY; ++ newX = snapped.x + offset.x; ++ newY = snapped.y + offset.y; ++ c.reqMove(newX, newY); ++ } ++ } ++ ++ public void deleteSelection() ++ { ++ selection.forEach(h -> h.reqDelete()); ++ selection.clear(); ++ } ++ ++ public void copy() ++ { ++ copyBuffer.clear(); ++ Point refPoint = selection.getTopLeft(); ++ for (Handle h : selection) ++ { ++ Optional cInfo = h.reqCopy(refPoint); ++ if(cInfo.isPresent()) ++ copyBuffer.add(cInfo.get()); ++ } ++ } ++ ++ public void paste(double x, double y) ++ { ++ selection.clear(); ++ for (ComponentInfo info : copyBuffer) ++ { ++ GUIComponent comp = addComponent(info.identifier, info.params); ++ ComponentHandle h = handleManager.getHandle(comp); ++ h.reqMove(info.relX, info.relY); ++ selection.add(h); ++ } ++ moveSelection(x, y); ++ } ++ ++ public void save() ++ { ++ saveManager.save(); ++ } ++ ++ public void addComponent(double x, double y) ++ { ++ GUIComponent c = addComponent(gui.getAddListSelected(), new JsonObject()); ++ selection.clear(); ++ selection.add(handleManager.getHandle(c)); ++ moveSelection(x, y); ++ } ++ ++ private GUIComponent addComponent(String identifier, JsonElement params) ++ { ++ GUIComponent comp = IndirectGUIComponentCreator.createComponent(toBeEdited.getSubmodelModifiable(), identifier, ++ params); ++ identifierPerComponent.put(comp, identifier); ++ return comp; ++ } ++ ++ public static String getIdentifier(GUIComponent c) ++ { ++ return identifierPerComponent.get(c); ++ } ++ ++ public void duplicate() ++ { ++ copy(); ++ Point origin = selection.getTopLeft(); ++ paste(origin.x + 20, origin.y + 20); ++ } ++ ++ private void applySnapping(Point newP) ++ { ++ switch (snapping) ++ { ++ case OFF: ++ break; ++ case ABSOLUTE: ++ newP.x -= newP.x % snapX; ++ newP.y -= newP.y % snapY; ++ break; ++ } ++ } ++ ++ public static class ComponentInfo ++ { ++ public final double relX, relY; ++ public final String identifier; ++ public final JsonElement params; ++ ++ public ComponentInfo(double relX, double relY, String identifier, JsonElement params) ++ { ++ this.relX = relX; ++ this.relY = relY; ++ this.identifier = identifier; ++ this.params = params; ++ } ++ } ++ ++ public Point getCanvasMousePosition() ++ { ++ //TODO ++ org.eclipse.swt.graphics.Point canvasLoc = gui.logicCanvas.getLocation(), ++ mouseLoc = gui.display.getCursorLocation(), shellLoc = gui.shell.getLocation(); ++ return new Point(mouseLoc.x - shellLoc.x - canvasLoc.x, mouseLoc.y - shellLoc.y - canvasLoc.y); ++ } ++ ++ public Point getWorldMousePosition() ++ { ++ return gui.logicCanvas.canvasToWorldCoords(getCanvasMousePosition()); ++ } ++ ++ public void addWire(PinHandle a, PinHandle b) ++ { ++ new GUIWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]); ++ } ++ ++ public static enum Snapping ++ { ++ OFF, ABSOLUTE; ++ } ++ ++ public static void main(String[] args) ++ { ++ SaveLoadManager.openLoadDialog(); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorCanvas.java index 00000000,00000000..df6b9137 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorCanvas.java @@@ -1,0 -1,0 +1,42 @@@ ++package net.mograsim.logic.model.editor; ++ ++import java.util.Collection; ++ ++import org.eclipse.swt.graphics.Color; ++import org.eclipse.swt.widgets.Composite; ++ ++import net.haspamelodica.swt.helper.gcs.TranslatedGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.LogicUICanvas; ++import net.mograsim.logic.model.editor.handles.Handle; ++import net.mograsim.preferences.Preferences; ++ ++public class EditorCanvas extends LogicUICanvas ++{ ++ private Collection handles; ++ ++ public EditorCanvas(Composite parent, int style, Editor editor) ++ { ++ super(parent, style, editor.toBeEdited.submodel); ++ ++ handles = editor.handleManager.getHandles(); ++ editor.handleManager.addHandleAddedListener(h -> ++ h.addRedrawListener(this::redrawThreadsafe)); ++ //Is this even necessary? The Handle should be finalized by the gc ++ editor.handleManager.addHandleRemovedListener(h -> h.removeRedrawListener(this::redrawThreadsafe)); ++ ++ addZoomedRenderer(gc -> ++ { ++ Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom); ++ Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background"); ++ if (background != null) ++ setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the ++ // canvas ++ ++ TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false); ++ editor.toBeEdited.outlineRenderer.render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom)); ++ ++ handles.forEach(h -> h.render(gc, visibleRegion)); ++ }); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorGUI.java index 00000000,00000000..2627d3c0 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorGUI.java @@@ -1,0 -1,0 +1,78 @@@ ++package net.mograsim.logic.model.editor; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.layout.GridData; ++import org.eclipse.swt.layout.GridLayout; ++import org.eclipse.swt.widgets.Display; ++import org.eclipse.swt.widgets.List; ++import org.eclipse.swt.widgets.Shell; ++ ++import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay; ++import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; ++import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; ++ ++public class EditorGUI ++{ ++ final Display display; ++ final Shell shell; ++ public final EditorCanvas logicCanvas; ++ private final List addList; ++ ++ public EditorGUI(Editor editor) ++ { ++ display = Display.getDefault(); ++ shell = new Shell(display); ++ ++ //Layout ++ GridLayout layout = new GridLayout(); ++ shell.setLayout(layout); ++ layout.numColumns = 2; ++ ++ GridData d = new GridData(); ++ d.grabExcessVerticalSpace = true; ++ d.verticalAlignment = SWT.FILL; ++ addList = new List(shell, SWT.FILL); ++ addList.setLayoutData(d); ++ refreshAddList(); ++ ++ d = new GridData(); ++ d.grabExcessHorizontalSpace = true; ++ d.horizontalAlignment = SWT.FILL; ++ d.grabExcessVerticalSpace = true; ++ d.verticalAlignment = SWT.FILL; ++ ++ logicCanvas = new EditorCanvas(shell, SWT.TRAIL, editor); ++ logicCanvas.setLayoutData(d); ++ ++ ++ new EditorUserInput(editor, this); ++ ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(logicCanvas); ++ userInput.buttonDrag = 3; ++ userInput.buttonZoom = 2; ++ userInput.enableUserInput(); ++ new ZoomableCanvasOverlay(logicCanvas, null).enableScale(); ++ } ++ ++ public void refreshAddList() ++ { ++ addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().toArray(String[]::new)); ++ addList.select(0); ++ } ++ ++ public String getAddListSelected() ++ { ++ String[] selection = addList.getSelection(); ++ if(selection.length == 0) ++ throw new IllegalStateException("Selection in the Add Component List may never be empty!"); ++ return selection[0]; ++ } ++ ++ public void open() ++ { ++ shell.open(); ++ while (!shell.isDisposed()) ++ if (!display.readAndDispatch()) ++ display.sleep(); ++ } ++ ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java index 00000000,00000000..cb66e94f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java @@@ -1,0 -1,0 +1,95 @@@ ++package net.mograsim.logic.model.editor; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.events.KeyEvent; ++import org.eclipse.swt.events.KeyListener; ++import org.eclipse.swt.events.MouseEvent; ++import org.eclipse.swt.events.MouseListener; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++ ++public class EditorUserInput ++{ ++ public EditorUserInput(Editor editor, EditorGUI gui) ++ { ++ gui.logicCanvas.addMouseListener(new MouseListener() ++ { ++ @Override ++ public void mouseDoubleClick(MouseEvent e) ++ { ++ // TODO Auto-generated method stub ++ } ++ ++ @Override ++ public void mouseDown(MouseEvent e) ++ { ++ Point clicked = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y); ++ switch (e.button) ++ { ++ case 1: ++ editor.handleManager.click(clicked, e.stateMask); ++ break; ++ } ++ ++ } ++ ++ @Override ++ public void mouseUp(MouseEvent e) {} ++ }); ++ ++ gui.logicCanvas.addMouseMoveListener((e) -> ++ { ++ Point dest = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y); ++ editor.stateManager.mouseMoved(dest.x, dest.y); ++ }); ++ ++ gui.logicCanvas.addKeyListener(new KeyListener() ++ { ++ ++ @Override ++ public void keyReleased(KeyEvent e) ++ { ++ // TODO Auto-generated method stub ++ ++ } ++ ++ @Override ++ public void keyPressed(KeyEvent e) ++ { ++ switch (e.keyCode) ++ { ++ case 'c': ++ if ((e.stateMask & SWT.CTRL) == SWT.CTRL) ++ editor.stateManager.copy(); ++ break; ++ case 'v': ++ if ((e.stateMask & SWT.CTRL) == SWT.CTRL) ++ editor.stateManager.paste(); ++ break; ++ case 'd': ++ if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT) ++ editor.stateManager.duplicate(); ++ break; ++ case 'g': ++ editor.stateManager.grab(); ++ break; ++ case 'r': ++ editor.stateManager.delete(); ++ break; ++ case 's': ++ if ((e.stateMask & SWT.CTRL) == SWT.CTRL) ++ editor.save(); ++ break; ++ case 'a': ++ if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT) ++ editor.stateManager.add(); ++ break; ++ case 'h': ++ editor.stateManager.boxSelect(); ++ break; ++ } ++ ++ } ++ }); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java index 00000000,00000000..848227bc new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java @@@ -1,0 -1,0 +1,69 @@@ ++package net.mograsim.logic.model.editor; ++ ++import java.io.IOException; ++ ++import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog; ++import net.mograsim.logic.model.model.ViewModelModifiable; ++import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; ++import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer; ++import net.mograsim.logic.model.util.JsonHandler; ++ ++public class SaveLoadManager ++{ ++ private String savePath = null; ++ private Editor editor; ++ ++ public SaveLoadManager(Editor editor) ++ { ++ this.editor = editor; ++ } ++ ++ public void save() ++ { ++ if (savePath == null) ++ openSaveAsDialog(); ++ else ++ innerSave(); ++ } ++ ++ public void openSaveAsDialog() ++ { ++ InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path"); ++ d.open(); ++ ++ if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState())) ++ { ++ savePath = d.getText(); ++ innerSave(); ++ } ++ } ++ ++ private void innerSave() ++ { ++ try ++ { ++ JsonHandler.writeJson(editor.toBeEdited.calculateParams(c -> ++ { ++ if (Editor.identifierPerComponent.containsKey(c)) ++ return Editor.identifierPerComponent.get(c); ++ return "class:" + c.getClass().getCanonicalName(); ++ }), savePath); ++ } catch (IOException e) ++ { ++ savePath = null; ++ System.err.println("Failed to save component!"); ++ e.printStackTrace(); ++ } ++ } ++ ++ public static void openLoadDialog() ++ { ++ InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path"); ++ load.open(); ++ if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState())) ++ { ++ new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer ++ .create(new ViewModelModifiable(), load.getText())); ++ } ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Selection.java index 00000000,00000000..23135e4a new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Selection.java @@@ -1,0 -1,0 +1,132 @@@ ++package net.mograsim.logic.model.editor; ++ ++import java.util.Collection; ++import java.util.HashMap; ++import java.util.HashSet; ++import java.util.Iterator; ++import java.util.Map; ++import java.util.Set; ++import java.util.function.DoubleBinaryOperator; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.editor.handles.Handle; ++ ++public class Selection implements Iterable ++{ ++ private Set selection = new HashSet<>(); ++ ++ public Map calculateOffsets() ++ { ++ Map offsets = new HashMap<>(); ++ Point ref = getTopLeft(); ++ selection.forEach(h -> offsets.put(h, new Point(h.getPosX() - ref.x, h.getPosY() - ref.y))); ++ return offsets; ++ } ++ ++ public Rectangle getBounds() ++ { ++ Point pos1 = getTopLeft(); ++ Point pos2 = getBottomRight(); ++ return new Rectangle(pos1.x, pos1.y, pos2.x - pos1.x, pos2.y - pos1.y); ++ } ++ ++ public double getWidth() ++ {// TODO: Compute this more efficiently ++ return getTopRight().x - getTopLeft().x; ++ } ++ ++ public double getHeight() ++ { ++ return getBottomLeft().y - getTopLeft().y; ++ } ++ ++ public Point getTopLeft() ++ { ++ return getCorner(Double.MAX_VALUE, Double::min, r -> 0, Double.MAX_VALUE, Double::min, r -> 0); ++ } ++ ++ public Point getTopRight() ++ { ++ return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, Double.MAX_VALUE, Double::min, r -> 0); ++ } ++ ++ public Point getBottomLeft() ++ { ++ return getCorner(Double.MAX_VALUE, Double::min, r -> 0, -Double.MAX_VALUE, Double::max, r -> r.height); ++ } ++ ++ public Point getBottomRight() ++ { ++ return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, -Double.MAX_VALUE, Double::max, r -> r.height); ++ } ++ ++ public Point getCorner(double xIdentity, DoubleBinaryOperator xOp, Offset xOffset, double yIdentity, ++ DoubleBinaryOperator yOp, Offset yOffset) ++ { ++ double x = xIdentity, y = yIdentity; ++ for (Handle c : selection) ++ { ++ Rectangle bounds = c.getBounds(); ++ x = xOp.applyAsDouble(x, bounds.x + xOffset.computeOffset(bounds)); ++ y = yOp.applyAsDouble(y, bounds.y + yOffset.computeOffset(bounds)); ++ } ++ return new Point(x, y); ++ } ++ ++ private static interface Offset ++ { ++ public double computeOffset(Rectangle bounds); ++ } ++ ++ public void add(Handle h) ++ { ++ selection.add(h); ++ h.onSelect(); ++ } ++ ++ public void remove(Handle h) ++ { ++ selection.remove(h); ++ h.onDeselect(); ++ } ++ ++ public void clear() ++ { ++ selection.forEach(h -> h.onDeselect()); ++ selection.clear(); ++ } ++ ++ public int size() ++ { ++ return selection.size(); ++ } ++ ++ public boolean contains(Handle h) ++ { ++ return selection.contains(h); ++ } ++ ++ public void addAll(Collection handles) ++ { ++ handles.forEach(h -> h.onSelect()); ++ selection.addAll(handles); ++ } ++ ++ @Override ++ public Iterator iterator() ++ { ++ return selection.iterator(); ++ } ++ ++ @Override ++ public String toString() ++ { ++ return selection.toString(); ++ } ++ ++ public boolean isEmpty() ++ { ++ return selection.isEmpty(); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java index 00000000,00000000..52b634da new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java @@@ -1,0 -1,0 +1,96 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import java.util.Optional; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.Editor.ComponentInfo; ++import net.mograsim.logic.model.model.components.GUIComponent; ++ ++public class ComponentHandle extends Handle ++{ ++ public final GUIComponent parent; ++ private final static double POS_OFFSET = 2.0d; ++ private final static double LENGTH_OFFSET = POS_OFFSET * 2; ++ boolean selected = false; ++ ++ public ComponentHandle(GUIComponent parent) ++ { ++ this.parent = parent; ++ Rectangle bounds = parent.getBounds(); ++ setSize(bounds.width, bounds.height); ++ parent.addComponentResizedListener((c) -> ++ { ++ Rectangle pBounds = c.getBounds(); ++ setSize(pBounds.width, pBounds.height); ++ }); ++ moveTo(parent.getPosX(), parent.getPosY()); ++ } ++ ++ @Override ++ protected void moveTo(double x, double y) ++ { ++ super.moveTo(x, y); ++ parent.moveTo(x, y); ++ } ++ ++ @Override ++ protected void render(GeneralGC gc) ++ { ++ if (selected) ++ { ++ gc.setLineWidth(2); ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); ++ Rectangle bounds = getBounds(); ++ bounds.x -= POS_OFFSET; ++ bounds.y -= POS_OFFSET; ++ bounds.width += LENGTH_OFFSET; ++ bounds.height += LENGTH_OFFSET; ++ gc.drawRectangle(bounds); ++ } ++ } ++ ++ @Override ++ public void reqMove(double x, double y) ++ { ++ moveTo(x, y); ++ } ++ ++ @Override ++ public void onSelect() ++ { ++ selected = true; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void onDeselect() ++ { ++ selected = false; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void reqDelete() ++ { ++ parent.destroy(); ++ } ++ ++ @Override ++ public Optional reqCopy(Point refPoint) ++ { ++ return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y, ++ Editor.getIdentifier(parent), parent.getParams())); ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.COMPONENT; ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/CornerHandle.java index 00000000,00000000..b56ec2bb new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/CornerHandle.java @@@ -1,0 -1,0 +1,71 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; ++ ++public class CornerHandle extends Handle ++{ ++ private final static int LENGTH = 5; ++ private final DeserializedSubmodelComponent toBeEdited; ++ private boolean selected; ++ ++ public CornerHandle(DeserializedSubmodelComponent toBeEdited) ++ { ++ super(); ++ this.toBeEdited = toBeEdited; ++ setSize(LENGTH, LENGTH); ++ initPos(); ++ } ++ ++ @Override ++ protected void render(GeneralGC gc) ++ { ++ gc.setBackground(Display.getCurrent().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_DARK_GREEN)); ++ gc.fillRectangle(getPosX(), getPosY(), LENGTH, LENGTH); ++ } ++ ++ private void initPos() ++ { ++ Rectangle bounds = toBeEdited.getBounds(); ++ double subScale = toBeEdited.getSubmodelScale(); ++ moveTo(bounds.width / subScale, bounds.height / subScale); ++ } ++ ++ @Override ++ public void reqMove(double x, double y) ++ { ++ moveTo(x, y); ++ } ++ ++ @Override ++ public void onSelect() ++ { ++ selected = true; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void onDeselect() ++ { ++ selected = false; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ protected void moveTo(double x, double y) ++ { ++ super.moveTo(x, y); ++ double subScale = toBeEdited.getSubmodelScale(); ++ toBeEdited.setSize(x * subScale, y * subScale); ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.CORNER; ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/Handle.java index 00000000,00000000..454f4214 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/Handle.java @@@ -1,0 -1,0 +1,142 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import java.util.ArrayList; ++import java.util.Collection; ++import java.util.Optional; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.editor.Editor.ComponentInfo; ++import net.mograsim.logic.model.editor.states.EditorState; ++ ++public abstract class Handle ++{ ++ private final Rectangle bounds; ++ private final Collection redrawListeners, destroyListeners; ++ ++ public Handle() ++ { ++ redrawListeners = new ArrayList<>(); ++ destroyListeners = new ArrayList<>(); ++ bounds = new Rectangle(0, 0, 0, 0); ++ callRedrawListeners(); ++ } ++ ++ final public void render(GeneralGC gc, Rectangle visibleRegion) ++ { ++ if (bounds.intersects(visibleRegion)) ++ render(gc); ++ } ++ ++ protected abstract void render(GeneralGC gc); ++ ++ protected void setSize(double width, double height) ++ { ++ bounds.width = width; ++ bounds.height = height; ++ callRedrawListeners(); ++ } ++ ++ protected void moveTo(double x, double y) ++ { ++ bounds.x = x; ++ bounds.y = y; ++ callRedrawListeners(); ++ } ++ ++ public Rectangle getBounds() ++ { ++ return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); ++ } ++ ++ public void addRedrawListener(Runnable listener) ++ { ++ redrawListeners.add(listener); ++ } ++ ++ public void removeRedrawListener(Runnable listener) ++ { ++ redrawListeners.remove(listener); ++ } ++ ++ protected void callRedrawListeners() ++ { ++ redrawListeners.forEach(l -> l.run()); ++ } ++ ++ public double getPosX() ++ { ++ return bounds.x; ++ } ++ ++ public double getPosY() ++ { ++ return bounds.y; ++ } ++ ++ void destroy() ++ { ++ destroyListeners.forEach(l -> l.run()); ++ } ++ ++ public void addDestroyListener(Runnable listener) ++ { ++ redrawListeners.add(listener); ++ } ++ ++ public void removeDestroyListener(Runnable listener) ++ { ++ redrawListeners.remove(listener); ++ } ++ ++ public boolean contains(double x, double y) ++ { ++ return bounds.contains(x, y); ++ } ++ ++ public boolean contains(Point p) ++ { ++ return contains(p.x, p.y); ++ } ++ ++ /** ++ * Register a mouse click ++ * @param x Coordinate of the click in the world, not the display context ++ * @param y Coordinate of the click in the world, not the display context ++ * @return true if the click was consumed, false otherwise ++ */ ++ public boolean click(double x, double y, int stateMask, EditorState state) ++ { ++ if(contains(x, y)) ++ return state.clickedHandle(new HandleClickInfo(this, stateMask)); ++ return false; ++ } ++ ++ //@formatter:off ++ public void reqMove(double x, double y) {} ++ public void reqDelete() {} ++ public Optional reqCopy(Point refPoint) { return Optional.empty(); } ++ public void onSelect() {} ++ public void onDeselect() {} ++ //@formatter:on ++ ++ public abstract HandleType getType(); ++ ++ public static enum HandleType ++ { ++ COMPONENT, STATIC_PIN, INTERFACE_PIN, WIRE_POINT, WIRE, CORNER; ++ } ++ ++ public static class HandleClickInfo ++ { ++ public final int stateMask; ++ public final Handle clicked; ++ ++ HandleClickInfo(Handle clicked, int stateMask) ++ { ++ this.clicked = clicked; ++ this.stateMask = stateMask; ++ } ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java index 00000000,00000000..f999c96a new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java @@@ -1,0 -1,0 +1,391 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import java.util.ArrayList; ++import java.util.Collection; ++import java.util.Collections; ++import java.util.HashMap; ++import java.util.HashSet; ++import java.util.List; ++import java.util.Map; ++import java.util.Set; ++import java.util.function.Consumer; ++import java.util.stream.Collectors; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.states.EditorState; ++import net.mograsim.logic.model.model.ViewModelModifiable; ++import net.mograsim.logic.model.model.components.GUIComponent; ++import net.mograsim.logic.model.model.wires.GUIWire; ++import net.mograsim.logic.model.model.wires.MovablePin; ++import net.mograsim.logic.model.model.wires.Pin; ++ ++public class HandleManager ++{ ++ private final Map handlePerPin; ++ private final Map handlePerInterfacePin; ++ private final Map> pointHandlesPerWire; ++ private final Map handlePerWire; ++ private final Set handles; ++ private final Set wirePointHandles; ++ private final Map handlePerComp; ++ ++ private final Collection> handleAddedListeners; ++ private final Collection> handleRemovedListeners; ++ private final Editor editor; ++ private boolean initialized = false; ++ ++ private CornerHandle cornerHandle; ++ ++ public HandleManager(Editor editor) ++ { ++ this.editor = editor; ++ handlePerPin = new HashMap<>(); ++ handlePerInterfacePin = new HashMap<>(); ++ pointHandlesPerWire = new HashMap<>(); ++ handlePerComp = new HashMap<>(); ++ handles = new HashSet<>(); ++ wirePointHandles = new HashSet<>(); ++ handlePerWire = new HashMap<>(); ++ ++ handleAddedListeners = new ArrayList<>(); ++ handleRemovedListeners = new ArrayList<>(); ++ ++ ViewModelModifiable model = editor.getSubmodel(); ++ ++ model.addComponentAddedListener(c -> registerComponent(c)); ++ ++ model.addComponentRemovedListener(c -> ++ { ++ removeComponentHandle(c); ++ }); ++ ++ model.addWireAddedListener(w -> ++ { ++ registerWire(w); ++ }); ++ ++ model.addWireRemovedListener(w -> ++ { ++ removeWireHandle(w); ++ removeWirePointHandles(w); ++ }); ++ } ++ ++ //////////////////////////////////////// ++ // -- Setting up initial handles -- /// ++ ////////////////////////////////////// ++ ++ public void init() ++ { ++ if (initialized) ++ System.err.println("Warning! HandleManager was already initialized."); ++ else ++ { ++ ViewModelModifiable model = editor.getSubmodel(); ++ Map compsByName = model.getComponentsByName(); ++ Set comps = new HashSet<>(compsByName.values()); ++ GUIComponent interfaceComp = compsByName.get("_submodelinterface"); ++ comps.remove(interfaceComp); ++ registerInterfaceComponent(interfaceComp); ++ comps.forEach(c -> registerComponent(c)); ++ ++ model.getWires().forEach(w -> registerWire(w)); ++ addHandle(cornerHandle = new CornerHandle(editor.toBeEdited)); ++ } ++ } ++ ++ private void registerInterfaceComponent(GUIComponent c) ++ { ++ c.getPins().values().forEach(p -> addInterfacePinHandle(p)); ++ c.addPinAddedListener(p -> addInterfacePinHandle(p)); ++ c.addPinRemovedListener(p -> removeInterfacePinHandle(p)); ++ } ++ ++ private void registerComponent(GUIComponent c) ++ { ++ addComponentHandle(c); ++ ++ c.getPins().values().forEach(p -> addPinHandle(p)); ++ ++ c.addPinAddedListener(p -> addPinHandle(p)); ++ c.addPinRemovedListener(p -> removePinHandle(p)); ++ } ++ ++ private void registerWire(GUIWire wire) ++ { ++ wire.addPathChangedListener((w, diff) -> ++ { ++ if(diff != 0) ++ { ++ if(diff > 0) ++ { ++ for(int i = 0; i < diff; i++) ++ addWirePointHandle(w); ++ } ++ else ++ { ++ for(int i = 0; i > diff; i--) ++ { ++ removeLastWirePointHandle(wire); ++ } ++ } ++ ++ List wpHandles = pointHandlesPerWire.get(w); ++ int size = wpHandles.size(); ++ for(int i = 0; i < size; i++) ++ { ++ wpHandles.get(i).setIndex(i); ++ } ++ } ++ pointHandlesPerWire.get(w).forEach(h -> h.updatePos()); ++ }); ++ addWireHandle(wire); ++ if (wire.getPath() == null) ++ return; ++ for (int i = 0; i < wire.getPath().length; i++) ++ { ++ addWirePointHandle(wire); ++ } ++ } ++ ++ ///////////////////////////////////// ++ // -- Adding/Removing handles -- /// ++ /////////////////////////////////// ++ ++ private void addComponentHandle(GUIComponent c) ++ { ++ ComponentHandle h = new ComponentHandle(c); ++ handlePerComp.put(c, h); ++ addHandle(h); ++ } ++ ++ private void removeComponentHandle(GUIComponent c) ++ { ++ ComponentHandle h = handlePerComp.get(c); ++ handlePerComp.remove(c); ++ removeHandle(h); ++ } ++ ++ private void addPinHandle(Pin owner) ++ { ++ StaticPinHandle h = new StaticPinHandle(owner); ++ handlePerPin.put(owner, h); ++ addHandle(h); ++ } ++ ++ private void removePinHandle(Pin owner) ++ { ++ StaticPinHandle h = handlePerPin.get(owner); ++ handlePerPin.remove(owner); ++ removeHandle(h); ++ } ++ ++ private void addInterfacePinHandle(Pin p) ++ { ++ //The following is not an alternative to the cast, because the new pin is not yet in the map, when the listener is called ++ //editor.toBeEdited.getSubmodelMovablePins().get(p.name); ++ MovablePin pM = (MovablePin) p; ++ InterfacePinHandle h = new InterfacePinHandle(pM, editor.toBeEdited); ++ handlePerInterfacePin.put(pM, h); ++ addHandle(h); ++ } ++ ++ private void removeInterfacePinHandle(Pin p) ++ { ++ InterfacePinHandle h = handlePerInterfacePin.get(p); ++ handlePerInterfacePin.remove(p); ++ removeHandle(h); ++ } ++ ++ private void addWirePointHandle(GUIWire w) ++ { ++ List wireHandles = pointHandlesPerWire.get(w); ++ WirePointHandle h; ++ if (wireHandles != null) ++ wireHandles.add(h = new WirePointHandle(w, wireHandles.size())); ++ else ++ { ++ wireHandles = new ArrayList<>(); ++ h = new WirePointHandle(w, 0); ++ wireHandles.add(h); ++ pointHandlesPerWire.put(h.parent, wireHandles); ++ } ++ this.wirePointHandles.add(h); ++ addHandle(h); ++ } ++ ++ private void removeLastWirePointHandle(GUIWire owner) ++ { ++ Handle h = pointHandlesPerWire.get(owner).remove(0); ++ wirePointHandles.remove(h); ++ removeHandle(h); ++ } ++ ++ private void removeWirePointHandles(GUIWire owner) ++ { ++ if(!pointHandlesPerWire.containsKey(owner)) ++ return; ++ pointHandlesPerWire.get(owner).forEach(h -> ++ { ++ wirePointHandles.remove(h); ++ removeHandle(h); ++ }); ++ pointHandlesPerWire.remove(owner); ++ } ++ ++ private void addWireHandle(GUIWire w) ++ { ++ WireHandle h = new WireHandle(w); ++ handlePerWire.put(w, h); ++ addHandle(h); ++ } ++ ++ private void removeWireHandle(GUIWire w) ++ { ++ WireHandle h = handlePerWire.get(w); ++ handlePerWire.remove(w); ++ removeHandle(h); ++ } ++ ++ private void addHandle(Handle h) ++ { ++ handles.add(h); ++ callHandleAddedListeners(h); ++ } ++ ++ private void removeHandle(Handle h) ++ { ++ handles.remove(h); ++ callHandleRemovedListeners(h); ++ h.destroy(); ++ } ++ ++ public StaticPinHandle getHandle(Pin parent) ++ { ++ return handlePerPin.get(parent); ++ } ++ ++ public ComponentHandle getHandle(GUIComponent parent) ++ { ++ return handlePerComp.get(parent); ++ } ++ ++ public WireHandle getHandle(GUIWire parent) ++ { ++ return handlePerWire.get(parent); ++ } ++ ++ public Handle getInterfacePinHandle(Pin p) ++ { ++ return handlePerInterfacePin.get(p); ++ } ++ ++ /** ++ * @return A Collection of the registered {@link WirePointHandle}s of the specified wire ++ */ ++ public Collection getWirePointHandles(GUIWire parent) ++ { ++ return pointHandlesPerWire.get(parent).stream().collect(Collectors.toSet()); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link Handle}s ++ */ ++ public Collection getHandles() ++ { ++ return Collections.unmodifiableCollection(handles); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link StaticPinHandle}s ++ */ ++ public Collection getPinHandles() ++ { ++ return Collections.unmodifiableCollection(handlePerPin.values()); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link InterfacePinHandle}s ++ */ ++ public Collection getInterfacePinHandles() ++ { ++ return Collections.unmodifiableCollection(handlePerInterfacePin.values()); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link ComponentHandle}s ++ */ ++ public Collection getComponentHandles() ++ { ++ return Collections.unmodifiableCollection(handlePerComp.values()); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link WireHandle}s ++ */ ++ public Collection getWireHandles() ++ { ++ return Collections.unmodifiableCollection(handlePerWire.values()); ++ } ++ ++ /** ++ * @return An unmodifiable view of all registered {@link WirePointHandle}s ++ */ ++ public Collection getWirePointHandles() ++ { ++ return Collections.unmodifiableSet(wirePointHandles); ++ } ++ ++ public void click(Point clicked, int stateMask) ++ { ++ EditorState entryState = editor.stateManager.getState(); ++ ++ if (!cornerHandle.click(clicked.x, clicked.y, stateMask, entryState)) ++ if (!click(handlePerPin.values(), clicked, entryState, stateMask)) ++ if (!click(handlePerInterfacePin.values(), clicked, entryState, stateMask)) ++ if (!click(getWirePointHandles(), clicked, entryState, stateMask)) ++ if (!click(handlePerComp.values(), clicked, entryState, stateMask)) ++ if (!click(getWireHandles(), clicked, entryState, stateMask)) ++ entryState.clickedEmpty(clicked, stateMask); ++ entryState.clicked(clicked, stateMask); ++ } ++ ++ private boolean click(Collection handles, Point clicked, EditorState state, int stateMask) ++ { ++ for (Handle h : handles) ++ if (h.click(clicked.x, clicked.y, stateMask, state)) ++ return true; ++ return false; ++ } ++ ++ public void addHandleAddedListener(Consumer c) ++ { ++ handleAddedListeners.add(c); ++ } ++ ++ private void callHandleAddedListeners(Handle added) ++ { ++ handleAddedListeners.forEach(l -> l.accept(added)); ++ } ++ ++ public void removeHandleAddedListener(Consumer c) ++ { ++ handleAddedListeners.remove(c); ++ } ++ ++ public void addHandleRemovedListener(Consumer c) ++ { ++ handleRemovedListeners.add(c); ++ } ++ ++ private void callHandleRemovedListeners(Handle removed) ++ { ++ handleRemovedListeners.forEach(l -> l.accept(removed)); ++ } ++ ++ public void removeHandleRemovedListener(Consumer c) ++ { ++ handleRemovedListeners.remove(c); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/InterfacePinHandle.java index 00000000,00000000..9eff5ced new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/InterfacePinHandle.java @@@ -1,0 -1,0 +1,109 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.model.wires.MovablePin; ++import net.mograsim.logic.model.model.wires.Pin; ++import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; ++ ++public class InterfacePinHandle extends PinHandle ++{ ++ private final static int CIRCLE_DIAM = 4, CIRCLE_RADIUS = CIRCLE_DIAM / 2, SELECTED_CIRCLE_OFFSET = 1, ++ SELECTED_CIRCLE_DIAM = SELECTED_CIRCLE_OFFSET * 2 + CIRCLE_DIAM; ++ private final MovablePin parent; ++ private final DeserializedSubmodelComponent owner; ++ private boolean selected = false; ++ ++ public InterfacePinHandle(MovablePin parent, DeserializedSubmodelComponent pinOwner) ++ { ++ super(); ++ this.parent = parent; ++ this.owner = pinOwner; ++ setSize(CIRCLE_DIAM, CIRCLE_DIAM); ++ initPos(); ++ } ++ ++ private void initPos() ++ { ++ Point pos = parent.getPos(); ++ moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS); ++ } ++ ++ @Override ++ protected void render(GeneralGC gc) ++ { ++ double x = getPosX(), y = getPosY(); ++ ++ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); ++ gc.drawText(parent.name, x + CIRCLE_DIAM, y + CIRCLE_DIAM, true); ++ if (selected) ++ { ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); ++ gc.drawOval(x - SELECTED_CIRCLE_OFFSET, y - SELECTED_CIRCLE_OFFSET, SELECTED_CIRCLE_DIAM, ++ SELECTED_CIRCLE_DIAM); ++ } ++ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); ++ gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM); ++ } ++ ++ @Override ++ public void reqMove(double x, double y) ++ { ++ moveTo(x, y); ++ } ++ ++ @Override ++ public void onSelect() ++ { ++ selected = true; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void onDeselect() ++ { ++ selected = false; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void reqDelete() ++ { ++ owner.removeSubmodelInterface(parent.name); ++ } ++ ++ @Override ++ protected void moveTo(double x, double y) ++ { ++ super.moveTo(x, y); ++ parent.setRelPos(getCenterX(), getCenterY()); ++ } ++ ++ @Override ++ public double getCenterX() ++ { ++ return getPosX() + CIRCLE_RADIUS; ++ } ++ ++ @Override ++ public double getCenterY() ++ { ++ return getPosY() + CIRCLE_RADIUS; ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.INTERFACE_PIN; ++ } ++ ++ @Override ++ public Pin getPin() ++ { ++ return parent; ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/PinHandle.java index 00000000,00000000..365bec56 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/PinHandle.java @@@ -1,0 -1,0 +1,15 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import net.mograsim.logic.model.model.wires.Pin; ++ ++public abstract class PinHandle extends Handle ++{ ++ public PinHandle() ++ { ++ super(); ++ } ++ ++ public abstract Pin getPin(); ++ public abstract double getCenterX(); ++ public abstract double getCenterY(); ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/StaticPinHandle.java index 00000000,00000000..7c3f523f new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/StaticPinHandle.java @@@ -1,0 -1,0 +1,61 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.model.wires.Pin; ++ ++public class StaticPinHandle extends PinHandle ++{ ++ private final static int CIRCLE_DIAM = 2; ++ private final static int CIRCLE_RADIUS = 1; ++ private final Pin parent; ++ ++ public StaticPinHandle(Pin parent) ++ { ++ super(); ++ this.parent = parent; ++ setSize(CIRCLE_DIAM, CIRCLE_DIAM); ++ parent.addPinMovedListener((p) -> updatePos()); ++ updatePos(); ++ } ++ ++ @Override ++ protected void render(GeneralGC gc) ++ { ++ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN)); ++ gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM); ++ } ++ ++ private void updatePos() ++ { ++ Point pos = parent.getPos(); ++ moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS); ++ } ++ ++ @Override ++ public double getCenterX() ++ { ++ return getPosX() + CIRCLE_RADIUS; ++ } ++ ++ @Override ++ public double getCenterY() ++ { ++ return getPosY() + CIRCLE_RADIUS; ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.STATIC_PIN; ++ } ++ ++ @Override ++ public Pin getPin() ++ { ++ return parent; ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WireHandle.java index 00000000,00000000..dcb94517 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WireHandle.java @@@ -1,0 -1,0 +1,161 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import java.util.Optional; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.mograsim.logic.model.editor.states.EditorState; ++import net.mograsim.logic.model.model.wires.GUIWire; ++import net.mograsim.logic.model.model.wires.GUIWire.PathChangedListener; ++ ++public class WireHandle extends Handle implements PathChangedListener ++{ ++ private boolean selected = false; ++ private final static double WIDTH = 2.0; ++ private final static double WIDTH_SQUARED = WIDTH * WIDTH; ++ public final GUIWire parent; ++ ++ public WireHandle(GUIWire parent) ++ { ++ this.parent = parent; ++ parent.addPathChangedListener(this); ++ updateBounds(); ++ } ++ ++ @Override ++ void destroy() ++ { ++ super.destroy(); ++ parent.removePathChangedListener(this); ++ } ++ ++ public void updateBounds() ++ { ++ Rectangle r = parent.getBounds(); ++ moveTo(r.x, r.y); ++ setSize(r.width, r.height); ++ } ++ ++ @Override ++ public void render(GeneralGC gc) ++ { ++ if(selected) ++ { ++ gc.setLineWidth(WIDTH); ++ gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_YELLOW)); ++ gc.drawPolyline(parent.getEffectivePath()); ++ } ++ } ++ ++ @Override ++ public void onSelect() ++ { ++ selected = true; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void onDeselect() ++ { ++ selected = false; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void reqDelete() ++ { ++ parent.destroy(); ++ } ++ ++ @Override ++ public boolean contains(double x, double y) ++ { ++ return click(parent, x, y).isPresent(); ++ } ++ ++ @Override ++ public boolean click(double x, double y, int stateMask, EditorState state) ++ { ++ Optional op = click(parent, x, y); ++ if(op.isEmpty()) ++ return false; ++ WireClickData data = op.get(); ++ return state.clickedHandle(new WireHandleClickInfo(this, data.segment, data.pos, stateMask)); ++ } ++ ++ public static class WireHandleClickInfo extends HandleClickInfo ++ { ++ public final int segment; ++ public final Point posOnWire; ++ WireHandleClickInfo(WireHandle clicked, int segment, Point posOnWire, int stateMask) ++ { ++ super(clicked, stateMask); ++ this.segment = segment; ++ this.posOnWire = posOnWire; ++ } ++ ++ } ++ ++ private static Optional click(GUIWire w, double x, double y) ++ { ++ Rectangle modifiedBounds = w.getBounds(); ++ modifiedBounds.x -= WIDTH; ++ modifiedBounds.y -= WIDTH; ++ modifiedBounds.width += WIDTH * 2; ++ modifiedBounds.height += WIDTH * 2; ++ if (modifiedBounds.contains(x, y)) ++ { ++ double[] effectivePath = w.getEffectivePath(); ++ for (int i = 3; i < effectivePath.length; i += 2) ++ { ++ double a1 = effectivePath[i - 3], a2 = effectivePath[i - 2], b1 = effectivePath[i - 1], ++ b2 = effectivePath[i], r1 = b2 - a2, r2 = a1 - b1; ++ ++ double f = ((x - a1) * r2 + (a2 - y) * r1) / (-r2 * r2 - r1 * r1); ++ if (f >= 0 && f <= 1) ++ { ++ double e1 = a1 + f * (b1 - a1), e2 = a2 + f * (b2 - a2); ++ r1 = e1 - x; ++ r2 = e2 - y; ++ if (r1 * r1 + r2 * r2 <= WIDTH_SQUARED) ++ return Optional.of(new WireClickData(new Point(e1, e2), (i / 2) - 1)); ++ } ++ } ++ } ++ return Optional.empty(); ++ } ++ ++ private final static class WireClickData ++ { ++ WireClickData(Point pos, int segment) ++ { ++ this.pos = pos; ++ this.segment = segment; ++ } ++ ++ /** ++ * Position on the wire that is closest to the click ++ */ ++ public final Point pos; ++ /** ++ * Segment of the wire that the {@link Point} pos is on ++ */ ++ public final int segment; ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.WIRE; ++ } ++ ++ @Override ++ public void pathChanged(GUIWire wire, int diff) ++ { ++ updateBounds(); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java index 00000000,00000000..24575797 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java @@@ -1,0 -1,0 +1,85 @@@ ++package net.mograsim.logic.model.editor.handles; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.gcs.GeneralGC; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.core.wires.Wire; ++import net.mograsim.logic.model.model.wires.GUIWire; ++ ++public class WirePointHandle extends Handle ++{ ++ private final static int END_OFFSET = 4; ++ private boolean selected = false; ++ public final GUIWire parent; ++ ++ private int pointIndex; ++ ++ public WirePointHandle(GUIWire parent, int pointIndex) ++ { ++ super(); ++ this.parent = parent; ++ this.pointIndex = pointIndex; ++ setSize(END_OFFSET, END_OFFSET); ++ Point pathPoint = parent.getPathPoint(pointIndex); ++ moveTo(pathPoint.x, pathPoint.y); ++ } ++ ++ void updatePos() ++ { ++ Point p = parent.getPathPoint(pointIndex); ++ moveTo(p.x, p.y); ++ } ++ ++ @Override ++ public void render(GeneralGC gc) ++ { ++ gc.setLineWidth(1.0); ++ gc.setForeground(Display.getDefault().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_BLUE)); ++ gc.drawLine(getPosX(), getPosY(), getPosX() + END_OFFSET, getPosY() + END_OFFSET); ++ } ++ ++ @Override ++ public void reqMove(double x, double y) ++ { ++ parent.setPathPoint(new Point(x, y), pointIndex); ++ } ++ ++ @Override ++ public void onSelect() ++ { ++ selected = true; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void onDeselect() ++ { ++ selected = false; ++ callRedrawListeners(); ++ } ++ ++ @Override ++ public void reqDelete() ++ { ++ parent.removePathPoint(pointIndex); ++ } ++ ++ @Override ++ public HandleType getType() ++ { ++ return HandleType.WIRE_POINT; ++ } ++ ++ /** ++ * Sets the index of the {@link Point} within the parent {@link Wire}s path that is controlled by this handle ++ * @param index Index of the Point in the Wires path. ++ * @throws IndexOutOfBoundsException ++ */ ++ public void setIndex(int index) ++ { ++ this.pointIndex = index; ++ updatePos(); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/BoxSelectionState.java index 00000000,00000000..516f8e60 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/BoxSelectionState.java @@@ -1,0 -1,0 +1,91 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; ++import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.Selection; ++import net.mograsim.logic.model.editor.handles.Handle; ++ ++public class BoxSelectionState extends EditorState ++{ ++ private Point origin; ++ private double mX, mY; ++ ++ private final ZoomedRenderer boxRenderer = gc -> ++ { ++ if (origin != null) ++ { ++ gc.setLineWidth(0.5); ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW)); ++ gc.drawRectangle(origin.x, origin.y, mX - origin.x, mY - origin.y); ++ } ++ }; ++ ++ public BoxSelectionState(Editor editor, StateManager manager) ++ { ++ super(editor, manager); ++ } ++ ++ @Override ++ public void onEntry() ++ { ++ editor.gui.logicCanvas.addZoomedRenderer(boxRenderer); ++ editor.gui.logicCanvas.redrawThreadsafe(); ++ } ++ ++ @Override ++ public void onExit() ++ { ++ editor.gui.logicCanvas.removeZoomedRenderer(boxRenderer); ++ editor.gui.logicCanvas.redrawThreadsafe(); ++ } ++ ++ @Override ++ public void boxSelect() ++ { ++ manager.setState(new SelectionState(editor, manager)); ++ } ++ ++ @Override ++ public void clicked(Point clicked, int stateMask) ++ { ++ if (origin == null) ++ { ++ origin = new Point(clicked.x, clicked.y); ++ mX = clicked.x; ++ mY = clicked.y; ++ } else ++ { ++ Selection s = editor.getSelection(); ++ s.clear(); ++ boolean leftToRight = mX > origin.x, topToBottom = mY > origin.y; ++ double x = leftToRight ? origin.x : mX, y = topToBottom ? origin.y : mY, ++ width = leftToRight ? mX - origin.x : origin.x - mX, ++ height = topToBottom ? mY - origin.y : origin.y - mY; ++ ++ Rectangle selected = new Rectangle(x, y, width, height); ++ for (Handle h : editor.handleManager.getHandles()) ++ { ++ Rectangle hBounds = h.getBounds(); ++ if (selected.contains(hBounds.x, hBounds.y) ++ && selected.contains(hBounds.x + hBounds.width, hBounds.y + hBounds.height)) ++ { ++ s.add(h); ++ } ++ } ++ manager.setState(new SelectionState(editor, manager)); ++ } ++ } ++ ++ @Override ++ public void mouseMoved(double x, double y) ++ { ++ mX = x; ++ mY = y; ++ editor.gui.logicCanvas.redrawThreadsafe(); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java index 00000000,00000000..e955d8aa new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java @@@ -1,0 -1,0 +1,85 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++import org.eclipse.swt.widgets.Shell; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.handles.PinHandle; ++import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo; ++ ++public class CreateWireState extends EditorState ++{ ++ private final PinHandle origin; ++ private double mX, mY; ++ private ZoomedRenderer drawLine; ++ ++ public CreateWireState(Editor session, StateManager manager, PinHandle origin) ++ { ++ super(session, manager); ++ this.origin = origin; ++ mX = origin.getCenterX(); ++ mY = origin.getCenterY(); ++ } ++ ++ @Override ++ public void mouseMoved(double x, double y) ++ { ++ this.mX = x; ++ this.mY = y; ++ editor.gui.logicCanvas.redraw(); ++ } ++ ++ @Override ++ public void onEntry() ++ { ++ editor.getSelection().clear(); ++ drawLine = gc -> ++ { ++ gc.setLineWidth(1); ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)); ++ gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY); ++ }; ++ editor.gui.logicCanvas.addZoomedRenderer(drawLine); ++ editor.gui.logicCanvas.redraw(); ++ } ++ ++ @Override ++ public void onExit() ++ { ++ editor.gui.logicCanvas.removeZoomedRenderer(drawLine); ++ editor.gui.logicCanvas.redraw(); ++ } ++ ++ @Override ++ public boolean clickedHandle(HandleClickInfo handleClickInfo) ++ { ++ switch (handleClickInfo.clicked.getType()) ++ { ++ case INTERFACE_PIN: ++ case STATIC_PIN: ++ try ++ { ++ editor.addWire(origin, (PinHandle) handleClickInfo.clicked); ++ } ++ catch (IllegalArgumentException e) ++ { ++ Shell tmp = new Shell(Display.getCurrent()); ++ editor.dialogManager.openWarningDialog("Warning!", e.getMessage()); ++ tmp.dispose(); ++ } ++ break; ++ default: ++ return false; ++ } ++ return true; ++ } ++ ++ @Override ++ public void clicked(Point clicked, int stateMask) ++ { ++ manager.setState(new SelectionState(editor, manager)); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/EditorState.java index 00000000,00000000..05e05d85 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/EditorState.java @@@ -1,0 -1,0 +1,36 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.handles.InterfacePinHandle; ++import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo; ++ ++public abstract class EditorState ++{ ++ protected final Editor editor; ++ protected final StateManager manager; ++ ++ public EditorState(Editor session, StateManager manager) ++ { ++ this.editor = session; ++ this.manager = manager; ++ } ++ ++ //@formatter:off ++ public void add() {} ++ public void delete() {} ++ public void copy() {} ++ public void paste() {} ++ public void duplicate() {} ++ public void grab() {} ++ public void mouseMoved(double x, double y) {} ++ public void select(Point pos, boolean additive) {} ++ public void boxSelect() {} ++ public void onEntry() {} ++ public void onExit() {} ++ public void clicked(InterfacePinHandle interfacePinHandle, int stateMask) {} ++ public void clickedEmpty(Point clicked, int stateMask) {} ++ public void clicked(Point clicked, int stateMask) {} ++ public boolean clickedHandle(HandleClickInfo handleClickInfo) { return false; } ++ //@formatter:on ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/GrabState.java index 00000000,00000000..73691646 new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/GrabState.java @@@ -1,0 -1,0 +1,41 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import java.util.Map; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.handles.Handle; ++ ++public class GrabState extends EditorState ++{ ++ private Map offsets; ++ ++ public GrabState(Editor editor, StateManager manager) ++ { ++ super(editor, manager); ++ } ++ ++ @Override ++ public void onEntry() ++ { ++ offsets = editor.getSelection().calculateOffsets(); ++ } ++ ++ @Override ++ public void grab() ++ { ++ manager.setState(new SelectionState(editor, manager)); ++ } ++ ++ @Override ++ public void mouseMoved(double x, double y) ++ { ++ editor.moveHandles(x, y, offsets); ++ } ++ ++ @Override ++ public void clicked(Point clicked, int stateMask) ++ { ++ manager.setState(new SelectionState(editor, manager)); ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/SelectionState.java index 00000000,00000000..446635ee new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/SelectionState.java @@@ -1,0 -1,0 +1,181 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import org.eclipse.swt.SWT; ++import org.eclipse.swt.widgets.Display; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.Selection; ++import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog; ++import net.mograsim.logic.model.editor.handles.Handle; ++import net.mograsim.logic.model.editor.handles.PinHandle; ++import net.mograsim.logic.model.editor.handles.WireHandle; ++import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo; ++import net.mograsim.logic.model.editor.handles.WireHandle.WireHandleClickInfo; ++import net.mograsim.logic.model.model.wires.MovablePin; ++import net.mograsim.logic.model.model.wires.Pin; ++ ++public class SelectionState extends EditorState ++{ ++ private final ZoomedRenderer outlineRenderer = gc -> ++ { ++ if (editor.getSelection().size() > 1) ++ { ++ gc.setLineWidth(1); ++ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW)); ++ gc.drawRectangle(editor.getSelection().getBounds()); ++ } ++ }; ++ ++ public SelectionState(Editor editor, StateManager manager) ++ { ++ super(editor, manager); ++ } ++ ++ @Override ++ public void add() ++ { ++ Point curserPos = editor.getWorldMousePosition(); ++ editor.addComponent(curserPos.x, curserPos.y); ++ } ++ ++ @Override ++ public void delete() ++ { ++ editor.deleteSelection(); ++ } ++ ++ @Override ++ public void copy() ++ { ++ editor.copy(); ++ } ++ ++ @Override ++ public void paste() ++ { ++ Point curserPos = editor.getWorldMousePosition(); ++ editor.paste(curserPos.x, curserPos.y); ++ } ++ ++ @Override ++ public void duplicate() ++ { ++ editor.duplicate(); ++ } ++ ++ @Override ++ public void grab() ++ { ++ if (!editor.getSelection().isEmpty()) ++ manager.setState(new GrabState(editor, manager)); ++ } ++ ++ @Override ++ public void boxSelect() ++ { ++ manager.setState(new BoxSelectionState(editor, manager)); ++ } ++ ++ @Override ++ public void onEntry() ++ { ++ editor.gui.logicCanvas.addZoomedRenderer(outlineRenderer); ++ editor.gui.logicCanvas.redrawThreadsafe(); ++ } ++ ++ @Override ++ public void onExit() ++ { ++ editor.gui.logicCanvas.removeZoomedRenderer(outlineRenderer); ++ editor.gui.logicCanvas.redrawThreadsafe(); ++ } ++ ++ @Override ++ public void clickedEmpty(Point clicked, int stateMask) ++ { ++ editor.getSelection().clear(); ++ if ((stateMask & SWT.ALT) == SWT.ALT) ++ { ++ InteractiveDialog pinAdd = new InteractiveDialog("Add Pin...", "Add", "Cancel", "Name", "Logic Width"); ++ pinAdd.open(); ++ if (pinAdd.getState().equals(InteractiveDialog.InteractiveDialogState.ACCEPTED)) ++ { ++ try ++ { ++ Pin p = editor.toBeEdited.addSubmodelInterface(new MovablePin(editor.toBeEdited, pinAdd.getText(), ++ Integer.parseInt(pinAdd.getText(1)), clicked.x, clicked.y)); ++ editor.handleManager.getInterfacePinHandle(p).reqMove(clicked.x, clicked.y); ++ } catch (NumberFormatException e) ++ { ++ editor.dialogManager.openWarningDialog("Failed to create Pin!", "Bit width must be a number!"); ++ } ++ } ++ } ++ } ++ ++ @Override ++ public boolean clickedHandle(HandleClickInfo handleClickInfo) ++ { ++ switch (handleClickInfo.clicked.getType()) ++ { ++ case INTERFACE_PIN: ++ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL) ++ { ++ manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked)); ++ break; ++ } ++ case CORNER: ++ case COMPONENT: ++ case WIRE_POINT: ++ boolean additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT; ++ select(handleClickInfo.clicked, additive); ++ break; ++ case STATIC_PIN: ++ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL) ++ manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked)); ++ else ++ return false; ++ break; ++ case WIRE: ++ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL) ++ { ++ WireHandleClickInfo info = (WireHandleClickInfo) handleClickInfo; ++ WireHandle clicked = (WireHandle) info.clicked; ++ clicked.parent.insertPathPoint(info.posOnWire, info.segment); ++ } else ++ { ++ additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT; ++ select(handleClickInfo.clicked, additive); ++ } ++ break; ++ default: ++ return false; ++ } ++ return true; ++ } ++ ++ private void select(Handle h, boolean additive) ++ { ++ Selection sel = editor.getSelection(); ++ if (sel.contains(h)) ++ if (additive) ++ sel.remove(h); ++ else ++ { ++ if (editor.getSelection().size() > 1) ++ { ++ sel.clear(); ++ sel.add(h); ++ } else ++ sel.clear(); ++ } ++ else ++ { ++ if (!additive) ++ sel.clear(); ++ sel.add(h); ++ } ++ } ++} diff --cc net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/StateManager.java index 00000000,00000000..d4b3fc4d new file mode 100644 --- /dev/null +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/StateManager.java @@@ -1,0 -1,0 +1,78 @@@ ++package net.mograsim.logic.model.editor.states; ++ ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++import net.mograsim.logic.model.editor.Editor; ++import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo; ++ ++public class StateManager ++{ ++ private EditorState state; ++ ++ public StateManager(Editor session) ++ { ++ state = new SelectionState(session, this); ++ state.onEntry(); ++ } ++ ++ public EditorState getState() ++ { ++ return state; ++ } ++ ++ public void setState(EditorState state) ++ { ++ this.state.onExit(); ++ this.state = state; ++ state.onEntry(); ++ } ++ ++ public void add() ++ { ++ state.add(); ++ } ++ ++ public void delete() ++ { ++ state.delete(); ++ } ++ ++ public void copy() ++ { ++ state.copy(); ++ } ++ ++ public void paste() ++ { ++ state.paste(); ++ } ++ ++ public void duplicate() ++ { ++ state.duplicate(); ++ } ++ ++ public void grab() ++ { ++ state.grab(); ++ } ++ ++ public void mouseMoved(double x, double y) ++ { ++ state.mouseMoved(x, y); ++ } ++ ++ public void select(Point pos, boolean additive) ++ { ++ state.select(pos, additive); ++ } ++ ++ public boolean clickedHandle(HandleClickInfo handleClickInfo) ++ { ++ return state.clickedHandle(handleClickInfo); ++ } ++ ++ public void boxSelect() ++ { ++ state.boxSelect(); ++ } ++} diff --cc net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/GUIWire.java index 00000000,c1070e53..d9b7cb91 mode 000000,100644..100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/GUIWire.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/GUIWire.java @@@ -1,0 -1,364 +1,448 @@@ + package net.mograsim.logic.model.model.wires; + + import java.util.ArrayList; + import java.util.Arrays; ++import java.util.HashSet; + import java.util.List; ++import java.util.Set; + + import org.eclipse.swt.SWT; + + import net.haspamelodica.swt.helper.gcs.GeneralGC; + import net.haspamelodica.swt.helper.swtobjectwrappers.Point; + import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; + import net.mograsim.logic.core.LogicObserver; + import net.mograsim.logic.core.types.BitVector; + import net.mograsim.logic.core.types.BitVectorFormatter; + import net.mograsim.logic.core.wires.Wire; + import net.mograsim.logic.core.wires.Wire.ReadEnd; + import net.mograsim.logic.model.model.ViewModelModifiable; + import net.mograsim.preferences.ColorDefinition; + import net.mograsim.preferences.ColorManager; + + /** + * A wire connecting exactly two {@link Pin}s. + * + * @author Daniel Kirschten + */ + public class GUIWire + { + /** + * The model this wire is a part of. + */ + private final ViewModelModifiable model; + /** + * The logical width of this wire. Is equal to the logical with of {@link #pin1} and {@link #pin2}. + */ + public final int logicWidth; + /** + * The {@link Pin} on one side of this wire, usually the signal source. + */ + private Pin pin1; + /** + * The {@link Pin} on one side of this wire, usually the signal target. + */ + private Pin pin2; + /** + * The user-defined path between {@link #pin1} and {@link #pin2}.
+ * Special cases: null means "choose an interpolation as fits", and an empty array means "direct connection without any + * interpolation". + */ + private Point[] path; + /** + * The bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER}) + */ + private final Rectangle bounds; + /** + * The effective path of this wire, including automatic interpolation and the position of both {@link Pin}s. Is never null. + */ + private double[] effectivePath; + + private final List redrawListeners; + ++ private final Set pathChangedListeners; ++ + /** + * A LogicObserver calling redrawListeners. Used for logic model bindings. + */ + private final LogicObserver logicObs; + /** + * A ReadEnd of the logic wire this GUI wire currently is bound to. + */ + private ReadEnd end; + + // creation and destruction + + /** + * Creates a new {@link GUIWire} with automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2) + { + this(model, pin1, pin2, (Point[]) null); + } + + /** + * Creates a new {@link GUIWire} with automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2) + { + this(model, pin1, pin2, (Point[]) null); + } + + /** + * Creates a new {@link GUIWire} with automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2) + { + this(model, pin1, pin2, (Point[]) null); + } + + /** + * Creates a new {@link GUIWire} with automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2) + { + this(model, pin1, pin2, (Point[]) null); + } + + /** + * Creates a new {@link GUIWire} without automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2, Point... path) + { + this(model, pin1.getPin(), pin2.getPin(), path); + } + + /** + * Creates a new {@link GUIWire} without automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2, Point... path) + { + this(model, pin1.getPin(), pin2, path); + } + + /** + * Creates a new {@link GUIWire} without automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2, Point... path) + { + this(model, pin1, pin2.getPin(), path); + } + + /** + * Creates a new {@link GUIWire} without automatic interpolation. + * + * @author Daniel Kirschten + */ + public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path) + { ++ pathChangedListeners = new HashSet<>(); + logicObs = (i) -> callRedrawListeners(); + this.model = model; + this.logicWidth = pin1.logicWidth; + if (pin2.logicWidth != pin1.logicWidth) + throw new IllegalArgumentException("Can't connect pins of different logic width"); + + this.pin1 = pin1; + this.pin2 = pin2; + + this.path = path == null ? null : Arrays.copyOf(path, path.length); + this.bounds = new Rectangle(0, 0, -1, -1); + + redrawListeners = new ArrayList<>(); + + pin1.addPinMovedListener(p -> pinMoved()); + pin2.addPinMovedListener(p -> pinMoved()); + + recalculateEffectivePath(); + + model.wireCreated(this); + } + + /** + * Destroys this wire. This method implicitly calls {@link ViewModelModifiable#wireDestroyed(GUIWire) wireDestroyed()} for the model + * this component is a part of. + * + * @author Daniel Kirschten + */ + public void destroy() + { + model.wireDestroyed(this); + } + + // pins + + /** + * Returns the {@link Pin} on one side of this wire, usually the signal source. + * + * @author Daniel Kirschten + */ + public Pin getPin1() + { + return pin1; + } + + /** + * Returns the {@link Pin} on one side of this wire, usually the signal target. + * + * @author Daniel Kirschten + */ + public Pin getPin2() + { + return pin2; + } + + /** + * Called when {@link #pin1} or {@link #pin2} were moved. + * + * @author Daniel Kirschten + */ + private void pinMoved() + { + recalculateEffectivePath(); + callRedrawListeners(); + } + + // "graphical" operations + + /** + * Recalculates {@link #effectivePath} "from scratch". Also updates {@link #bounds}. + * + * @author Daniel Kirschten + */ + private void recalculateEffectivePath() + { + Point pos1 = pin1.getPos(), pos2 = pin2.getPos(); + + double boundsX1 = Math.min(pos1.x, pos2.x); + double boundsY1 = Math.min(pos1.y, pos2.y); + double boundsX2 = Math.max(pos1.x, pos2.x); + double boundsY2 = Math.max(pos1.y, pos2.y); + + if (path == null) + effectivePath = new double[] { pos1.x, pos1.y, (pos1.x + pos2.x) / 2, pos1.y, (pos1.x + pos2.x) / 2, pos2.y, pos2.x, pos2.y }; + else + { + effectivePath = new double[path.length * 2 + 4]; + effectivePath[0] = pos1.x; + effectivePath[1] = pos1.y; + for (int srcI = 0, dstI = 2; srcI < path.length; srcI++, dstI += 2) + { + double pathX = path[srcI].x; + double pathY = path[srcI].y; + effectivePath[dstI + 0] = pathX; + effectivePath[dstI + 1] = pathY; + if (pathX < boundsX1) + boundsX1 = pathX; + if (pathX > boundsX2) + boundsX2 = pathX; + if (pathY < boundsY1) + boundsY1 = pathY; + if (pathY > boundsY2) + boundsY2 = pathY; + } + effectivePath[effectivePath.length - 2] = pos2.x; + effectivePath[effectivePath.length - 1] = pos2.y; + } + + bounds.x = boundsX1; + bounds.y = boundsY1; + bounds.width = boundsX2 - boundsX1; + bounds.height = boundsY2 - boundsY1; + } + + /** + * Returns the bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER}) + * + * @author Daniel Kirschten + */ + public Rectangle getBounds() + { + return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + } + + /** + * Render this wire to the given gc, in absoulute coordinates. + * + * @author Daniel Kirschten + */ + public void render(GeneralGC gc) + { + ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end); + if (wireColor != null) + gc.setForeground(ColorManager.current().toColor(wireColor)); + gc.drawPolyline(effectivePath); + } + + /** + * The user-defined path between {@link #pin1} and {@link #pin2}. Note that this is not neccessarily equal to the effective path drawn + * in {@link #render(GeneralGC)}.
+ * Special cases: null means "choose an interpolation as fits", and an empty array means "direct connection without any + * interpolation". + * + * @author Daniel Kirschten + */ + public Point[] getPath() + { + return path == null ? null : path.clone(); + } + + // logic model binding + + /** + * Binds this {@link GUIWire} to the given {@link ReadEnd}: The color of this {@link GUIWire} will now depend on the state of the given + * {@link ReadEnd}, and further changes of the given {@link ReadEnd} will result in readrawListeners being called.
+ * The argument can be null, in which case the old binding is stopped. + * + * @author Daniel Kirschten + */ + public void setLogicModelBinding(ReadEnd end) + { + if (this.end != null) + this.end.deregisterObserver(logicObs); + this.end = end; + if (end != null) + end.registerObserver(logicObs); + } + + /** + * Returns whether this {@link GUIWire} has a logic model binding or not. + * + * @author Daniel Kirschten + */ + public boolean hasLogicModelBinding() + { + return end != null; + } + + /** + * If this {@link GUIWire} has a logic model binding, delegates to {@link Wire#forceValues(BitVector)} for the {@link Wire} + * corresponding to this {@link GUIWire}. + * + * @author Daniel Kirschten + */ + public void forceWireValues(BitVector values) + { + end.getWire().forceValues(values); + } + + /** + * If this {@link GUIWire} has a logic model binding, delegates to {@link ReadEnd#getValues()} for the {@link ReadEnd} corresponding to + * this {@link GUIWire}. + * + * @author Daniel Kirschten + */ + public BitVector getWireValues() + { + return end.getValues(); + } + + // listeners + + // @formatter:off + public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);} + + public void removeRedrawListener(Runnable listener) {redrawListeners .remove(listener);} + + private void callRedrawListeners() {redrawListeners.forEach(l -> l.run());} ++ ++ public void addPathChangedListener(PathChangedListener l) { pathChangedListeners.add(l); } ++ ++ public void removePathChangedListener(PathChangedListener l) { pathChangedListeners.remove(l); } ++ ++ public void callPathChangedListeners(int diff) { pathChangedListeners.forEach(l -> l.pathChanged(this, diff)); } ++ ++ @FunctionalInterface ++ public static interface PathChangedListener ++ { ++ /** ++ * Called whenever the {@link Wire}'s path changes ++ * ++ * @param wire The wire which had its path changed ++ * @param diff The length difference between before and after the path change. ++ */ ++ public void pathChanged(GUIWire wire, int diff); ++ } + // @formatter:on + + @Override + public String toString() + { + return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]"; + } ++ ++ public void setPath(Point[] path) ++ { ++ int diff = (path == null ? 0 : path.length) - (this.path == null ? 0 : this.path.length); ++ this.path = path == null ? null : path.clone(); ++ recalculateEffectivePath(); ++ callPathChangedListeners(diff); ++ callRedrawListeners(); ++ } ++ ++ public void setPathPoint(Point p, int index) ++ { ++ path[index] = p; ++ recalculateEffectivePath(); ++ callPathChangedListeners(0); ++ callRedrawListeners(); ++ } ++ ++ public void insertPathPoint(Point p, int index) ++ { ++ Point[] path = getPath(); ++ if (path == null) ++ setPath(new Point[] { p }); ++ else ++ { ++ Point[] newPath = new Point[path.length + 1]; ++ System.arraycopy(path, 0, newPath, 0, index); ++ if (index < path.length) ++ System.arraycopy(path, index, newPath, index + 1, path.length - index); ++ newPath[index] = p; ++ setPath(newPath); ++ } ++ } ++ ++ public void removePathPoint(int index) ++ { ++ Point[] path = getPath(); ++ Point[] newPath = new Point[path.length - 1]; ++ System.arraycopy(path, 0, newPath, 0, index); ++ if (index < path.length - 1) ++ System.arraycopy(path, index + 1, newPath, index, path.length - index - 1); ++ setPath(newPath); ++ } ++ ++ /** ++ * @throws IndexOutOfBoundsException ++ */ ++ public Point getPathPoint(int index) ++ { ++ return path[index]; ++ } ++ ++ public int getPathLength() ++ { ++ return path.length; ++ } ++ ++ public double[] getEffectivePath() ++ { ++ return effectivePath.clone(); ++ } + } diff --cc net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java index 00000000,1ec51445..adf24338 mode 000000,100644..100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java @@@ -1,0 -1,67 +1,87 @@@ + package net.mograsim.logic.model.serializing; + ++import java.util.Map; ++ + import net.haspamelodica.swt.helper.gcs.GeneralGC; + import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; + import net.mograsim.logic.model.model.ViewModelModifiable; + import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; + import net.mograsim.logic.model.model.wires.MovablePin; + import net.mograsim.logic.model.model.wires.Pin; + import net.mograsim.logic.model.serializing.snippets.Renderer; + + public class DeserializedSubmodelComponent extends SubmodelComponent + { + public Renderer outlineRenderer; + public Renderer symbolRenderer; + + public DeserializedSubmodelComponent(ViewModelModifiable model, String name) + { + super(model, name); + } + + @Override + protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) + { + if (outlineRenderer != null) + outlineRenderer.render(gc, visibleRegion); + } + + @Override + protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) + { + if (symbolRenderer != null) + symbolRenderer.render(gc, visibleRegion); + } + + public void setOutlineRenderer(Renderer outlineRenderer) + { + this.outlineRenderer = outlineRenderer; + } + + public void setSymbolRenderer(Renderer symbolRenderer) + { + this.symbolRenderer = symbolRenderer; + } + + public ViewModelModifiable getSubmodelModifiable() + { + return submodelModifiable; + } + + @Override + public void setSubmodelScale(double submodelScale) + { + super.setSubmodelScale(submodelScale); + } + + @Override + public void setSize(double width, double height) + { + super.setSize(width, height); + } + + @Override - protected Pin addSubmodelInterface(MovablePin supermodelPin) ++ public Pin addSubmodelInterface(MovablePin supermodelPin) + { + return super.addSubmodelInterface(supermodelPin); + } ++ ++ @Override ++ public double getSubmodelScale() ++ { ++ return super.getSubmodelScale(); ++ } ++ ++ @Override ++ public Map getSubmodelMovablePins() ++ { ++ return super.getSubmodelMovablePins(); ++ } ++ ++ @Override ++ public void removeSubmodelInterface(String name) ++ { ++ super.removeSubmodelInterface(name); ++ } + } diff --cc net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java index 00000000,874a8a8b..1c6a4846 mode 000000,100644..100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java @@@ -1,0 -1,107 +1,113 @@@ + package net.mograsim.logic.model.serializing; + + import java.io.IOException; + import java.io.InputStream; ++import java.util.Collection; + import java.util.HashMap; + import java.util.Map; + + import com.google.gson.JsonElement; + import com.google.gson.JsonNull; + + import net.mograsim.logic.model.model.ViewModelModifiable; + import net.mograsim.logic.model.model.components.GUIComponent; + import net.mograsim.logic.model.util.JsonHandler; + + public class IndirectGUIComponentCreator + { + private static final Map standardComponentIDs = new HashMap<>(); + + private static final Map componentSuppliers = new HashMap<>(); + + static + { + try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardComponentIDMapping.json")) + { + if (s == null) + throw new IOException("Resource not found"); + Map tmp = JsonHandler.readJson(s, Map.class); + // don't use putAll to apply sanity checks + tmp.forEach((st, id) -> + { + try + { + addStandardComponentID(st, id); + } + catch (IllegalArgumentException e) + { + System.err.println("Component ID mapping contained illegal entry: " + e.getMessage()); + } + }); + } + catch (IOException e) + { + System.err.println("Failed to initialize standard snippet ID mapping: " + e.getMessage()); + } + } + + public static void addStandardComponentID(String standardComponentID, String associatedComponentID) + { + if (!associatedComponentID.startsWith("file:") && !associatedComponentID.startsWith("class:")) + throw new IllegalArgumentException("Unrecognized component ID format: " + associatedComponentID); + standardComponentIDs.put(standardComponentID, associatedComponentID); + } + ++ public static Collection getStandardComponentIDs() ++ { ++ return standardComponentIDs.keySet(); ++ } ++ + public static void setComponentSupplier(String className, ComponentSupplier componentSupplier) + { + componentSuppliers.put(className, componentSupplier); + } + + public static GUIComponent createComponent(ViewModelModifiable model, String id) + { + return createComponent(model, id, (String) null); + } + + public static GUIComponent createComponent(ViewModelModifiable model, String id, String name) + { + return createComponent(model, id, JsonNull.INSTANCE, name); + } + + public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params) + { + return createComponent(model, id, params, null); + } + + public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params, String name) + { + if (id != null) + { + String resolvedID; + if (id.startsWith("class:") || id.startsWith("file:")) + resolvedID = id; + else + resolvedID = standardComponentIDs.get(id); + if (resolvedID.startsWith("class:")) + { + String className = resolvedID.substring(6); + tryLoadComponentClass(className); + ComponentSupplier componentSupplier = componentSuppliers.get(className); + if (componentSupplier != null) + return componentSupplier.create(model, params, name); + } else + // we know id has to start with "file:" here + // because standardComponentIDs only contains strings starting with "class:" or "file:" + return SubmodelComponentDeserializer.create(model, resolvedID.substring(5), name); + } + throw new RuntimeException("Could not get component supplier for ID " + id); + } + + private static void tryLoadComponentClass(String componentClassName) + { + CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n"); + } + + public static interface ComponentSupplier + { + public GUIComponent create(ViewModelModifiable model, JsonElement params, String name); + } + }