Merge branch 'development' of
authorFabian Stemmler <stemmler@in.tum.de>
Sat, 13 Jul 2019 10:33:03 +0000 (12:33 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Sat, 13 Jul 2019 10:33:03 +0000 (12:33 +0200)
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

406 files changed:
SWTHelper
net.mograsim.logic.core/src/net/mograsim/logic/core/types/Bit.java
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java
net.mograsim.logic.model.am2900/.classpath [new file with mode: 0644]
net.mograsim.logic.model.am2900/.gitignore [new file with mode: 0644]
net.mograsim.logic.model.am2900/.project [new file with mode: 0644]
net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
net.mograsim.logic.model.am2900/FullAdder.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/HalfAdder.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF [new file with mode: 0644]
net.mograsim.logic.model.am2900/OSGI-INF/l10n/bundle.properties [new file with mode: 0644]
net.mograsim.logic.model.am2900/Test.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/build.properties [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUI_rsLatch.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIand.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIand41.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIandor414.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIdemux2.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIdff.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIdlatch.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIdlatch4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIfulladder.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIhalfadder.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUImux1.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUImux1_4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUInand3.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUInot4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIor4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIor_4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIram2.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIram4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIsel2_4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIsel3_4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIxor.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUFuncDecode.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclDecode.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUOneBit.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901DestDecode.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901QReg.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2901/GUIAm2901SourceDecode.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ComponenetSerializer.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/JsonExample.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/SubmodelComponentTestbench.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand41.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIandor414.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdemux2.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIfulladder.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIhalfadder.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1_4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInand3.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInot4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor_4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel2_4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel3_4.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIxor.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java [new file with mode: 0644]
net.mograsim.logic.model.editor/.classpath [new file with mode: 0644]
net.mograsim.logic.model.editor/.gitignore [new file with mode: 0644]
net.mograsim.logic.model.editor/.project [new file with mode: 0644]
net.mograsim.logic.model.editor/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
net.mograsim.logic.model.editor/META-INF/MANIFEST.MF [new file with mode: 0644]
net.mograsim.logic.model.editor/build.properties [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUI_rsLatch.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIand.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIand41.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIandor414.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdemux2.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdff.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdlatch.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdlatch4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIfulladder.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIhalfadder.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUImux1.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUImux1_4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUInand3.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUInot4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIor4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIor_4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIram2.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIram4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIsel2_4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIsel3_4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIxor.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUFuncDecode.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclDecode.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUOneBit.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901DestDecode.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901SourceDecode.json [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/DialogManager.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorCanvas.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorGUI.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Selection.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/CornerHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/Handle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/InterfacePinHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/PinHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/StaticPinHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WireHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/BoxSelectionState.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/EditorState.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/GrabState.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/SelectionState.java [new file with mode: 0644]
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/StateManager.java [new file with mode: 0644]
net.mograsim.logic.model/.classpath [new file with mode: 0644]
net.mograsim.logic.model/.gitignore [new file with mode: 0644]
net.mograsim.logic.model/.project [new file with mode: 0644]
net.mograsim.logic.model/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
net.mograsim.logic.model/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
net.mograsim.logic.model/META-INF/MANIFEST.MF [new file with mode: 0644]
net.mograsim.logic.model/OSGI-INF/l10n/bundle.properties [new file with mode: 0644]
net.mograsim.logic.model/build.properties [new file with mode: 0644]
net.mograsim.logic.model/oldsrc/GUIMerger.java [new file with mode: 0644]
net.mograsim.logic.model/oldsrc/GUIMux.java [new file with mode: 0644]
net.mograsim.logic.model/oldsrc/GUISplitter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/LogicExecuter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/examples/ClickableSubmodelComponentsTest.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/examples/RSLatchExample.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModel.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModelModifiable.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIAndGate.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIBitDisplay.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIManualSwitch.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINandGate.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINotGate.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIOrGate.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularGUIGate.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/TextComponent.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/GUIWire.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/MovablePin.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/Pin.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/WireCrossPoint.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/LogicModelParameters.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/BitDisplayAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ComponentAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ManualSwitchAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/NoLogicAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleGateAdapter.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/CodeSnippetSupplier.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentDeserializer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/HighLevelStateHandler.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/Renderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/SnippetSupplier.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/highlevelstatehandlers/DefaultHighLevelStateHandler.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardSnippetIDMapping.json [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/util/JsonHandler.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/util/ModellingTool.java [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/util/Version.java [new file with mode: 0644]
net.mograsim.logic.ui.am2900/.classpath [deleted file]
net.mograsim.logic.ui.am2900/.gitignore [deleted file]
net.mograsim.logic.ui.am2900/.project [deleted file]
net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.core.prefs [deleted file]
net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.ui.prefs [deleted file]
net.mograsim.logic.ui.am2900/FullAdder.json [deleted file]
net.mograsim.logic.ui.am2900/HalfAdder.json [deleted file]
net.mograsim.logic.ui.am2900/META-INF/MANIFEST.MF [deleted file]
net.mograsim.logic.ui.am2900/OSGI-INF/l10n/bundle.properties [deleted file]
net.mograsim.logic.ui.am2900/Test.json [deleted file]
net.mograsim.logic.ui.am2900/build.properties [deleted file]
net.mograsim.logic.ui.am2900/components/GUI_rsLatch.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIand.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIand41.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIandor414.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIdemux2.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIdff.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIdlatch.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIdlatch4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIfulladder.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIhalfadder.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUImux1.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUImux1_4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUInand3.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUInot4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIor4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIor_4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIram2.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIram4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIsel2_4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIsel3_4.json [deleted file]
net.mograsim.logic.ui.am2900/components/GUIxor.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUFuncDecode.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclDecode.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUOneBit.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901DestDecode.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901QReg.json [deleted file]
net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901SourceDecode.json [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/ComponenetSerializer.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/JsonExample.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/SubmodelComponentTestbench.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand41.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIandor414.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdemux2.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdff.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIfulladder.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIhalfadder.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1_4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInot4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor_4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram2.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel2_4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel3_4.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIxor.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901QReg.java [deleted file]
net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java [deleted file]
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java [deleted file]
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java [deleted file]
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java [deleted file]
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java [deleted file]
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java [deleted file]
net.mograsim.logic.ui.editor/.classpath [deleted file]
net.mograsim.logic.ui.editor/.gitignore [deleted file]
net.mograsim.logic.ui.editor/.project [deleted file]
net.mograsim.logic.ui.editor/.settings/org.eclipse.jdt.core.prefs [deleted file]
net.mograsim.logic.ui.editor/META-INF/MANIFEST.MF [deleted file]
net.mograsim.logic.ui.editor/build.properties [deleted file]
net.mograsim.logic.ui.editor/components/GUI_rsLatch.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIand.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIand41.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIandor414.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIdemux2.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIdff.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIdlatch.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIdlatch4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIfulladder.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIhalfadder.json [deleted file]
net.mograsim.logic.ui.editor/components/GUImux1.json [deleted file]
net.mograsim.logic.ui.editor/components/GUImux1_4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUInand3.json [deleted file]
net.mograsim.logic.ui.editor/components/GUInot4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIor4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIor_4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIram2.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIram4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIsel2_4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIsel3_4.json [deleted file]
net.mograsim.logic.ui.editor/components/GUIxor.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUFuncDecode.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclDecode.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUOneBit.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901DestDecode.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901QReg.json [deleted file]
net.mograsim.logic.ui.editor/components/am2901/GUIAm2901SourceDecode.json [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/DialogManager.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditableSubmodelComponent.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Editor.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorCanvas.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorGUI.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorUserInput.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/SaveLoadManager.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Selection.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/ComponentHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/CornerHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/Handle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/HandleManager.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/InterfacePinHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/PinHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/StaticPinHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WireHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WirePointHandle.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/BoxSelectionState.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/CreateWireState.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/EditorState.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/GrabState.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/SelectionState.java [deleted file]
net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/StateManager.java [deleted file]
net.mograsim.logic.ui/.classpath [deleted file]
net.mograsim.logic.ui/.gitignore [deleted file]
net.mograsim.logic.ui/.project [deleted file]
net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs [deleted file]
net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs [deleted file]
net.mograsim.logic.ui/META-INF/MANIFEST.MF [deleted file]
net.mograsim.logic.ui/OSGI-INF/l10n/bundle.properties [deleted file]
net.mograsim.logic.ui/build.properties [deleted file]
net.mograsim.logic.ui/oldsrc/GUIMerger.java [deleted file]
net.mograsim.logic.ui/oldsrc/GUIMux.java [deleted file]
net.mograsim.logic.ui/oldsrc/GUISplitter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicExecuter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIRenderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ClickableSubmodelComponentsTest.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIAndGate.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIBitDisplay.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIManualSwitch.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINandGate.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINotGate.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIOrGate.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/SimpleRectangularGUIGate.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/TextComponent.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelComponent.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelInterface.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/ConnectionPoint.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/BitDisplayAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/DeserializedSubmodelComponent.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/IndirectGUIComponentCreator.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentParams.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardComponentIDMapping.json [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/JsonHandler.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/Version.java [deleted file]
net.mograsim.plugin.core/META-INF/MANIFEST.MF
net.mograsim.plugin.core/src/net/mograsim/plugin/SimulationPreview.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmElement.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmInstruction.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmLabel.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperand.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperands.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperation.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/NumericOperand.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/views/LogicUIPart.java

index c152d5e..db7cb7c 160000 (submodule)
--- a/SWTHelper
+++ b/SWTHelper
@@ -1 +1 @@
-Subproject commit c152d5ee921ab7d8176e1124b8cb0146376bb579
+Subproject commit db7cb7cb9548c5c8dbf3b620cd5b9fa3415bb9a5
index 4fce8dd..8bff357 100644 (file)
@@ -91,6 +91,11 @@ public enum Bit implements StrictLogicType<Bit>
                return values()[2 + (value & 1)];
        }
 
+       public static Bit of(boolean binaryValue)
+       {
+               return binaryValue ? ONE : ZERO;
+       }
+
        public static Bit parse(String s)
        {
                Bit bit = SYMBOL_MAP.get(s);
index 9e09f43..cce83f4 100644 (file)
@@ -13,7 +13,6 @@ import java.util.function.UnaryOperator;
 /**
  * Immutable class representing a {@link Bit}Vector
  *
- *
  * @author Christian Femers
  *
  */
@@ -23,7 +22,7 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
 
        private BitVector(Bit[] bits)
        {
-               this.bits = Objects.requireNonNull(bits);// do this first to "catch" bits==null before the foreach loop
+               this.bits = Objects.requireNonNull(bits); // do this first to "catch" bits==null before the foreach loop
                for (Bit bit : bits)
                        if (bit == null)
                                throw new NullPointerException();
@@ -44,11 +43,22 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return BitVectorMutator.of(this);
        }
 
-       public Bit getBit(int bitIndex)
+       /**
+        * Returns the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+        */
+       public Bit getMSBit(int bitIndex)
        {
                return bits[bitIndex];
        }
 
+       /**
+        * Returns the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+        */
+       public Bit getLSBit(int bitIndex)
+       {
+               return bits[bits.length - bitIndex - 1];
+       }
+
        public Bit[] getBits()
        {
                return bits.clone();
@@ -224,16 +234,38 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                        return this;
                }
 
-               public void setBit(int bitIndex, Bit bit)
+               /**
+                * Set the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+                */
+               public void setMSBit(int bitIndex, Bit bit)
                {
                        bits[bitIndex] = bit;
                }
 
-               public Bit getBit(int bitIndex)
+               /**
+                * Set the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+                */
+               public void setLSBit(int bitIndex, Bit bit)
+               {
+                       bits[bits.length - bitIndex - 1] = bit;
+               }
+
+               /**
+                * Returns the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+                */
+               public Bit getMSBit(int bitIndex)
                {
                        return bits[bitIndex];
                }
 
+               /**
+                * Returns the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+                */
+               public Bit getLSBit(int bitIndex)
+               {
+                       return bits[bits.length - bitIndex - 1];
+               }
+
                public int length()
                {
                        return bits.length;
@@ -286,45 +318,26 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return Arrays.equals(bits, offset, offset + other.length(), other.bits, 0, other.length());
        }
 
-       @Override
-       public String toString()
-       {
-               return toBitStringMSBFirst();
-       }
-
-       /**
-        * All {@link Bit}s symbols concatenated together
-        * 
-        * @see #parse(String)
-        */
-       public String toBitStringLSBFirst()
-       {
-               StringBuilder sb = new StringBuilder(bits.length);
-               for (Bit bit : bits)
-                       sb.append(bit);
-               return sb.toString();
-       }
-
        /**
-        * All {@link Bit}s symbols concatenated together, with the MSB coming first (like a binary number)
+        * All {@link Bit}s symbols concatenated together (MSB first)
         * 
         * @see #parse(String)
         */
-       public String toBitStringMSBFirst()
+       @Override
+       public String toString()
        {
                StringBuilder sb = new StringBuilder(bits.length);
                for (Bit bit : bits)
                        sb.append(bit);
-               sb.reverse();
                return sb.toString();
        }
 
        /**
-        * Parses a String containing solely {@link Bit} symbols
+        * Parses a String containing solely {@link Bit} symbols (MSB first)
         * 
-        * @see #toBitStringLSBFirst()
+        * @see #toString()
         */
-       public static BitVector parseLSBFirst(String s)
+       public static BitVector parse(String s)
        {
                Bit[] values = new Bit[s.length()];
                for (int i = 0; i < s.length(); i++)
@@ -335,20 +348,8 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
        }
 
        /**
-        * Parses a String containing solely {@link Bit} symbols, with the MSB coming first (like a binary number)
-        * 
-        * @see #toBitStringLSBFirst()
+        * Iterate over the {@link Bit}s of the BitVector <b>from MSB to LSB</b> (left to right).
         */
-       public static BitVector parseMSBFirst(String s)
-       {
-               Bit[] values = new Bit[s.length()];
-               for (int i = 0, j = s.length() - 1; j >= 0; i++, j--)
-               {
-                       values[i] = Bit.parse(s, j);
-               }
-               return new BitVector(values);
-       }
-
        @Override
        public Iterator<Bit> iterator()
        {
@@ -361,7 +362,7 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                        {
                                if (!hasNext())
                                        throw new NoSuchElementException();
-                               return getBit(pos++);
+                               return getMSBit(pos++);
                        }
 
                        @Override
index 5fd1e2c..987f361 100644 (file)
@@ -16,7 +16,7 @@ public class BitVectorFormatter
        {
                if (bitVector == null)
                        return "null";
-               return bitVector.toBitStringMSBFirst();
+               return bitVector.toString();
        }
 
        // TODO doesn't this belong to logic.ui?
@@ -30,7 +30,7 @@ public class BitVectorFormatter
                // TODO maybe find a color assignment for multiple-bit bit vectors?
                if (bitVector == null || bitVector.length() != 1)
                        return new ColorDefinition(BuiltInColor.COLOR_BLACK);
-               switch (bitVector.getBit(0))
+               switch (bitVector.getLSBit(0))
                {
                case ONE:
                        return Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.bit.one");
@@ -43,7 +43,7 @@ public class BitVectorFormatter
                case ZERO:
                        return Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.bit.zero");
                default:
-                       throw new IllegalArgumentException("Unknown enum constant: " + bitVector.getBit(0));
+                       throw new IllegalArgumentException("Unknown enum constant: " + bitVector.getLSBit(0));
                }
        }
 
index a14efb0..b0e96f1 100644 (file)
@@ -150,14 +150,20 @@ public class Wire
                return val;
        }
 
+       /**
+        * Returns the least significant bit (LSB)
+        */
        public Bit getValue()
        {
                return getValue(0);
        }
 
+       /**
+        * Returns the least significant bit (LSB) of the given index
+        */
        public Bit getValue(int index)
        {
-               return values.getBit(index);
+               return values.getLSBit(index);
        }
 
        public BitVector getValues(int start, int end)
@@ -446,7 +452,8 @@ public class Wire
                }
 
                /**
-                * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.
+                * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.Returns the least
+                *         significant bit (LSB)
                 */
                public Bit getInputValue()
                {
@@ -455,10 +462,12 @@ public class Wire
 
                /**
                 * @return The value which the {@link ReadEnd} is currently feeding into the associated {@link Wire} at the indexed {@link Bit}.
+                *         Returns the least significant bit (LSB)
+                * 
                 */
                public Bit getInputValue(int index)
                {
-                       return inputValues.getBit(index);
+                       return inputValues.getLSBit(index);
                }
 
                /**
@@ -466,7 +475,7 @@ public class Wire
                 */
                public BitVector getInputValues()
                {
-                       return getInputValues(0, length);
+                       return inputValues;
                }
 
                public BitVector getInputValues(int start, int end)
diff --git a/net.mograsim.logic.model.am2900/.classpath b/net.mograsim.logic.model.am2900/.classpath
new file mode 100644 (file)
index 0000000..da70a87
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+               <attributes>
+                       <attribute name="module" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" output="bin/src" path="src"/>
+       <classpathentry kind="src" output="bin/test" path="test">
+               <attributes>
+                       <attribute name="test" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/net.mograsim.logic.model.am2900/.gitignore b/net.mograsim.logic.model.am2900/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/net.mograsim.logic.model.am2900/.project b/net.mograsim.logic.model.am2900/.project
new file mode 100644 (file)
index 0000000..5ac2138
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>net.mograsim.logic.model.am2900</name>
+       <comment></comment>
+       <projects>
+               <project>net.mograsim.logic.ui</project>
+               <project>SWTZoomableCanvas</project>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.PluginNature</nature>
+       </natures>
+</projectDescription>
diff --git a/net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..f8bd225
--- /dev/null
@@ -0,0 +1,456 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+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.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=140
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=140
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.model.am2900/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..8f2c0a4
--- /dev/null
@@ -0,0 +1,63 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_MoGraSim
+formatter_settings_version=16
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/net.mograsim.logic.model.am2900/FullAdder.json b/net.mograsim.logic.model.am2900/FullAdder.json
new file mode 100644 (file)
index 0000000..40c51c7
--- /dev/null
@@ -0,0 +1,188 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "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
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 5.0,
+          "y": 40.0
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 7.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 57.5,
+          "y": 40.0
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "_Z"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "_Z"
+        },
+        "pin2": {
+          "compId": 3,
+          "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": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Z"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": 3,
+    "label": "GUIfulladder",
+    "logic_width": 1,
+    "output_count": 2
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/HalfAdder.json b/net.mograsim.logic.model.am2900/HalfAdder.json
new file mode 100644 (file)
index 0000000..48c1980
--- /dev/null
@@ -0,0 +1,323 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "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
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 15.0
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 2.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 27.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 2.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 11.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 36.5
+        },
+        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 24.0
+        },
+        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "_Z"
+        },
+        "path": [
+          {
+            "x": 80.0,
+            "y": 25.0
+          },
+          {
+            "x": 80.0,
+            "y": 37.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 62.5,
+            "y": 12.5
+          },
+          {
+            "x": 62.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 62.5,
+            "y": 37.5
+          },
+          {
+            "x": 62.5,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": 2,
+    "label": "GUIhalfadder",
+    "logic_width": 1,
+    "output_count": 2
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF b/net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..71d5a3b
--- /dev/null
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: net.mograsim.logic.model.am2900;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Export-Package: net.mograsim.logic.model.examples,
+ net.mograsim.logic.model.model.components.mi.nandbased,
+ net.mograsim.logic.model.model.components.mi.nandbased.am2901
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0";visibility:=reexport
+Automatic-Module-Name: net.mograsim.logic.ui
+Bundle-Vendor: Mograsim Team
diff --git a/net.mograsim.logic.model.am2900/OSGI-INF/l10n/bundle.properties b/net.mograsim.logic.model.am2900/OSGI-INF/l10n/bundle.properties
new file mode 100644 (file)
index 0000000..f1ecb43
--- /dev/null
@@ -0,0 +1,3 @@
+#Properties file for net.mograsim.logic.ui
+Bundle-Vendor = Mograsim Team
+Bundle-Name = Mograsim Am2900 logic
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/Test.json b/net.mograsim.logic.model.am2900/Test.json
new file mode 100644 (file)
index 0000000..56085df
--- /dev/null
@@ -0,0 +1,36 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "width": 35.0,
+  "height": 10.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "Input pin #0",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 0.0,
+          "y": 0.0
+        },
+        "type": "file:HalfAdder.json",
+        "params": {}
+      }
+    ],
+    "innerWires": []
+  },
+  "specialized": {
+    "input_count": 1,
+    "label": "Test",
+    "logic_width": 1,
+    "output_count": 0
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/build.properties b/net.mograsim.logic.model.am2900/build.properties
new file mode 100644 (file)
index 0000000..d6642e6
--- /dev/null
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/net.mograsim.logic.model.am2900/components/GUI_rsLatch.json b/net.mograsim.logic.model.am2900/components/GUI_rsLatch.json
new file mode 100644 (file)
index 0000000..a91b815
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIand.json b/net.mograsim.logic.model.am2900/components/GUIand.json
new file mode 100644 (file)
index 0000000..5877291
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIand41.json b/net.mograsim.logic.model.am2900/components/GUIand41.json
new file mode 100644 (file)
index 0000000..973a4c9
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIandor414.json b/net.mograsim.logic.model.am2900/components/GUIandor414.json
new file mode 100644 (file)
index 0000000..5cadf0f
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIdemux2.json b/net.mograsim.logic.model.am2900/components/GUIdemux2.json
new file mode 100644 (file)
index 0000000..5ded84b
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIdff.json b/net.mograsim.logic.model.am2900/components/GUIdff.json
new file mode 100644 (file)
index 0000000..55151f8
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIdlatch.json b/net.mograsim.logic.model.am2900/components/GUIdlatch.json
new file mode 100644 (file)
index 0000000..69562ce
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIdlatch4.json b/net.mograsim.logic.model.am2900/components/GUIdlatch4.json
new file mode 100644 (file)
index 0000000..29f4ac0
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIfulladder.json b/net.mograsim.logic.model.am2900/components/GUIfulladder.json
new file mode 100644 (file)
index 0000000..dc4c616
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIhalfadder.json b/net.mograsim.logic.model.am2900/components/GUIhalfadder.json
new file mode 100644 (file)
index 0000000..761d6ce
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUImux1.json b/net.mograsim.logic.model.am2900/components/GUImux1.json
new file mode 100644 (file)
index 0000000..7ce9002
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUImux1_4.json b/net.mograsim.logic.model.am2900/components/GUImux1_4.json
new file mode 100644 (file)
index 0000000..21e2f21
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUInand3.json b/net.mograsim.logic.model.am2900/components/GUInand3.json
new file mode 100644 (file)
index 0000000..b3a6300
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUInot4.json b/net.mograsim.logic.model.am2900/components/GUInot4.json
new file mode 100644 (file)
index 0000000..7d575c8
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIor4.json b/net.mograsim.logic.model.am2900/components/GUIor4.json
new file mode 100644 (file)
index 0000000..d4bcd57
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIor_4.json b/net.mograsim.logic.model.am2900/components/GUIor_4.json
new file mode 100644 (file)
index 0000000..86b4413
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIram2.json b/net.mograsim.logic.model.am2900/components/GUIram2.json
new file mode 100644 (file)
index 0000000..3cb8583
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIram4.json b/net.mograsim.logic.model.am2900/components/GUIram4.json
new file mode 100644 (file)
index 0000000..99f606d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIsel2_4.json b/net.mograsim.logic.model.am2900/components/GUIsel2_4.json
new file mode 100644 (file)
index 0000000..219e1b9
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIsel3_4.json b/net.mograsim.logic.model.am2900/components/GUIsel3_4.json
new file mode 100644 (file)
index 0000000..1cae789
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUIxor.json b/net.mograsim.logic.model.am2900/components/GUIxor.json
new file mode 100644 (file)
index 0000000..9e3ec59
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901.json
new file mode 100644 (file)
index 0000000..7563d83
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUFuncDecode.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUFuncDecode.json
new file mode 100644 (file)
index 0000000..a24476b
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclDecode.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclDecode.json
new file mode 100644 (file)
index 0000000..62d78f1
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json
new file mode 100644 (file)
index 0000000..75c63dd
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUOneBit.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901ALUOneBit.json
new file mode 100644 (file)
index 0000000..b6b05e1
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901DestDecode.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901DestDecode.json
new file mode 100644 (file)
index 0000000..d80d080
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901QReg.json
new file mode 100644 (file)
index 0000000..6af804d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901SourceDecode.json b/net.mograsim.logic.model.am2900/components/am2901/GUIAm2901SourceDecode.json
new file mode 100644 (file)
index 0000000..e36193d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ComponenetSerializer.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/ComponenetSerializer.java
new file mode 100644 (file)
index 0000000..3d568e3
--- /dev/null
@@ -0,0 +1,65 @@
+package net.mograsim.logic.model.examples;
+
+import java.io.IOException;
+import java.util.function.Function;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUI_rsLatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand41;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIandor414;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdemux2;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdff;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIhalfadder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInand3;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInot4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram2;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel2_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUFuncDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUInclDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUInclSourceDecodeInclFunctionDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUOneBit;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901DestDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901QReg;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901SourceDecode;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class ComponenetSerializer
+{
+       public static void main(String[] args) throws IOException
+       {
+               // we know we only use components where this works
+               Function<GUIComponent, String> getIdentifier = c -> c.getClass().getSimpleName();
+
+               ViewModelModifiable model = new ViewModelModifiable();
+               SubmodelComponent[] components = { new GUIAm2901(model), new GUIAm2901ALUFuncDecode(model), new GUIAm2901ALUInclDecode(model),
+                               new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(model), new GUIAm2901ALUOneBit(model), new GUIAm2901DestDecode(model),
+                               new GUIAm2901QReg(model), new GUIAm2901SourceDecode(model), new GUI_rsLatch(model), new GUIand(model), new GUIand41(model),
+                               new GUIandor414(model), new GUIdemux2(model), new GUIdff(model), new GUIdlatch(model), new GUIdlatch4(model),
+                               new GUIfulladder(model), new GUIhalfadder(model), new GUImux1(model), new GUImux1_4(model), new GUInand3(model),
+                               new GUInot4(model), new GUIor4(model), new GUIor_4(model), new GUIram2(model), new GUIram4(model), new GUIsel2_4(model),
+                               new GUIsel3_4(model), new GUIxor(model) };
+
+               for (SubmodelComponent comp : components)
+               {
+                       SubmodelComponentParams params = comp.calculateParams(getIdentifier);
+                       JsonHandler.writeJson(params, "components/"
+                                       + comp.getClass().getName().substring("net.mograsim.logic.ui.model.components.mi.nandbased.".length()).replace('.', '/')
+                                       + ".json");
+               }
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/JsonExample.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/JsonExample.java
new file mode 100644 (file)
index 0000000..120ceb6
--- /dev/null
@@ -0,0 +1,149 @@
+package net.mograsim.logic.model.examples;
+
+import java.io.IOException;
+
+import com.google.gson.JsonNull;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUI_rsLatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class JsonExample
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(JsonExample::basicTest);
+       }
+
+       public static void mappingTest(ViewModelModifiable model)
+       {
+               IndirectGUIComponentCreator.createComponent(model, "Am2901", JsonNull.INSTANCE, "Am2901 instance");
+       }
+
+       private static class TestComponent extends SimpleRectangularSubmodelComponent
+       {
+               protected TestComponent(ViewModelModifiable model, String name)
+               {
+                       super(model, 1, "Test", name);
+                       setSubmodelScale(.4);
+                       setInputPins("Input pin #0");
+                       SubmodelComponentDeserializer.create(submodelModifiable, "HalfAdder.json", "halfadder");
+               }
+       }
+
+       @SuppressWarnings("unused") // GUIWires being created
+       private static void basicTest(ViewModelModifiable viewModel)
+       {
+               GUI_rsLatch comp = new GUI_rsLatch(viewModel, "Original RS latch");
+               comp.moveTo(30, 0);
+               SubmodelComponentParams params = comp.calculateParams();
+               String jsonString = JsonHandler.toJson(params);
+               System.out.println(jsonString);
+               SubmodelComponentParams paramsD = JsonHandler.fromJson(jsonString, SubmodelComponentParams.class);
+               SubmodelComponent componentD = SubmodelComponentDeserializer.create(viewModel, paramsD, "Deserialized RS latch");
+               componentD.moveTo(30, 50);
+               double h = 0;
+               for (String s : comp.getInputPinNames())
+               {
+                       GUIManualSwitch sw = new GUIManualSwitch(viewModel);
+                       sw.moveTo(0, h);
+                       new GUIWire(viewModel, sw.getOutputPin(), comp.getPin(s));
+                       sw = new GUIManualSwitch(viewModel);
+                       sw.moveTo(0, h + 50);
+                       new GUIWire(viewModel, sw.getOutputPin(), componentD.getPin(s));
+                       h += 20;
+               }
+               h = 0;
+               for (String s : comp.getOutputPinNames())
+               {
+                       GUIBitDisplay bd = new GUIBitDisplay(viewModel);
+                       bd.moveTo(80, h);
+                       new GUIWire(viewModel, bd.getInputPin(), comp.getPin(s));
+                       bd = new GUIBitDisplay(viewModel);
+                       bd.moveTo(80, h + 50);
+                       new GUIWire(viewModel, bd.getInputPin(), componentD.getPin(s));
+                       h += 20;
+               }
+       }
+
+       // Execute only after HalfAdder.json has been created
+       public static void refJsonFromJsonTest(ViewModelModifiable model)
+       {
+               TestComponent t = new TestComponent(model, "Original component");
+               t.calculateParams().writeJson("Test.json");
+               SubmodelComponent c = SubmodelComponentDeserializer.create(model, "Test.json", "Deserialized component");
+               c.moveTo(0, 50);
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       public static void createFromJsonExample(ViewModelModifiable model)
+       {
+               SimpleRectangularSubmodelComponent tmp = new GUIfulladder(model, "Original full adder");
+               SubmodelComponentParams pC = tmp.calculateParams();
+               tmp.moveTo(1000, 100);
+               try
+               {
+                       pC.writeJson("FullAdder.json");
+                       pC = SubmodelComponentParams.readJson("FullAdder.json");
+               }
+               catch (IOException e)
+               {
+                       e.printStackTrace();
+               }
+
+               SimpleRectangularSubmodelComponent adder = (SimpleRectangularSubmodelComponent) SubmodelComponentDeserializer.create(model,
+                               "FullAdder.json", "Deserialized full adder");
+
+               GUIManualSwitch swA = new GUIManualSwitch(model);
+               swA.moveTo(0, 0);
+               GUIManualSwitch swB = new GUIManualSwitch(model);
+               swB.moveTo(0, 25);
+               GUIManualSwitch swC = new GUIManualSwitch(model);
+               swC.moveTo(0, 50);
+
+               adder.moveTo(30, 10);
+               GUIBitDisplay bdY = new GUIBitDisplay(model);
+               bdY.moveTo(90, 12.5);
+               GUIBitDisplay bdZ = new GUIBitDisplay(model);
+               bdZ.moveTo(90, 30);
+
+               new GUIWire(model, swA.getOutputPin(), adder.getPin("A"));
+               new GUIWire(model, swB.getOutputPin(), adder.getPin("B"));
+               new GUIWire(model, swC.getOutputPin(), adder.getPin("C"));
+
+               new GUIWire(model, adder.getPin("Y"), bdY.getInputPin());
+               new GUIWire(model, adder.getPin("Z"), bdZ.getInputPin());
+
+               SubmodelComponent adder2 = SubmodelComponentDeserializer.create(model, pC, "Full adder created from params instance");
+
+               swA = new GUIManualSwitch(model);
+               swA.moveTo(0, 70);
+               swB = new GUIManualSwitch(model);
+               swB.moveTo(0, 85);
+               swC = new GUIManualSwitch(model);
+               swC.moveTo(0, 100);
+
+               adder2.moveTo(30, 80);
+               bdY = new GUIBitDisplay(model);
+               bdY.moveTo(90, 70);
+               bdZ = new GUIBitDisplay(model);
+               bdZ.moveTo(90, 85);
+
+               new GUIWire(model, swA.getOutputPin(), adder2.getPin("A"));
+               new GUIWire(model, swB.getOutputPin(), adder2.getPin("B"));
+               new GUIWire(model, swC.getOutputPin(), adder2.getPin("C"));
+
+               new GUIWire(model, adder2.getPin("Y"), bdY.getInputPin());
+               new GUIWire(model, adder2.getPin("Z"), bdZ.getInputPin());
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/SubmodelComponentTestbench.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/SubmodelComponentTestbench.java
new file mode 100644 (file)
index 0000000..0d9c604
--- /dev/null
@@ -0,0 +1,51 @@
+package net.mograsim.logic.model.examples;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+
+public class SubmodelComponentTestbench
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(SubmodelComponentTestbench::createTestbench);
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       public static void createTestbench(ViewModelModifiable model)
+       {
+               SubmodelComponent comp = SubmodelComponentDeserializer.create(model, "components/am2901/GUIAm2901.json");
+
+               // guess which pins are outputs and which are inputs
+               // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+               List<String> inputPinNames = new ArrayList<>();
+               List<String> outputPinNames = new ArrayList<>();
+               for (Pin p : comp.getPins().values())
+                       if (p.getRelX() == 0)
+                               inputPinNames.add(p.name);
+                       else
+                               outputPinNames.add(p.name);
+
+               comp.moveTo(100, 0);
+               for (int i = 0; i < inputPinNames.size(); i++)
+               {
+                       GUIManualSwitch sw = new GUIManualSwitch(model);
+                       sw.moveTo(0, 20 * i);
+                       new GUIWire(model, comp.getPin(inputPinNames.get(i)), sw.getOutputPin());
+               }
+               for (int i = 0; i < outputPinNames.size(); i++)
+               {
+                       GUIBitDisplay bd = new GUIBitDisplay(model);
+                       bd.moveTo(200, 20 * i);
+                       new GUIWire(model, comp.getPin(outputPinNames.get(i)), bd.getInputPin());
+               }
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java
new file mode 100644 (file)
index 0000000..20fbbaa
--- /dev/null
@@ -0,0 +1,109 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUI_rsLatch extends SimpleRectangularSubmodelComponent
+{
+       private GUIWire wireQ, wire_Q;
+
+       public GUI_rsLatch(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUI_rsLatch(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "_rsLatch", name);
+               setSubmodelScale(.4);
+               setInputPins("_S", "_R");
+               setOutputPins("Q", "_Q");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin _S = getSubmodelPin("_S");
+               Pin _R = getSubmodelPin("_R");
+               Pin Q = getSubmodelPin("Q");
+               Pin _Q = getSubmodelPin("_Q");
+
+               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+
+               nand1.moveTo(10, 7.5);
+               nand2.moveTo(40, 12.5);
+               cp1.moveCenterTo(35, 17.5);
+               cp2.moveCenterTo(65, 37.5);
+
+               new GUIWire(submodelModifiable, _S, nand1.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, _R, nand2.getPin("B"), new Point(35, 37.5), new Point(35, 27.5));
+               new GUIWire(submodelModifiable, nand1.getPin("Y"), cp1, new Point[0]);
+               new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(65, 22.5));
+               new GUIWire(submodelModifiable, cp1, nand2.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cp2, nand1.getPin("B"), new Point(65, 42.5), new Point(5, 42.5), new Point(5, 22.5));
+               wireQ = new GUIWire(submodelModifiable, cp1, Q, new Point(35, 17.5), new Point(35, 7.5), new Point(65, 7.5), new Point(65, 12.5));
+               wire_Q = new GUIWire(submodelModifiable, cp2, _Q, new Point[0]);
+
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       if (wireQ != null)
+                       {
+                               // TODO force this to happen without any Timeline updates in the meantime.
+                               // Maybe make it a requirement of setHighLevelState that the Timeline is "halted" during a call?
+                               Bit newStateCasted = (Bit) newState;
+                               BitVector newStateVector = BitVector.of(newStateCasted);
+                               if (wireQ.hasLogicModelBinding())
+                                       wireQ.forceWireValues(newStateVector);
+                               // We set both wires because then both outputs go to their correct state at the same time, and to avoid problems when not
+                               // both
+                               // inputs are 1
+                               if (wire_Q.hasLogicModelBinding())
+                                       wire_Q.forceWireValues(newStateVector.not());
+                       }
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       if (wireQ.hasLogicModelBinding())
+                               return wireQ.getWireValues().getLSBit(0);
+                       return null;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUI_rsLatch.class.getCanonicalName(), (m, p, n) -> new GUI_rsLatch(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand.java
new file mode 100644 (file)
index 0000000..1e350e3
--- /dev/null
@@ -0,0 +1,56 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIand extends SimpleRectangularSubmodelComponent
+{
+       public GUIand(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIand(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIand", name);
+               setSubmodelScale(.4);
+               setInputPins("A", "B");
+               setOutputPins("Y");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A = getSubmodelPin("A");
+               Pin B = getSubmodelPin("B");
+               Pin Y = getSubmodelPin("Y");
+
+               GUINandGate nand = new GUINandGate(submodelModifiable, 1);
+               GUINandGate not = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+
+               nand.moveTo(20, 15);
+               not.moveTo(50, 15);
+               cp1.moveCenterTo(45, 25);
+
+               new GUIWire(submodelModifiable, A, nand.getPin("A"));
+               new GUIWire(submodelModifiable, B, nand.getPin("B"));
+               new GUIWire(submodelModifiable, nand.getPin("Y"), cp1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, not.getPin("A"), new Point(45, 20));
+               new GUIWire(submodelModifiable, cp1, not.getPin("B"), new Point(45, 30));
+               new GUIWire(submodelModifiable, not.getPin("Y"), Y);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIand.class.getCanonicalName(), (m, p, n) -> new GUIand(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand41.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIand41.java
new file mode 100644 (file)
index 0000000..1074ab2
--- /dev/null
@@ -0,0 +1,78 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIand41 extends SimpleRectangularSubmodelComponent
+{
+       public GUIand41(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIand41(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIand41", name);
+               setSubmodelScale(.4);
+               setInputPins("A1", "A2", "A3", "A4", "B");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B = getSubmodelPin("B");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUIand and1 = new GUIand(submodelModifiable);
+               GUIand and2 = new GUIand(submodelModifiable);
+               GUIand and3 = new GUIand(submodelModifiable);
+               GUIand and4 = new GUIand(submodelModifiable);
+
+               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
+
+               and1.moveTo(30, 7.5);
+               and2.moveTo(30, 32.5);
+               and3.moveTo(30, 57.5);
+               and4.moveTo(30, 82.5);
+               cpB2.moveCenterTo(25, 47.5);
+               cpB3.moveCenterTo(25, 72.5);
+               cpB4.moveCenterTo(25, 97.5);
+
+               new GUIWire(submodelModifiable, A1, and1.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, A2, and2.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, A3, and3.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, A4, and4.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, B, cpB4, new Point(25, 112.5));
+               new GUIWire(submodelModifiable, cpB4, and4.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB4, cpB3, new Point[0]);
+               new GUIWire(submodelModifiable, cpB3, and3.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB3, cpB2, new Point[0]);
+               new GUIWire(submodelModifiable, cpB2, and2.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB2, and1.getPin("B"), new Point(25, 22.5));
+               new GUIWire(submodelModifiable, and1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, and2.getPin("Y"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, and3.getPin("Y"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, and4.getPin("Y"), Y4, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIand41.class.getCanonicalName(), (m, p, n) -> new GUIand41(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIandor414.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIandor414.java
new file mode 100644 (file)
index 0000000..963649a
--- /dev/null
@@ -0,0 +1,76 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIandor414 extends SimpleRectangularSubmodelComponent
+{
+       public GUIandor414(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIandor414(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIandor414", name);
+               setSubmodelScale(.4);
+               setInputPins("C1", "C2", "C3", "C4", "A1", "A2", "A3", "A4", "B");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin C1 = getSubmodelPin("C1");
+               Pin C2 = getSubmodelPin("C2");
+               Pin C3 = getSubmodelPin("C3");
+               Pin C4 = getSubmodelPin("C4");
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B = getSubmodelPin("B");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUIand41 and = new GUIand41(submodelModifiable);
+               GUIor_4 or = new GUIor_4(submodelModifiable);
+
+               and.moveTo(15, 137.5);
+               or.moveTo(35, 37.5);
+
+               new GUIWire(submodelModifiable, A1, and.getPin("A1"), new Point(10, 112.5), new Point(10, 142.5));
+               new GUIWire(submodelModifiable, A2, and.getPin("A2"), new Point(5, 137.5), new Point(5, 152.5));
+               new GUIWire(submodelModifiable, A3, and.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, A4, and.getPin("A4"), new Point(5, 187.5), new Point(5, 172.5));
+               new GUIWire(submodelModifiable, B, and.getPin("B"), new Point(10, 212.5), new Point(10, 182.5));
+               new GUIWire(submodelModifiable, C1, or.getPin("A1"), new Point(10, 12.5), new Point(10, 42.5));
+               new GUIWire(submodelModifiable, C2, or.getPin("A2"), new Point(5, 37.5), new Point(5, 52.5));
+               new GUIWire(submodelModifiable, C3, or.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, C4, or.getPin("A4"), new Point(5, 87.5), new Point(5, 72.5));
+               new GUIWire(submodelModifiable, and.getPin("Y1"), or.getPin("B1"), new Point(70, 142.5), new Point(70, 120), new Point(30, 120),
+                               new Point(30, 82.5));
+               new GUIWire(submodelModifiable, and.getPin("Y2"), or.getPin("B2"), new Point(65, 152.5), new Point(65, 125), new Point(25, 125),
+                               new Point(25, 92.5));
+               new GUIWire(submodelModifiable, and.getPin("Y3"), or.getPin("B3"), new Point(60, 162.5), new Point(60, 130), new Point(20, 130),
+                               new Point(20, 102.5));
+               new GUIWire(submodelModifiable, and.getPin("Y4"), or.getPin("B4"), new Point(55, 172.5), new Point(55, 135), new Point(15, 135),
+                               new Point(15, 112.5));
+               new GUIWire(submodelModifiable, or.getPin("Y1"), Y1, new Point(75, 42.5), new Point(75, 12.5));
+               new GUIWire(submodelModifiable, or.getPin("Y2"), Y2, new Point(80, 52.5), new Point(80, 37.5));
+               new GUIWire(submodelModifiable, or.getPin("Y3"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, or.getPin("Y4"), Y4, new Point(80, 72.5), new Point(80, 87.5));
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIandor414.class.getCanonicalName(), (m, p, n) -> new GUIandor414(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdemux2.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdemux2.java
new file mode 100644 (file)
index 0000000..2b61cd4
--- /dev/null
@@ -0,0 +1,99 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdemux2 extends SimpleRectangularSubmodelComponent
+{
+       public GUIdemux2(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIdemux2(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIdemux2", name);
+               setSubmodelScale(.4);
+               setInputPins("S0", "S1");
+               setOutputPins("Y00", "Y01", "Y10", "Y11");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin S0 = getSubmodelPin("S0");
+               Pin S1 = getSubmodelPin("S1");
+               Pin Y00 = getSubmodelPin("Y00");
+               Pin Y01 = getSubmodelPin("Y01");
+               Pin Y10 = getSubmodelPin("Y10");
+               Pin Y11 = getSubmodelPin("Y11");
+
+               GUINandGate notS0 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notS1 = new GUINandGate(submodelModifiable, 1);
+               GUIand andY00 = new GUIand(submodelModifiable);
+               GUIand andY01 = new GUIand(submodelModifiable);
+               GUIand andY10 = new GUIand(submodelModifiable);
+               GUIand andY11 = new GUIand(submodelModifiable);
+
+               WireCrossPoint cpS01 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpS02 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpS03 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpS11 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpS12 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpS13 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotS0 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotS1 = new WireCrossPoint(submodelModifiable, 1);
+
+               notS0.moveTo(10, 2.5);
+               notS1.moveTo(10, 27.5);
+               andY00.moveTo(40, 2.5);
+               andY01.moveTo(40, 27.5);
+               andY10.moveTo(40, 52.5);
+               andY11.moveTo(40, 77.5);
+               cpS01.moveCenterTo(7.5, 12.5);
+               cpS11.moveCenterTo(5, 37.5);
+               cpS02.moveCenterTo(7.5, 17.5);
+               cpS12.moveCenterTo(5, 42.5);
+               cpS03.moveCenterTo(37.5, 62.5);
+               cpS13.moveCenterTo(32.5, 67.5);
+               cpNotS0.moveCenterTo(32.5, 12.5);
+               cpNotS1.moveCenterTo(35, 37.5);
+
+               new GUIWire(submodelModifiable, S0, cpS01, new Point[0]);
+               new GUIWire(submodelModifiable, S1, cpS11, new Point[0]);
+               new GUIWire(submodelModifiable, cpS01, notS0.getPin("A"), new Point(7.5, 7.5));
+               new GUIWire(submodelModifiable, cpS11, notS1.getPin("A"), new Point(5, 32.5));
+               new GUIWire(submodelModifiable, cpS01, cpS02, new Point[0]);
+               new GUIWire(submodelModifiable, cpS11, cpS12, new Point[0]);
+               new GUIWire(submodelModifiable, cpS02, notS0.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpS12, notS1.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpS02, cpS03, new Point(7.5, 62.5));
+               new GUIWire(submodelModifiable, cpS12, cpS13, new Point(5, 67.5), new Point(32.5, 67.5));
+               new GUIWire(submodelModifiable, notS0.getPin("Y"), cpNotS0, new Point[0]);
+               new GUIWire(submodelModifiable, notS1.getPin("Y"), cpNotS1, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotS0, andY00.getPin("A"), new Point(32.5, 7.5));
+               new GUIWire(submodelModifiable, cpNotS1, andY00.getPin("B"), new Point(35, 17.5));
+               new GUIWire(submodelModifiable, cpS03, andY01.getPin("A"), new Point(37.5, 32.5));
+               new GUIWire(submodelModifiable, cpNotS1, andY01.getPin("B"), new Point(35, 42.5));
+               new GUIWire(submodelModifiable, cpNotS0, andY10.getPin("A"), new Point(32.5, 57.5));
+               new GUIWire(submodelModifiable, cpS13, andY10.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpS03, andY11.getPin("A"), new Point(37.5, 82.5));
+               new GUIWire(submodelModifiable, cpS13, andY11.getPin("B"), new Point(32.5, 92.5));
+               new GUIWire(submodelModifiable, andY00.getPin("Y"), Y00);
+               new GUIWire(submodelModifiable, andY01.getPin("Y"), Y01);
+               new GUIWire(submodelModifiable, andY10.getPin("Y"), Y10);
+               new GUIWire(submodelModifiable, andY11.getPin("Y"), Y11);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIdemux2.class.getCanonicalName(), (m, p, n) -> new GUIdemux2(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java
new file mode 100644 (file)
index 0000000..b8a5c8a
--- /dev/null
@@ -0,0 +1,107 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdff extends SimpleRectangularSubmodelComponent
+{
+       private GUI_rsLatch _rsLatch;
+
+       public GUIdff(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIdff(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIdff", name);
+               setSubmodelScale(.2);
+               setInputPins("C", "D");
+               setOutputPins("Q", "_Q");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin C = getSubmodelPin("C");
+               Pin D = getSubmodelPin("D");
+               Pin Q = getSubmodelPin("Q");
+               Pin _Q = getSubmodelPin("_Q");
+
+               GUI_rsLatch _rsLatch1 = new GUI_rsLatch(submodelModifiable);
+               GUInand3 nand3 = new GUInand3(submodelModifiable);
+               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+               GUI_rsLatch _rsLatch2 = this._rsLatch = new GUI_rsLatch(submodelModifiable);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+               _rsLatch1.moveTo(40, 10);
+               nand3.moveTo(40, 40);
+               nand2.moveTo(120, 60);
+               _rsLatch2.moveTo(120, 30);
+               cp1.moveCenterTo(10, 25);
+               cp2.moveCenterTo(20, 65);
+               cp3.moveCenterTo(100, 35);
+               cp4.moveCenterTo(100, 45);
+
+               new GUIWire(submodelModifiable, C, cp1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, _rsLatch1.getPin("_R"), new Point[0]);
+               new GUIWire(submodelModifiable, cp1, nand3.getPin("B"), new Point(10, 55));
+               new GUIWire(submodelModifiable, D, nand2.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(145, 70), new Point(145, 85), new Point(20, 85));
+               new GUIWire(submodelModifiable, cp2, _rsLatch1.getPin("_S"), new Point(20, 15));
+               new GUIWire(submodelModifiable, cp2, nand3.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, _rsLatch1.getPin("_Q"), cp3, new Point(100, 25));
+               new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(30, 35), new Point(30, 45));
+               new GUIWire(submodelModifiable, cp3, _rsLatch2.getPin("_S"), new Point[0]);
+               new GUIWire(submodelModifiable, nand3.getPin("Y"), cp4, new Point[0]);
+               new GUIWire(submodelModifiable, cp4, _rsLatch2.getPin("_R"), new Point[0]);
+               new GUIWire(submodelModifiable, cp4, nand2.getPin("A"), new Point(100, 65));
+               new GUIWire(submodelModifiable, _rsLatch2.getPin("Q"), Q);
+               new GUIWire(submodelModifiable, _rsLatch2.getPin("_Q"), _Q);
+
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       _rsLatch.setHighLevelState("q", newState);
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       return _rsLatch.getHighLevelState("q");
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIdff.class.getCanonicalName(), (m, p, n) -> new GUIdff(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java
new file mode 100644 (file)
index 0000000..7378237
--- /dev/null
@@ -0,0 +1,96 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdlatch extends SimpleRectangularSubmodelComponent
+{
+       private GUI_rsLatch _rsLatch;
+
+       public GUIdlatch(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIdlatch(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIdlatch", name);
+               setSubmodelScale(.4);
+               setInputPins("D", "E");
+               setOutputPins("Q", "_Q");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin D = getSubmodelPin("D");
+               Pin E = getSubmodelPin("E");
+               Pin Q = getSubmodelPin("Q");
+               Pin _Q = getSubmodelPin("_Q");
+
+               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+               _rsLatch = new GUI_rsLatch(submodelModifiable);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+
+               nand1.moveTo(10, 2.5);
+               nand2.moveTo(15, 27.5);
+               _rsLatch.moveTo(45, 7.5);
+               cp1.moveCenterTo(5, 37.5);
+               cp2.moveCenterTo(35, 12.5);
+
+               new GUIWire(submodelModifiable, D, nand1.getPin("A"));
+               new GUIWire(submodelModifiable, E, cp1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(5, 17.5));
+               new GUIWire(submodelModifiable, cp1, nand2.getPin("B"), new Point(5, 42.5));
+               new GUIWire(submodelModifiable, nand1.getPin("Y"), cp2, new Point[0]);
+               new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(35, 25), new Point(10, 25), new Point(10, 32.5));
+               new GUIWire(submodelModifiable, cp2, _rsLatch.getPin("_S"), new Point[0]);
+               new GUIWire(submodelModifiable, nand2.getPin("Y"), _rsLatch.getPin("_R"), new Point(40, 37.5), new Point(40, 22.5));
+               new GUIWire(submodelModifiable, _rsLatch.getPin("Q"), Q, new Point[0]);
+               new GUIWire(submodelModifiable, _rsLatch.getPin("_Q"), _Q);
+
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       _rsLatch.setHighLevelState("q", newState);
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       return _rsLatch.getHighLevelState("q");
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIdlatch.class.getCanonicalName(), (m, p, n) -> new GUIdlatch(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java
new file mode 100644 (file)
index 0000000..875843f
--- /dev/null
@@ -0,0 +1,146 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdlatch4 extends SimpleRectangularSubmodelComponent
+{
+       private GUIdlatch dlatch1;
+       private GUIdlatch dlatch2;
+       private GUIdlatch dlatch3;
+       private GUIdlatch dlatch4;
+
+       public GUIdlatch4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIdlatch4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIdlatch4", name);
+               setSubmodelScale(.4);
+               setInputPins("D1", "D2", "D3", "D4", "C");
+               setOutputPins("Q1", "Q2", "Q3", "Q4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin D1 = getSubmodelPin("D1");
+               Pin D2 = getSubmodelPin("D2");
+               Pin D3 = getSubmodelPin("D3");
+               Pin D4 = getSubmodelPin("D4");
+               Pin C = getSubmodelPin("C");
+               Pin Q1 = getSubmodelPin("Q1");
+               Pin Q2 = getSubmodelPin("Q2");
+               Pin Q3 = getSubmodelPin("Q3");
+               Pin Q4 = getSubmodelPin("Q4");
+
+               dlatch1 = new GUIdlatch(submodelModifiable);
+               dlatch2 = new GUIdlatch(submodelModifiable);
+               dlatch3 = new GUIdlatch(submodelModifiable);
+               dlatch4 = new GUIdlatch(submodelModifiable);
+
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+               dlatch1.moveTo(30, 7.5);
+               dlatch2.moveTo(30, 32.5);
+               dlatch3.moveTo(30, 57.5);
+               dlatch4.moveTo(30, 82.5);
+               cp2.moveCenterTo(15, 47.5);
+               cp3.moveCenterTo(15, 72.5);
+               cp4.moveCenterTo(15, 97.5);
+
+               new GUIWire(submodelModifiable, C, cp4, new Point(15, 112.5));
+               new GUIWire(submodelModifiable, cp4, dlatch4.getPin("E"), new Point[0]);
+               new GUIWire(submodelModifiable, cp4, cp3, new Point[0]);
+               new GUIWire(submodelModifiable, cp3, dlatch3.getPin("E"), new Point[0]);
+               new GUIWire(submodelModifiable, cp3, cp2, new Point[0]);
+               new GUIWire(submodelModifiable, cp2, dlatch2.getPin("E"), new Point[0]);
+               new GUIWire(submodelModifiable, cp2, dlatch1.getPin("E"), new Point(15, 22.5));
+               new GUIWire(submodelModifiable, D1, dlatch1.getPin("D"), new Point[0]);
+               new GUIWire(submodelModifiable, D2, dlatch2.getPin("D"), new Point[0]);
+               new GUIWire(submodelModifiable, D3, dlatch3.getPin("D"), new Point[0]);
+               new GUIWire(submodelModifiable, D4, dlatch4.getPin("D"), new Point[0]);
+               new GUIWire(submodelModifiable, dlatch1.getPin("Q"), Q1, new Point[0]);
+               new GUIWire(submodelModifiable, dlatch2.getPin("Q"), Q2, new Point[0]);
+               new GUIWire(submodelModifiable, dlatch3.getPin("Q"), Q3, new Point[0]);
+               new GUIWire(submodelModifiable, dlatch4.getPin("Q"), Q4, new Point[0]);
+
+               addAtomicHighLevelStateID("q1");
+               addAtomicHighLevelStateID("q2");
+               addAtomicHighLevelStateID("q3");
+               addAtomicHighLevelStateID("q4");
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q1":
+                       dlatch1.setHighLevelState("q", newState);
+                       break;
+               case "q2":
+                       dlatch2.setHighLevelState("q", newState);
+                       break;
+               case "q3":
+                       dlatch3.setHighLevelState("q", newState);
+                       break;
+               case "q4":
+                       dlatch4.setHighLevelState("q", newState);
+                       break;
+               case "q":
+                       BitVector newStateCasted = (BitVector) newState;
+                       setHighLevelState("q1", newStateCasted.getLSBit(0));
+                       setHighLevelState("q2", newStateCasted.getLSBit(1));
+                       setHighLevelState("q3", newStateCasted.getLSBit(2));
+                       setHighLevelState("q4", newStateCasted.getLSBit(3));
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q1":
+                       return dlatch1.getHighLevelState("q");
+               case "q2":
+                       return dlatch2.getHighLevelState("q");
+               case "q3":
+                       return dlatch3.getHighLevelState("q");
+               case "q4":
+                       return dlatch4.getHighLevelState("q");
+               case "q":
+                       Bit q1 = (Bit) getHighLevelState("q1");
+                       Bit q2 = (Bit) getHighLevelState("q2");
+                       Bit q3 = (Bit) getHighLevelState("q3");
+                       Bit q4 = (Bit) getHighLevelState("q4");
+                       return BitVector.of(q4, q3, q2, q1);
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIdlatch4.class.getCanonicalName(), (m, p, n) -> new GUIdlatch4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIfulladder.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIfulladder.java
new file mode 100644 (file)
index 0000000..258da91
--- /dev/null
@@ -0,0 +1,59 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIfulladder extends SimpleRectangularSubmodelComponent
+{
+       public GUIfulladder(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIfulladder(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIfulladder", name);
+               setSubmodelScale(.4);
+               setInputPins("A", "B", "C");
+               setOutputPins("Y", "Z");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A = getSubmodelPin("A");
+               Pin B = getSubmodelPin("B");
+               Pin C = getSubmodelPin("C");
+               Pin Y = getSubmodelPin("Y");
+               Pin Z = getSubmodelPin("Z");
+
+               GUIhalfadder halfBC = new GUIhalfadder(submodelModifiable);
+               GUIhalfadder halfAY = new GUIhalfadder(submodelModifiable);
+               GUINandGate nandZ = new GUINandGate(submodelModifiable, 1);
+
+               halfAY.moveTo(45, 7.5);
+               halfBC.moveTo(5, 40);
+               nandZ.moveTo(57.5, 40);
+
+               new GUIWire(submodelModifiable, A, halfAY.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, B, halfBC.getPin("A"));
+               new GUIWire(submodelModifiable, C, halfBC.getPin("B"));
+               new GUIWire(submodelModifiable, halfBC.getPin("Y"), halfAY.getPin("B"));
+               new GUIWire(submodelModifiable, halfBC.getPin("_Z"), nandZ.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, halfAY.getPin("Y"), Y, new Point[0]);
+               new GUIWire(submodelModifiable, halfAY.getPin("_Z"), nandZ.getPin("A"), new Point(82.5, 22.5), new Point(82.5, 35),
+                               new Point(52.5, 35), new Point(52.5, 45));
+               new GUIWire(submodelModifiable, nandZ.getPin("Y"), Z);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIfulladder.class.getCanonicalName(), (m, p, n) -> new GUIfulladder(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIhalfadder.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIhalfadder.java
new file mode 100644 (file)
index 0000000..3b100fd
--- /dev/null
@@ -0,0 +1,72 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIhalfadder extends SimpleRectangularSubmodelComponent
+{
+       public GUIhalfadder(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIhalfadder(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIhalfadder", name);
+               setSubmodelScale(.4);
+               setInputPins("A", "B");
+               setOutputPins("Y", "_Z");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A = getSubmodelPin("A");
+               Pin B = getSubmodelPin("B");
+               Pin Y = getSubmodelPin("Y");
+               Pin _Z = getSubmodelPin("_Z");
+
+               GUINandGate nand_Z = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp_Z = new WireCrossPoint(submodelModifiable, 1);
+
+               nand_Z.moveTo(10, 15);
+               nandYA.moveTo(40, 2.5);
+               nandYB.moveTo(40, 27.5);
+               nandY.moveTo(65, 2.5);
+               cpA.moveCenterTo(5, 12.5);
+               cpB.moveCenterTo(5, 37.5);
+               cp_Z.moveCenterTo(35, 25);
+
+               new GUIWire(submodelModifiable, A, cpA, new Point[0]);
+               new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
+               new GUIWire(submodelModifiable, cpA, nand_Z.getPin("A"), new Point(5, 20));
+               new GUIWire(submodelModifiable, B, cpB, new Point[0]);
+               new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
+               new GUIWire(submodelModifiable, cpB, nand_Z.getPin("B"), new Point(5, 30));
+               new GUIWire(submodelModifiable, nand_Z.getPin("Y"), cp_Z, new Point[0]);
+               new GUIWire(submodelModifiable, cp_Z, _Z, new Point(80, 25), new Point(80, 37.5));
+               new GUIWire(submodelModifiable, cp_Z, nandYA.getPin("B"), new Point(35, 17.5));
+               new GUIWire(submodelModifiable, cp_Z, nandYB.getPin("A"), new Point(35, 32.5));
+               new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"), new Point(62.5, 12.5), new Point(62.5, 7.5));
+               new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"), new Point(62.5, 37.5), new Point(62.5, 17.5));
+               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIhalfadder.class.getCanonicalName(), (m, p, n) -> new GUIhalfadder(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1.java
new file mode 100644 (file)
index 0000000..53682e9
--- /dev/null
@@ -0,0 +1,68 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUImux1 extends SimpleRectangularSubmodelComponent
+{
+       public GUImux1(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUImux1(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUImux1", name);
+               setSubmodelScale(.4);
+               setInputPins("S0", "I0", "I1");
+               setOutputPins("Y");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused")
+       private void initSubmodelComponents()
+       {
+               Pin S0 = getSubmodelPin("S0");
+               Pin I0 = getSubmodelPin("I0");
+               Pin I1 = getSubmodelPin("I1");
+               Pin Y = getSubmodelPin("Y");
+
+               GUINandGate nandS0 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandI0 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandI1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cp0 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+
+               nandS0.moveTo(10, 7.5);
+               nandI0.moveTo(35, 22.5);
+               nandI1.moveTo(35, 47.5);
+               nandY.moveTo(60, 30);
+               cp0.moveCenterTo(5, 12.5);
+               cp1.moveCenterTo(5, 22.5);
+
+               new GUIWire(submodelModifiable, S0, cp0, new Point[0]);
+               new GUIWire(submodelModifiable, cp0, nandS0.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cp0, cp1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, nandS0.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nandS0.getPin("Y"), nandI0.getPin("A"));
+               new GUIWire(submodelModifiable, I0, nandI0.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cp1, nandI1.getPin("A"), new Point(5, 52.5));
+               new GUIWire(submodelModifiable, I1, nandI1.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nandI0.getPin("Y"), nandY.getPin("A"));
+               new GUIWire(submodelModifiable, nandI1.getPin("Y"), nandY.getPin("B"));
+               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUImux1.class.getCanonicalName(), (m, p, n) -> new GUImux1(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1_4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUImux1_4.java
new file mode 100644 (file)
index 0000000..8bfcce6
--- /dev/null
@@ -0,0 +1,87 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUImux1_4 extends SimpleRectangularSubmodelComponent
+{
+       public GUImux1_4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUImux1_4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUImux1_4", name);
+               setSubmodelScale(.4);
+               setInputPins("S0", "I0_1", "I0_2", "I0_3", "I0_4", "I1_1", "I1_2", "I1_3", "I1_4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused")
+       private void initSubmodelComponents()
+       {
+               Pin S0 = getSubmodelPin("S0");
+               Pin I0_1 = getSubmodelPin("I0_1");
+               Pin I0_2 = getSubmodelPin("I0_2");
+               Pin I0_3 = getSubmodelPin("I0_3");
+               Pin I0_4 = getSubmodelPin("I0_4");
+               Pin I1_1 = getSubmodelPin("I1_1");
+               Pin I1_2 = getSubmodelPin("I1_2");
+               Pin I1_3 = getSubmodelPin("I1_3");
+               Pin I1_4 = getSubmodelPin("I1_4");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUImux1 mux1 = new GUImux1(submodelModifiable);
+               GUImux1 mux2 = new GUImux1(submodelModifiable);
+               GUImux1 mux3 = new GUImux1(submodelModifiable);
+               GUImux1 mux4 = new GUImux1(submodelModifiable);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+
+               mux1.moveTo(30, 7.5);
+               mux2.moveTo(30, 42.5);
+               mux3.moveTo(30, 77.5);
+               mux4.moveTo(30, 112.5);
+               cp1.moveCenterTo(25, 12.5);
+               cp2.moveCenterTo(25, 47.5);
+               cp3.moveCenterTo(25, 82.5);
+
+               new GUIWire(submodelModifiable, S0, cp1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, mux1.getPin("S0"), new Point[0]);
+               new GUIWire(submodelModifiable, I0_1, mux1.getPin("I0"), new Point(5, 37.5), new Point(5, 22.5));
+               new GUIWire(submodelModifiable, I1_1, mux1.getPin("I1"), new Point(10, 137.5), new Point(10, 32.5));
+               new GUIWire(submodelModifiable, mux1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, cp2, new Point[0]);
+               new GUIWire(submodelModifiable, cp2, mux2.getPin("S0"), new Point[0]);
+               new GUIWire(submodelModifiable, I0_2, mux2.getPin("I0"), new Point(5, 62.5), new Point(5, 57.5));
+               new GUIWire(submodelModifiable, I1_2, mux2.getPin("I1"), new Point(15, 162.5), new Point(15, 67.5));
+               new GUIWire(submodelModifiable, mux2.getPin("Y"), Y2);
+               new GUIWire(submodelModifiable, cp2, cp3, new Point[0]);
+               new GUIWire(submodelModifiable, cp3, mux3.getPin("S0"), new Point[0]);
+               new GUIWire(submodelModifiable, I0_3, mux3.getPin("I0"), new Point(5, 87.5), new Point(5, 92.5));
+               new GUIWire(submodelModifiable, I1_3, mux3.getPin("I1"), new Point(20, 187.5), new Point(20, 102.5));
+               new GUIWire(submodelModifiable, mux3.getPin("Y"), Y3);
+               new GUIWire(submodelModifiable, cp3, mux4.getPin("S0"), new Point(25, 117.5));
+               new GUIWire(submodelModifiable, I0_4, mux4.getPin("I0"), new Point(5, 112.5), new Point(5, 127.5));
+               new GUIWire(submodelModifiable, I1_4, mux4.getPin("I1"), new Point(25, 212.5), new Point(25, 137.5));
+               new GUIWire(submodelModifiable, mux4.getPin("Y"), Y4);
+
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUImux1_4.class.getCanonicalName(), (m, p, n) -> new GUImux1_4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInand3.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInand3.java
new file mode 100644 (file)
index 0000000..99e204d
--- /dev/null
@@ -0,0 +1,61 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUInand3 extends SimpleRectangularSubmodelComponent
+{
+       public GUInand3(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUInand3(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUInand3", name);
+               setSubmodelScale(.4);
+               setInputPins("A", "B", "C");
+               setOutputPins("Y");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A = getSubmodelPin("A");
+               Pin B = getSubmodelPin("B");
+               Pin C = getSubmodelPin("C");
+               Pin Y = getSubmodelPin("Y");
+
+               GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate andAB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandABC = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpNandAB = new WireCrossPoint(submodelModifiable, 1);
+
+               nandAB.moveTo(10, 15);
+               andAB.moveTo(35, 15);
+               nandABC.moveTo(62.5, 2.5);
+               cpNandAB.moveCenterTo(32.5, 25);
+
+               new GUIWire(submodelModifiable, A, nandAB.getPin("A"));
+               new GUIWire(submodelModifiable, B, nandAB.getPin("B"));
+               new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpNandAB, new Point[0]);
+               new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("A"), new Point(32.5, 20));
+               new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("B"), new Point(32.5, 30));
+               new GUIWire(submodelModifiable, andAB.getPin("Y"), nandABC.getPin("A"), new Point(57.5, 25), new Point(57.5, 7.5));
+               new GUIWire(submodelModifiable, C, nandABC.getPin("B"), new Point(60, 62.5), new Point(60, 17.5));
+               new GUIWire(submodelModifiable, nandABC.getPin("Y"), Y, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUInand3.class.getCanonicalName(), (m, p, n) -> new GUInand3(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInot4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUInot4.java
new file mode 100644 (file)
index 0000000..d524332
--- /dev/null
@@ -0,0 +1,81 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUInot4 extends SimpleRectangularSubmodelComponent
+{
+       public GUInot4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUInot4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUInot4", name);
+               setSubmodelScale(.4);
+               setInputPins("A1", "A2", "A3", "A4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand4 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+               nand1.moveTo(30, 2.5);
+               nand2.moveTo(30, 27.5);
+               nand3.moveTo(30, 52.5);
+               nand4.moveTo(30, 77.5);
+               cp1.moveCenterTo(15, 12.5);
+               cp2.moveCenterTo(15, 37.5);
+               cp3.moveCenterTo(15, 62.5);
+               cp4.moveCenterTo(15, 87.5);
+
+               new GUIWire(submodelModifiable, A1, cp1, new Point[0]);
+               new GUIWire(submodelModifiable, A2, cp2, new Point[0]);
+               new GUIWire(submodelModifiable, A3, cp3, new Point[0]);
+               new GUIWire(submodelModifiable, A4, cp4, new Point[0]);
+               new GUIWire(submodelModifiable, cp1, nand1.getPin("A"), new Point(15, 7.5));
+               new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(15, 32.5));
+               new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(15, 57.5));
+               new GUIWire(submodelModifiable, cp4, nand4.getPin("A"), new Point(15, 82.5));
+               new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(15, 17.5));
+               new GUIWire(submodelModifiable, cp2, nand2.getPin("B"), new Point(15, 42.5));
+               new GUIWire(submodelModifiable, cp3, nand3.getPin("B"), new Point(15, 67.5));
+               new GUIWire(submodelModifiable, cp4, nand4.getPin("B"), new Point(15, 92.5));
+               new GUIWire(submodelModifiable, nand1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, nand2.getPin("Y"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, nand3.getPin("Y"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, nand4.getPin("Y"), Y4, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUInot4.class.getCanonicalName(), (m, p, n) -> new GUInot4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor4.java
new file mode 100644 (file)
index 0000000..ab3ed89
--- /dev/null
@@ -0,0 +1,101 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIor4 extends SimpleRectangularSubmodelComponent
+{
+       public GUIor4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIor4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIor4", name);
+               setSubmodelScale(.2);
+               setInputPins("A1", "A2", "A3", "A4");
+               setOutputPins("Y");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin Y = getSubmodelPin("Y");
+
+               GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate or12 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate or34 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nor12 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nor34 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate or1234 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpOr12 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpOr34 = new WireCrossPoint(submodelModifiable, 1);
+
+               nandA1.moveTo(20, 15);
+               nandA2.moveTo(20, 65);
+               nandA3.moveTo(20, 115);
+               nandA4.moveTo(20, 165);
+               or12.moveTo(50, 40);
+               or34.moveTo(50, 140);
+               nor12.moveTo(110, 40);
+               nor34.moveTo(110, 140);
+               or1234.moveTo(140, 90);
+               cpA1.moveCenterTo(15, 25);
+               cpA2.moveCenterTo(15, 75);
+               cpA3.moveCenterTo(15, 125);
+               cpA4.moveCenterTo(15, 175);
+               cpOr12.moveCenterTo(105, 50);
+               cpOr34.moveCenterTo(105, 150);
+
+               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("A"), new Point(15, 20));
+               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("A"), new Point(15, 70));
+               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("A"), new Point(15, 120));
+               new GUIWire(submodelModifiable, cpA4, nandA4.getPin("A"), new Point(15, 170));
+               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"), new Point(15, 30));
+               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"), new Point(15, 80));
+               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"), new Point(15, 130));
+               new GUIWire(submodelModifiable, cpA4, nandA4.getPin("B"), new Point(15, 180));
+               new GUIWire(submodelModifiable, nandA1.getPin("Y"), or12.getPin("A"));
+               new GUIWire(submodelModifiable, nandA2.getPin("Y"), or12.getPin("B"));
+               new GUIWire(submodelModifiable, nandA3.getPin("Y"), or34.getPin("A"));
+               new GUIWire(submodelModifiable, nandA4.getPin("Y"), or34.getPin("B"));
+               new GUIWire(submodelModifiable, or12.getPin("Y"), cpOr12, new Point[0]);
+               new GUIWire(submodelModifiable, or34.getPin("Y"), cpOr34, new Point[0]);
+               new GUIWire(submodelModifiable, cpOr12, nor12.getPin("A"), new Point(105, 45));
+               new GUIWire(submodelModifiable, cpOr12, nor12.getPin("B"), new Point(105, 55));
+               new GUIWire(submodelModifiable, cpOr34, nor34.getPin("A"), new Point(105, 145));
+               new GUIWire(submodelModifiable, cpOr34, nor34.getPin("B"), new Point(105, 155));
+               new GUIWire(submodelModifiable, nor12.getPin("Y"), or1234.getPin("A"));
+               new GUIWire(submodelModifiable, nor34.getPin("Y"), or1234.getPin("B"));
+               new GUIWire(submodelModifiable, or1234.getPin("Y"), Y);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIor4.class.getCanonicalName(), (m, p, n) -> new GUIor4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor_4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIor_4.java
new file mode 100644 (file)
index 0000000..3082f72
--- /dev/null
@@ -0,0 +1,129 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIor_4 extends SimpleRectangularSubmodelComponent
+{
+       public GUIor_4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIor_4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIor_4", name);
+               setSubmodelScale(.4);
+               setInputPins("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B1 = getSubmodelPin("B1");
+               Pin B2 = getSubmodelPin("B2");
+               Pin B3 = getSubmodelPin("B3");
+               Pin B4 = getSubmodelPin("B4");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUINandGate notA1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notA2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notA3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notA4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notB1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notB2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notB3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notB4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
+
+               notA1.moveTo(15, 2.5);
+               notA2.moveTo(15, 27.5);
+               notA3.moveTo(15, 52.5);
+               notA4.moveTo(15, 77.5);
+               notB1.moveTo(15, 102.5);
+               notB2.moveTo(15, 127.5);
+               notB3.moveTo(15, 152.5);
+               notB4.moveTo(15, 177.5);
+               nandY1.moveTo(65, 2.5);
+               nandY2.moveTo(65, 27.5);
+               nandY3.moveTo(65, 52.5);
+               nandY4.moveTo(65, 77.5);
+               cpA1.moveCenterTo(7.5, 12.5);
+               cpA2.moveCenterTo(7.5, 37.5);
+               cpA3.moveCenterTo(7.5, 62.5);
+               cpA4.moveCenterTo(7.5, 87.5);
+               cpB1.moveCenterTo(7.5, 112.5);
+               cpB2.moveCenterTo(7.5, 137.5);
+               cpB3.moveCenterTo(7.5, 162.5);
+               cpB4.moveCenterTo(7.5, 187.5);
+
+               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+               new GUIWire(submodelModifiable, B1, cpB1, new Point[0]);
+               new GUIWire(submodelModifiable, B2, cpB2, new Point[0]);
+               new GUIWire(submodelModifiable, B3, cpB3, new Point[0]);
+               new GUIWire(submodelModifiable, B4, cpB4, new Point[0]);
+               new GUIWire(submodelModifiable, cpA1, notA1.getPin("A"), new Point(7.5, 7.5));
+               new GUIWire(submodelModifiable, cpA1, notA1.getPin("B"), new Point(7.5, 17.5));
+               new GUIWire(submodelModifiable, cpA2, notA2.getPin("A"), new Point(7.5, 32.5));
+               new GUIWire(submodelModifiable, cpA2, notA2.getPin("B"), new Point(7.5, 42.5));
+               new GUIWire(submodelModifiable, cpA3, notA3.getPin("A"), new Point(7.5, 57.5));
+               new GUIWire(submodelModifiable, cpA3, notA3.getPin("B"), new Point(7.5, 67.5));
+               new GUIWire(submodelModifiable, cpA4, notA4.getPin("A"), new Point(7.5, 82.5));
+               new GUIWire(submodelModifiable, cpA4, notA4.getPin("B"), new Point(7.5, 92.5));
+               new GUIWire(submodelModifiable, cpB1, notB1.getPin("A"), new Point(7.5, 107.5));
+               new GUIWire(submodelModifiable, cpB1, notB1.getPin("B"), new Point(7.5, 117.5));
+               new GUIWire(submodelModifiable, cpB2, notB2.getPin("A"), new Point(7.5, 132.5));
+               new GUIWire(submodelModifiable, cpB2, notB2.getPin("B"), new Point(7.5, 142.5));
+               new GUIWire(submodelModifiable, cpB3, notB3.getPin("A"), new Point(7.5, 157.5));
+               new GUIWire(submodelModifiable, cpB3, notB3.getPin("B"), new Point(7.5, 167.5));
+               new GUIWire(submodelModifiable, cpB4, notB4.getPin("A"), new Point(7.5, 182.5));
+               new GUIWire(submodelModifiable, cpB4, notB4.getPin("B"), new Point(7.5, 192.5));
+               new GUIWire(submodelModifiable, notA1.getPin("Y"), nandY1.getPin("A"), new Point(40, 12.5), new Point(40, 7.5));
+               new GUIWire(submodelModifiable, notB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 112.5), new Point(45, 17.5));
+               new GUIWire(submodelModifiable, notA2.getPin("Y"), nandY2.getPin("A"), new Point(40, 37.5), new Point(40, 32.5));
+               new GUIWire(submodelModifiable, notB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 137.5), new Point(50, 42.5));
+               new GUIWire(submodelModifiable, notA3.getPin("Y"), nandY3.getPin("A"), new Point(40, 62.5), new Point(40, 57.5));
+               new GUIWire(submodelModifiable, notB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 162.5), new Point(55, 67.5));
+               new GUIWire(submodelModifiable, notA4.getPin("Y"), nandY4.getPin("A"), new Point(40, 87.5), new Point(40, 82.5));
+               new GUIWire(submodelModifiable, notB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
+               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIor_4.class.getCanonicalName(), (m, p, n) -> new GUIor_4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java
new file mode 100644 (file)
index 0000000..2ebc1e3
--- /dev/null
@@ -0,0 +1,333 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIram2 extends SimpleRectangularSubmodelComponent
+{
+       private GUIdlatch4 cell00;
+       private GUIdlatch4 cell01;
+       private GUIdlatch4 cell10;
+       private GUIdlatch4 cell11;
+
+       public GUIram2(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIram2(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIram2", name);
+               setSubmodelScale(.1);
+               setInputPins("A0", "A1", "B0", "B1", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               //@formatter:off
+               Pin  A0 = getSubmodelPin("A0");
+               Pin  A1 = getSubmodelPin("A1");
+               Pin  B0 = getSubmodelPin("B0");
+               Pin  B1 = getSubmodelPin("B1");
+               Pin  WE = getSubmodelPin("WE");
+               Pin  D1 = getSubmodelPin("D1");
+               Pin  D2 = getSubmodelPin("D2");
+               Pin  D3 = getSubmodelPin("D3");
+               Pin  D4 = getSubmodelPin("D4");
+               Pin QA1 = getSubmodelPin("QA1");
+               Pin QA2 = getSubmodelPin("QA2");
+               Pin QA3 = getSubmodelPin("QA3");
+               Pin QA4 = getSubmodelPin("QA4");
+               Pin QB1 = getSubmodelPin("QB1");
+               Pin QB2 = getSubmodelPin("QB2");
+               Pin QB3 = getSubmodelPin("QB3");
+               Pin QB4 = getSubmodelPin("QB4");
+
+               GUIdemux2   demuxA   = new GUIdemux2  (submodelModifiable);
+               GUIdemux2   demuxB   = new GUIdemux2  (submodelModifiable);
+               GUIand41    weAndB   = new GUIand41   (submodelModifiable);
+               cell00   = new GUIdlatch4 (submodelModifiable);
+               cell01   = new GUIdlatch4 (submodelModifiable);
+               cell10   = new GUIdlatch4 (submodelModifiable);
+               cell11   = new GUIdlatch4 (submodelModifiable);
+               GUIand41    andA00   = new GUIand41   (submodelModifiable);
+               GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
+               GUIand41    andB00   = new GUIand41   (submodelModifiable);
+               GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
+
+               WireCrossPoint cpB00  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB01  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB10  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB11  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD1in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD2in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD3in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD4in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD101 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD201 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD301 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD401 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD110 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD210 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD310 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD410 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ100 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ200 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ300 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ400 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ101 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ201 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ301 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ401 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ110 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ210 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ310 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ410 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ111 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ211 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ311 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ411 = new WireCrossPoint(submodelModifiable, 1);
+
+               demuxA  .moveTo( 55,  45);
+               demuxB  .moveTo( 55, 150);
+               weAndB  .moveTo(130, 150);
+               cell00  .moveTo( 55, 325);
+               cell01  .moveTo( 55, 475);
+               cell10  .moveTo( 55, 625);
+               cell11  .moveTo( 55, 775);
+               andA00  .moveTo(235, 375);
+               andorA01.moveTo(235, 485);
+               andorA10.moveTo(235, 635);
+               andorA11.moveTo(235, 785);
+               andB00  .moveTo(135, 325);
+               andorB01.moveTo(135, 435);
+               andorB10.moveTo(135, 585);
+               andorB11.moveTo(135, 735);
+               cpB00 .moveCenterTo(110, 155);
+               cpB01 .moveCenterTo(105, 165);
+               cpB10 .moveCenterTo(100, 175);
+               cpB11 .moveCenterTo( 95, 185);
+               cpD1in.moveCenterTo( 35, 550);
+               cpD2in.moveCenterTo( 40, 650);
+               cpD3in.moveCenterTo( 45, 750);
+               cpD4in.moveCenterTo( 50, 810);
+               cpD101.moveCenterTo( 35, 480);
+               cpD201.moveCenterTo( 40, 490);
+               cpD301.moveCenterTo( 45, 500);
+               cpD401.moveCenterTo( 50, 510);
+               cpD110.moveCenterTo( 35, 630);
+               cpD210.moveCenterTo( 40, 640);
+               cpD310.moveCenterTo( 45, 650);
+               cpD410.moveCenterTo( 50, 660);
+               cpQ100.moveCenterTo(130, 330);
+               cpQ200.moveCenterTo(125, 340);
+               cpQ300.moveCenterTo(120, 350);
+               cpQ400.moveCenterTo(115, 360);
+               cpQ101.moveCenterTo(130, 480);
+               cpQ201.moveCenterTo(125, 490);
+               cpQ301.moveCenterTo(120, 500);
+               cpQ401.moveCenterTo(115, 510);
+               cpQ110.moveCenterTo(130, 630);
+               cpQ210.moveCenterTo(125, 640);
+               cpQ310.moveCenterTo(120, 650);
+               cpQ410.moveCenterTo(115, 660);
+               cpQ111.moveCenterTo(130, 780);
+               cpQ211.moveCenterTo(125, 790);
+               cpQ311.moveCenterTo(120, 800);
+               cpQ411.moveCenterTo(115, 810);
+
+               new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
+               new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10,  60));
+               new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 250), new Point( 5, 155));
+               new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 350), new Point(10, 165));
+               new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
+               new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(5, 450), new Point(5, 300), new Point(125, 300), new Point(125, 195));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("C"), new Point(185, 155), new Point(185, 250), new Point(30, 250), new Point(30, 370));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("C"), new Point(180, 165), new Point(180, 245), new Point(25, 245), new Point(25, 520));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("C"), new Point(175, 175), new Point(175, 240), new Point(20, 240), new Point(20, 670));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("C"), new Point(170, 185), new Point(170, 235), new Point(15, 235), new Point(15, 820));
+               new GUIWire(submodelModifiable, D1, cpD1in                 , new Point[0]);
+               new GUIWire(submodelModifiable, D2, cpD2in                 , new Point[0]);
+               new GUIWire(submodelModifiable, D3, cpD3in                 , new Point[0]);
+               new GUIWire(submodelModifiable, D4, cpD4in                 , new Point(50, 850));
+               new GUIWire(submodelModifiable, cpD101, cell00.getPin("D1"), new Point(35, 330));
+               new GUIWire(submodelModifiable, cpD201, cell00.getPin("D2"), new Point(40, 340));
+               new GUIWire(submodelModifiable, cpD301, cell00.getPin("D3"), new Point(45, 350));
+               new GUIWire(submodelModifiable, cpD401, cell00.getPin("D4"), new Point(50, 360));
+               new GUIWire(submodelModifiable, cpD101, cell01.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD201, cell01.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD301, cell01.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD401, cell01.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD101, cpD1in             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD1in, cpD110             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD201, cpD210             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD301, cpD310             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD401, cpD410             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD110, cell10.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD210, cell10.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD310, cell10.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD410, cell10.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD210, cpD2in             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD310, cpD3in             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD410, cpD4in             , new Point[0]);
+               new GUIWire(submodelModifiable, cpD110, cell11.getPin("D1"), new Point(35, 780));
+               new GUIWire(submodelModifiable, cpD2in, cell11.getPin("D2"), new Point(40, 790));
+               new GUIWire(submodelModifiable, cpD3in, cell11.getPin("D3"), new Point(45, 800));
+               new GUIWire(submodelModifiable, cpD4in, cell11.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, cell00.getPin("Q1"), cpQ100, new Point[0]);
+               new GUIWire(submodelModifiable, cell00.getPin("Q2"), cpQ200, new Point[0]);
+               new GUIWire(submodelModifiable, cell00.getPin("Q3"), cpQ300, new Point[0]);
+               new GUIWire(submodelModifiable, cell00.getPin("Q4"), cpQ400, new Point[0]);
+               new GUIWire(submodelModifiable, cell01.getPin("Q1"), cpQ101, new Point[0]);
+               new GUIWire(submodelModifiable, cell01.getPin("Q2"), cpQ201, new Point[0]);
+               new GUIWire(submodelModifiable, cell01.getPin("Q3"), cpQ301, new Point[0]);
+               new GUIWire(submodelModifiable, cell01.getPin("Q4"), cpQ401, new Point[0]);
+               new GUIWire(submodelModifiable, cell10.getPin("Q1"), cpQ110, new Point[0]);
+               new GUIWire(submodelModifiable, cell10.getPin("Q2"), cpQ210, new Point[0]);
+               new GUIWire(submodelModifiable, cell10.getPin("Q3"), cpQ310, new Point[0]);
+               new GUIWire(submodelModifiable, cell10.getPin("Q4"), cpQ410, new Point[0]);
+               new GUIWire(submodelModifiable, cell11.getPin("Q1"), cpQ111, new Point[0]);
+               new GUIWire(submodelModifiable, cell11.getPin("Q2"), cpQ211, new Point[0]);
+               new GUIWire(submodelModifiable, cell11.getPin("Q3"), cpQ311, new Point[0]);
+               new GUIWire(submodelModifiable, cell11.getPin("Q4"), cpQ411, new Point[0]);
+               new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00  .getPin("B"), new Point(210, 50), new Point(210, 420));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(205, 60), new Point(205, 570));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(200, 70), new Point(200, 720));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(195, 80), new Point(195, 870));
+               new GUIWire(submodelModifiable, cpB00 , andB00  .getPin("B"), new Point(110, 370));
+               new GUIWire(submodelModifiable, cpB01 , andorB01.getPin("B"), new Point(105, 520));
+               new GUIWire(submodelModifiable, cpB10 , andorB10.getPin("B"), new Point(100, 670));
+               new GUIWire(submodelModifiable, cpB11 , andorB11.getPin("B"), new Point(95, 820));
+               new GUIWire(submodelModifiable, cpQ100, andA00  .getPin("A1"), new Point(130, 380));
+               new GUIWire(submodelModifiable, cpQ200, andA00  .getPin("A2"), new Point(125, 390));
+               new GUIWire(submodelModifiable, cpQ300, andA00  .getPin("A3"), new Point(120, 400));
+               new GUIWire(submodelModifiable, cpQ400, andA00  .getPin("A4"), new Point(115, 410));
+               new GUIWire(submodelModifiable, cpQ101, andorA01.getPin("A1"), new Point(130, 530));
+               new GUIWire(submodelModifiable, cpQ201, andorA01.getPin("A2"), new Point(125, 540));
+               new GUIWire(submodelModifiable, cpQ301, andorA01.getPin("A3"), new Point(120, 550));
+               new GUIWire(submodelModifiable, cpQ401, andorA01.getPin("A4"), new Point(115, 560));
+               new GUIWire(submodelModifiable, cpQ110, andorA10.getPin("A1"), new Point(130, 680));
+               new GUIWire(submodelModifiable, cpQ210, andorA10.getPin("A2"), new Point(125, 690));
+               new GUIWire(submodelModifiable, cpQ310, andorA10.getPin("A3"), new Point(120, 700));
+               new GUIWire(submodelModifiable, cpQ410, andorA10.getPin("A4"), new Point(115, 710));
+               new GUIWire(submodelModifiable, cpQ111, andorA11.getPin("A1"), new Point(130, 830));
+               new GUIWire(submodelModifiable, cpQ211, andorA11.getPin("A2"), new Point(125, 840));
+               new GUIWire(submodelModifiable, cpQ311, andorA11.getPin("A3"), new Point(120, 850));
+               new GUIWire(submodelModifiable, cpQ411, andorA11.getPin("A4"), new Point(115, 860));
+               new GUIWire(submodelModifiable, cpQ100, andB00  .getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ200, andB00  .getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ300, andB00  .getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ400, andB00  .getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ101, andorB01.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ201, andorB01.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ301, andorB01.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ401, andorB01.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ110, andorB10.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ210, andorB10.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ310, andorB10.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ410, andorB10.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ111, andorB11.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ211, andorB11.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ311, andorB11.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ411, andorB11.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, andA00  .getPin("Y1"), andorA01.getPin("C1"), new Point(290, 380), new Point(290, 445), new Point(230, 445), new Point(230, 490));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y2"), andorA01.getPin("C2"), new Point(285, 390), new Point(285, 440), new Point(225, 440), new Point(225, 500));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y3"), andorA01.getPin("C3"), new Point(280, 400), new Point(280, 435), new Point(220, 435), new Point(220, 510));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y4"), andorA01.getPin("C4"), new Point(275, 410), new Point(275, 430), new Point(215, 430), new Point(215, 520));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(290, 490), new Point(290, 595), new Point(230, 595), new Point(230, 640));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(285, 500), new Point(285, 590), new Point(225, 590), new Point(225, 650));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(280, 510), new Point(280, 585), new Point(220, 585), new Point(220, 660));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(275, 520), new Point(275, 580), new Point(215, 580), new Point(215, 670));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(290, 640), new Point(290, 745), new Point(230, 745), new Point(230, 790));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(285, 650), new Point(285, 740), new Point(225, 740), new Point(225, 800));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(280, 660), new Point(280, 735), new Point(220, 735), new Point(220, 810));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(275, 670), new Point(275, 730), new Point(215, 730), new Point(215, 820));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1                           , new Point(300, 790), new Point(300,  50));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2                           , new Point(305, 800), new Point(305, 150));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3                           , new Point(310, 810), new Point(310, 250));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4                           , new Point(315, 820), new Point(315, 350));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y1"), andorB01.getPin("C1"), new Point(190, 330), new Point(190, 430), new Point(130, 430), new Point(130, 440));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y2"), andorB01.getPin("C2"), new Point(185, 340), new Point(185, 425), new Point(125, 425), new Point(125, 450));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y3"), andorB01.getPin("C3"), new Point(180, 350), new Point(180, 420), new Point(120, 420), new Point(120, 460));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y4"), andorB01.getPin("C4"), new Point(175, 360), new Point(175, 415), new Point(115, 415), new Point(115, 470));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(190, 440), new Point(190, 580), new Point(130, 580), new Point(130, 590));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(185, 450), new Point(185, 575), new Point(125, 575), new Point(125, 600));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(180, 460), new Point(180, 570), new Point(120, 570), new Point(120, 610));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(175, 470), new Point(175, 565), new Point(115, 565), new Point(115, 620));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(190, 590), new Point(190, 730), new Point(130, 730), new Point(130, 740));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(185, 600), new Point(185, 725), new Point(125, 725), new Point(125, 750));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(180, 610), new Point(180, 720), new Point(120, 720), new Point(120, 760));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(175, 620), new Point(175, 715), new Point(115, 715), new Point(115, 770));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1                           , new Point(190, 740), new Point(190, 880), new Point(325, 880), new Point(325, 450));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2                           , new Point(185, 750), new Point(185, 885), new Point(330, 885), new Point(330, 550));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3                           , new Point(180, 760), new Point(180, 890), new Point(335, 890), new Point(335, 650));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4                           , new Point(175, 770), new Point(175, 895), new Point(340, 895), new Point(340, 750));
+               //@formatter:on
+
+               addHighLevelStateSubcomponentID("c00", cell00);
+               addHighLevelStateSubcomponentID("c01", cell01);
+               addHighLevelStateSubcomponentID("c10", cell10);
+               addHighLevelStateSubcomponentID("c11", cell11);
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       BitVector newStateCasted = (BitVector) newState;
+                       setHighLevelState("c00.q", newStateCasted.subVector(0, 4));
+                       setHighLevelState("c01.q", newStateCasted.subVector(4, 8));
+                       setHighLevelState("c10.q", newStateCasted.subVector(8, 12));
+                       setHighLevelState("c11.q", newStateCasted.subVector(12, 16));
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       BitVector q00 = (BitVector) getHighLevelState("c00.q");
+                       BitVector q01 = (BitVector) getHighLevelState("c01.q");
+                       BitVector q10 = (BitVector) getHighLevelState("c10.q");
+                       BitVector q11 = (BitVector) getHighLevelState("c11.q");
+                       return q00.concat(q01).concat(q10).concat(q11);
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIram2.class.getCanonicalName(), (m, p, n) -> new GUIram2(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java
new file mode 100644 (file)
index 0000000..903a227
--- /dev/null
@@ -0,0 +1,371 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIram4 extends SimpleRectangularSubmodelComponent
+{
+       public GUIram4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIram4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIram4", name);
+               setSubmodelScale(.1);
+               setInputPins("A0", "A1", "A2", "A3", "B0", "B1", "B2", "B3", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               //@formatter:off
+               Pin  A0 = getSubmodelPin("A0");
+               Pin  A1 = getSubmodelPin("A1");
+               Pin  A2 = getSubmodelPin("A2");
+               Pin  A3 = getSubmodelPin("A3");
+               Pin  B0 = getSubmodelPin("B0");
+               Pin  B1 = getSubmodelPin("B1");
+               Pin  B2 = getSubmodelPin("B2");
+               Pin  B3 = getSubmodelPin("B3");
+               Pin  WE = getSubmodelPin("WE");
+               Pin  D1 = getSubmodelPin("D1");
+               Pin  D2 = getSubmodelPin("D2");
+               Pin  D3 = getSubmodelPin("D3");
+               Pin  D4 = getSubmodelPin("D4");
+               Pin QA1 =getSubmodelPin("QA1");
+               Pin QA2 =getSubmodelPin("QA2");
+               Pin QA3 =getSubmodelPin("QA3");
+               Pin QA4 =getSubmodelPin("QA4");
+               Pin QB1 =getSubmodelPin("QB1");
+               Pin QB2 =getSubmodelPin("QB2");
+               Pin QB3 =getSubmodelPin("QB3");
+               Pin QB4 =getSubmodelPin("QB4");
+
+               GUIdemux2   demuxA   = new GUIdemux2  (submodelModifiable);
+               GUIdemux2   demuxB   = new GUIdemux2  (submodelModifiable);
+               GUIand41    weAndB   = new GUIand41   (submodelModifiable);
+               GUIram2     cell00   = new GUIram2    (submodelModifiable);
+               GUIram2     cell01   = new GUIram2    (submodelModifiable);
+               GUIram2     cell10   = new GUIram2    (submodelModifiable);
+               GUIram2     cell11   = new GUIram2    (submodelModifiable);
+               GUIand41    andB00   = new GUIand41   (submodelModifiable);
+               GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
+               GUIand41    andA00   = new GUIand41   (submodelModifiable);
+               GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
+               GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
+
+               WireCrossPoint cpB00  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB01  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB10  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB11  = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_101 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_201 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_301 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_401 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_110 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_210 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_310 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_410 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_111 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_211 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_311 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpD_411 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB101 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB201 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB301 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB401 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB110 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB210 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB310 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB410 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB1in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB2in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB3in = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB4in = new WireCrossPoint(submodelModifiable, 1);
+
+               demuxA  .moveTo( 55,  45);
+               demuxB  .moveTo( 55, 150);
+               weAndB  .moveTo(235, 150);
+               cell00  .moveTo( 80, 330);
+               cell01  .moveTo( 80, 480);
+               cell10  .moveTo( 80, 630);
+               cell11  .moveTo( 80, 780);
+               andB00  .moveTo(250, 375);
+               andorB01.moveTo(250, 485);
+               andorB10.moveTo(250, 635);
+               andorB11.moveTo(250, 785);
+               andA00  .moveTo(155, 325);
+               andorA01.moveTo(155, 435);
+               andorA10.moveTo(155, 585);
+               andorA11.moveTo(155, 735);
+               cpB00 .moveCenterTo(230, 155);
+               cpB01 .moveCenterTo(225, 165);
+               cpB10 .moveCenterTo(220, 175);
+               cpB11 .moveCenterTo(215, 185);
+               cpD_101.moveCenterTo( 60, 535);
+               cpD_201.moveCenterTo( 65, 545);
+               cpD_301.moveCenterTo( 70, 555);
+               cpD_401.moveCenterTo( 75, 565);
+               cpD_110.moveCenterTo( 60, 685);
+               cpD_210.moveCenterTo( 65, 695);
+               cpD_310.moveCenterTo( 70, 705);
+               cpD_410.moveCenterTo( 75, 715);
+               cpD_111.moveCenterTo( 60, 835);
+               cpD_211.moveCenterTo( 65, 845);
+               cpD_311.moveCenterTo( 70, 855);
+               cpD_411.moveCenterTo( 75, 865);
+               cpAB101.moveCenterTo( 40, 485);
+               cpAB201.moveCenterTo( 45, 495);
+               cpAB301.moveCenterTo( 50, 505);
+               cpAB401.moveCenterTo( 55, 515);
+               cpAB110.moveCenterTo( 40, 635);
+               cpAB210.moveCenterTo( 45, 645);
+               cpAB310.moveCenterTo( 50, 655);
+               cpAB410.moveCenterTo( 55, 665);
+               cpAB1in.moveCenterTo( 40, 335);
+               cpAB2in.moveCenterTo( 45, 350);
+               cpAB3in.moveCenterTo( 50, 650);
+               cpAB4in.moveCenterTo( 55, 750);
+
+               new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
+               new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10,  60));
+               new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 450), new Point( 5, 155));
+               new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 550), new Point(10, 165));
+               new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
+               new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
+               new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(15, 850), new Point(15, 195));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("WE"), new Point(290, 155), new Point(290, 230), new Point(35, 230), new Point(35, 375));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("WE"), new Point(285, 165), new Point(285, 225), new Point(30, 225), new Point(30, 525));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("WE"), new Point(280, 175), new Point(280, 220), new Point(25, 220), new Point(25, 675));
+               new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("WE"), new Point(275, 185), new Point(275, 215), new Point(20, 215), new Point(20, 825));
+               new GUIWire(submodelModifiable, cpAB101, cpAB1in            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB1in, cell00.getPin("A0"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB201, cpAB2in            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB2in, cell00.getPin("A1"), new Point(45, 345));
+               new GUIWire(submodelModifiable, cpAB301, cell00.getPin("B0"), new Point(50, 355));
+               new GUIWire(submodelModifiable, cpAB401, cell00.getPin("B1"), new Point(55, 365));
+               new GUIWire(submodelModifiable, cpAB101, cell01.getPin("A0"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB201, cell01.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB301, cell01.getPin("B0"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB401, cell01.getPin("B1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB101, cpAB110            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB201, cpAB210            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB301, cpAB3in            , new Point[0]);
+               new GUIWire(submodelModifiable, B2     , cpAB3in            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB3in, cpAB310            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB401, cpAB410            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB110, cell10.getPin("A0"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB210, cell10.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB310, cell10.getPin("B0"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB410, cell10.getPin("B1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpAB110, cell11.getPin("A0"), new Point(40, 785));
+               new GUIWire(submodelModifiable, cpAB210, cell11.getPin("A1"), new Point(45, 795));
+               new GUIWire(submodelModifiable, cpAB310, cell11.getPin("B0"), new Point(50, 805));
+               new GUIWire(submodelModifiable, cpAB410, cpAB4in            , new Point[0]);
+               new GUIWire(submodelModifiable, cpAB4in, cell11.getPin("B1"), new Point(55, 815));
+               new GUIWire(submodelModifiable, A2, cpAB1in                 , new Point(40, 250));
+               new GUIWire(submodelModifiable, A3, cpAB2in                 , new Point[0]);
+               new GUIWire(submodelModifiable, B3, cpAB4in                 , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_101, cell00.getPin("D1"), new Point(60, 385));
+               new GUIWire(submodelModifiable, cpD_201, cell00.getPin("D2"), new Point(65, 395));
+               new GUIWire(submodelModifiable, cpD_301, cell00.getPin("D3"), new Point(70, 405));
+               new GUIWire(submodelModifiable, cpD_401, cell00.getPin("D4"), new Point(75, 415));
+               new GUIWire(submodelModifiable, cpD_101, cell01.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_201, cell01.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_301, cell01.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_401, cell01.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_101, cpD_110            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_201, cpD_210            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_301, cpD_310            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_401, cpD_410            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_110, cell10.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_210, cell10.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_310, cell10.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_410, cell10.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_110, cpD_111            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_210, cpD_211            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_310, cpD_311            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_410, cpD_411            , new Point[0]);
+               new GUIWire(submodelModifiable, cpD_111, cell11.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_211, cell11.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_311, cell11.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpD_411, cell11.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, D1, cpD_111                 , new Point(60,  950));
+               new GUIWire(submodelModifiable, D2, cpD_211                 , new Point(65, 1050));
+               new GUIWire(submodelModifiable, D3, cpD_311                 , new Point(70, 1150));
+               new GUIWire(submodelModifiable, D4, cpD_411                 , new Point(75, 1250));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00  .getPin("B"), new Point(135, 50), new Point(135, 370));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(130, 60), new Point(130, 520));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(125, 70), new Point(125, 670));
+               new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(120, 80), new Point(120, 820));
+               new GUIWire(submodelModifiable, cpB00, andB00  .getPin("B"), new Point(230, 420));
+               new GUIWire(submodelModifiable, cpB01, andorB01.getPin("B"), new Point(225, 570));
+               new GUIWire(submodelModifiable, cpB10, andorB10.getPin("B"), new Point(220, 720));
+               new GUIWire(submodelModifiable, cpB11, andorB11.getPin("B"), new Point(215, 870));
+               new GUIWire(submodelModifiable, cell00.getPin("QB1"), andB00  .getPin("A1"), new Point(140, 375), new Point(140, 380));
+               new GUIWire(submodelModifiable, cell00.getPin("QB2"), andB00  .getPin("A2"), new Point(140, 385), new Point(140, 390));
+               new GUIWire(submodelModifiable, cell00.getPin("QB3"), andB00  .getPin("A3"), new Point(140, 395), new Point(140, 400));
+               new GUIWire(submodelModifiable, cell00.getPin("QB4"), andB00  .getPin("A4"), new Point(140, 405), new Point(140, 410));
+               new GUIWire(submodelModifiable, cell01.getPin("QB1"), andorB01.getPin("A1"), new Point(140, 525), new Point(140, 530));
+               new GUIWire(submodelModifiable, cell01.getPin("QB2"), andorB01.getPin("A2"), new Point(140, 535), new Point(140, 540));
+               new GUIWire(submodelModifiable, cell01.getPin("QB3"), andorB01.getPin("A3"), new Point(140, 545), new Point(140, 550));
+               new GUIWire(submodelModifiable, cell01.getPin("QB4"), andorB01.getPin("A4"), new Point(140, 555), new Point(140, 560));
+               new GUIWire(submodelModifiable, cell10.getPin("QB1"), andorB10.getPin("A1"), new Point(140, 675), new Point(140, 680));
+               new GUIWire(submodelModifiable, cell10.getPin("QB2"), andorB10.getPin("A2"), new Point(140, 685), new Point(140, 690));
+               new GUIWire(submodelModifiable, cell10.getPin("QB3"), andorB10.getPin("A3"), new Point(140, 695), new Point(140, 700));
+               new GUIWire(submodelModifiable, cell10.getPin("QB4"), andorB10.getPin("A4"), new Point(140, 705), new Point(140, 710));
+               new GUIWire(submodelModifiable, cell11.getPin("QB1"), andorB11.getPin("A1"), new Point(140, 825), new Point(140, 830));
+               new GUIWire(submodelModifiable, cell11.getPin("QB2"), andorB11.getPin("A2"), new Point(140, 835), new Point(140, 840));
+               new GUIWire(submodelModifiable, cell11.getPin("QB3"), andorB11.getPin("A3"), new Point(140, 845), new Point(140, 850));
+               new GUIWire(submodelModifiable, cell11.getPin("QB4"), andorB11.getPin("A4"), new Point(140, 855), new Point(140, 860));
+               new GUIWire(submodelModifiable, cell00.getPin("QA1"), andA00  .getPin("A1"), new Point(140, 335), new Point(140, 330));
+               new GUIWire(submodelModifiable, cell00.getPin("QA2"), andA00  .getPin("A2"), new Point(140, 345), new Point(140, 340));
+               new GUIWire(submodelModifiable, cell00.getPin("QA3"), andA00  .getPin("A3"), new Point(140, 355), new Point(140, 350));
+               new GUIWire(submodelModifiable, cell00.getPin("QA4"), andA00  .getPin("A4"), new Point(140, 365), new Point(140, 360));
+               new GUIWire(submodelModifiable, cell01.getPin("QA1"), andorA01.getPin("A1"), new Point(140, 485), new Point(140, 480));
+               new GUIWire(submodelModifiable, cell01.getPin("QA2"), andorA01.getPin("A2"), new Point(140, 495), new Point(140, 490));
+               new GUIWire(submodelModifiable, cell01.getPin("QA3"), andorA01.getPin("A3"), new Point(140, 505), new Point(140, 500));
+               new GUIWire(submodelModifiable, cell01.getPin("QA4"), andorA01.getPin("A4"), new Point(140, 515), new Point(140, 510));
+               new GUIWire(submodelModifiable, cell10.getPin("QA1"), andorA10.getPin("A1"), new Point(140, 635), new Point(140, 630));
+               new GUIWire(submodelModifiable, cell10.getPin("QA2"), andorA10.getPin("A2"), new Point(140, 645), new Point(140, 640));
+               new GUIWire(submodelModifiable, cell10.getPin("QA3"), andorA10.getPin("A3"), new Point(140, 655), new Point(140, 650));
+               new GUIWire(submodelModifiable, cell10.getPin("QA4"), andorA10.getPin("A4"), new Point(140, 665), new Point(140, 660));
+               new GUIWire(submodelModifiable, cell11.getPin("QA1"), andorA11.getPin("A1"), new Point(140, 785), new Point(140, 780));
+               new GUIWire(submodelModifiable, cell11.getPin("QA2"), andorA11.getPin("A2"), new Point(140, 795), new Point(140, 790));
+               new GUIWire(submodelModifiable, cell11.getPin("QA3"), andorA11.getPin("A3"), new Point(140, 805), new Point(140, 800));
+               new GUIWire(submodelModifiable, cell11.getPin("QA4"), andorA11.getPin("A4"), new Point(140, 815), new Point(140, 810));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y1"), andorB01.getPin("C1"), new Point(305, 380), new Point(305, 445), new Point(245, 445), new Point(245, 490));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y2"), andorB01.getPin("C2"), new Point(300, 390), new Point(300, 440), new Point(240, 440), new Point(240, 500));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y3"), andorB01.getPin("C3"), new Point(295, 400), new Point(295, 435), new Point(235, 435), new Point(235, 510));
+               new GUIWire(submodelModifiable, andB00  .getPin("Y4"), andorB01.getPin("C4"), new Point(290, 410), new Point(290, 430), new Point(230, 430), new Point(230, 520));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(305, 490), new Point(305, 595), new Point(245, 595), new Point(245, 640));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(300, 500), new Point(300, 590), new Point(240, 590), new Point(240, 650));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(295, 510), new Point(295, 585), new Point(235, 585), new Point(235, 660));
+               new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(290, 520), new Point(290, 580), new Point(230, 580), new Point(230, 670));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(305, 640), new Point(305, 745), new Point(245, 745), new Point(245, 790));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(300, 650), new Point(300, 740), new Point(240, 740), new Point(240, 800));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(295, 660), new Point(295, 735), new Point(235, 735), new Point(235, 810));
+               new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(290, 670), new Point(290, 730), new Point(230, 730), new Point(230, 820));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1                           , new Point(330, 790), new Point(330, 450));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2                           , new Point(335, 800), new Point(335, 550));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3                           , new Point(340, 810), new Point(340, 650));
+               new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4                           , new Point(345, 820), new Point(345, 750));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y1"), andorA01.getPin("C1"), new Point(210, 330), new Point(210, 430), new Point(150, 430), new Point(150, 440));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y2"), andorA01.getPin("C2"), new Point(205, 340), new Point(205, 425), new Point(145, 425), new Point(145, 450));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y3"), andorA01.getPin("C3"), new Point(200, 350), new Point(200, 420), new Point(140, 420), new Point(140, 460));
+               new GUIWire(submodelModifiable, andA00  .getPin("Y4"), andorA01.getPin("C4"), new Point(195, 360), new Point(195, 415), new Point(135, 415), new Point(135, 470));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(210, 440), new Point(210, 580), new Point(150, 580), new Point(150, 590));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(205, 450), new Point(205, 575), new Point(145, 575), new Point(145, 600));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(200, 460), new Point(200, 570), new Point(140, 570), new Point(140, 610));
+               new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(195, 470), new Point(195, 565), new Point(135, 565), new Point(135, 620));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(210, 590), new Point(210, 730), new Point(150, 730), new Point(150, 740));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(205, 600), new Point(205, 725), new Point(145, 725), new Point(145, 750));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(200, 610), new Point(200, 720), new Point(140, 720), new Point(140, 760));
+               new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(195, 620), new Point(195, 715), new Point(135, 715), new Point(135, 770));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1                           , new Point(210, 740), new Point(210, 880), new Point(310, 880), new Point(310,  50));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2                           , new Point(205, 750), new Point(205, 885), new Point(315, 885), new Point(315, 150));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3                           , new Point(200, 760), new Point(200, 890), new Point(320, 890), new Point(320, 250));
+               new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4                           , new Point(195, 770), new Point(195, 895), new Point(325, 895), new Point(325, 350));
+               //@formatter:on
+
+               addHighLevelStateSubcomponentID("c00", cell00);
+               addHighLevelStateSubcomponentID("c01", cell01);
+               addHighLevelStateSubcomponentID("c10", cell10);
+               addHighLevelStateSubcomponentID("c11", cell11);
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       BitVector newStateCasted = (BitVector) newState;
+                       setHighLevelState("c00.q", newStateCasted.subVector(0, 16));
+                       setHighLevelState("c01.q", newStateCasted.subVector(16, 32));
+                       setHighLevelState("c10.q", newStateCasted.subVector(32, 48));
+                       setHighLevelState("c11.q", newStateCasted.subVector(48, 64));
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
+       {
+               if (checkSubcomponentID(subcomponentID))
+                       setHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID), newState);
+               else
+                       super.setSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID, newState);
+
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q":
+                       BitVector q00 = (BitVector) getHighLevelState("c00.q");
+                       BitVector q01 = (BitVector) getHighLevelState("c01.q");
+                       BitVector q10 = (BitVector) getHighLevelState("c10.q");
+                       BitVector q11 = (BitVector) getHighLevelState("c11.q");
+                       return q00.concat(q01).concat(q10).concat(q11);
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
+       {
+               if (checkSubcomponentID(subcomponentID))
+                       return getHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID));
+               return super.getSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID);
+       }
+
+       private static String translateDirectCellAccess(String subcomponentID, String subcomponentHighLevelStateID)
+       {
+               return 'c' + subcomponentID.substring(3, 5) + "." + subcomponentID.substring(0, 3) + '.' + subcomponentHighLevelStateID;
+       }
+
+       private static boolean checkSubcomponentID(String subcomponentID)
+       {
+               if (subcomponentID.length() != 5 || subcomponentID.charAt(0) != 'c')
+                       return false;
+               char addr3 = subcomponentID.charAt(1);
+               char addr2 = subcomponentID.charAt(2);
+               char addr1 = subcomponentID.charAt(3);
+               char addr0 = subcomponentID.charAt(4);
+               return (addr3 == '0' || addr3 == '1') || (addr2 == '0' || addr2 == '1') || (addr1 == '0' || addr1 == '1')
+                               || (addr0 == '0' || addr0 == '1');
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIram4.class.getCanonicalName(), (m, p, n) -> new GUIram4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel2_4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel2_4.java
new file mode 100644 (file)
index 0000000..6f4a6cd
--- /dev/null
@@ -0,0 +1,125 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIsel2_4 extends SimpleRectangularSubmodelComponent
+{
+       public GUIsel2_4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIsel2_4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIsel2_4", name);
+               setSubmodelScale(.4);
+               setInputPins("SA", "SB", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin SA = getSubmodelPin("SA");
+               Pin SB = getSubmodelPin("SB");
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B1 = getSubmodelPin("B1");
+               Pin B2 = getSubmodelPin("B2");
+               Pin B3 = getSubmodelPin("B3");
+               Pin B4 = getSubmodelPin("B4");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandB1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandB2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandB3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandB4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+
+               nandA1.moveTo(20, 2.5);
+               nandB1.moveTo(20, 27.5);
+               nandA2.moveTo(20, 52.5);
+               nandB2.moveTo(20, 77.5);
+               nandA3.moveTo(20, 102.5);
+               nandB3.moveTo(20, 127.5);
+               nandA4.moveTo(20, 152.5);
+               nandB4.moveTo(20, 177.5);
+               nandY1.moveTo(65, 2.5);
+               nandY2.moveTo(65, 27.5);
+               nandY3.moveTo(65, 52.5);
+               nandY4.moveTo(65, 77.5);
+               cpA1.moveCenterTo(7.5, 17.5);
+               cpB1.moveCenterTo(5, 42.5);
+               cpA2.moveCenterTo(7.5, 67.5);
+               cpB2.moveCenterTo(5, 92.5);
+               cpA3.moveCenterTo(7.5, 117.5);
+               cpB3.moveCenterTo(5, 142.5);
+
+               new GUIWire(submodelModifiable, A1, nandA1.getPin("A"), new Point(15, 62.5), new Point(15, 7.5));
+               new GUIWire(submodelModifiable, A2, nandA2.getPin("A"), new Point(17.5, 87.5), new Point(17.5, 57.5));
+               new GUIWire(submodelModifiable, A3, nandA3.getPin("A"), new Point(17.5, 112.5), new Point(17.5, 107.5));
+               new GUIWire(submodelModifiable, A4, nandA4.getPin("A"), new Point(17.5, 137.5), new Point(17.5, 157.5));
+               new GUIWire(submodelModifiable, B1, nandB1.getPin("A"), new Point(10, 162.5), new Point(10, 32.5));
+               new GUIWire(submodelModifiable, B2, nandB2.getPin("A"), new Point(12.5, 187.5), new Point(12.5, 82.5));
+               new GUIWire(submodelModifiable, B3, nandB3.getPin("A"), new Point(15, 212.5), new Point(15, 132.5));
+               new GUIWire(submodelModifiable, B4, nandB4.getPin("A"), new Point(10, 237.5), new Point(10, 182.5));
+               new GUIWire(submodelModifiable, SA, cpA1);
+               new GUIWire(submodelModifiable, SB, cpB1);
+               new GUIWire(submodelModifiable, cpA1, cpA2);
+               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"));
+               new GUIWire(submodelModifiable, cpA2, cpA3);
+               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"));
+               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"));
+               new GUIWire(submodelModifiable, cpA3, nandA4.getPin("B"), new Point(7.5, 167.5));
+               new GUIWire(submodelModifiable, cpB1, cpB2);
+               new GUIWire(submodelModifiable, cpB1, nandB1.getPin("B"));
+               new GUIWire(submodelModifiable, cpB2, cpB3);
+               new GUIWire(submodelModifiable, cpB2, nandB2.getPin("B"));
+               new GUIWire(submodelModifiable, cpB3, nandB3.getPin("B"));
+               new GUIWire(submodelModifiable, cpB3, nandB4.getPin("B"), new Point(5, 192.5));
+               new GUIWire(submodelModifiable, nandA1.getPin("Y"), nandY1.getPin("A"), new Point(42.5, 12.5), new Point(42.5, 7.5));
+               new GUIWire(submodelModifiable, nandB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 37.5), new Point(45, 17.5));
+               new GUIWire(submodelModifiable, nandA2.getPin("Y"), nandY2.getPin("A"), new Point(47.5, 62.5), new Point(47.5, 32.5));
+               new GUIWire(submodelModifiable, nandB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 87.5), new Point(50, 42.5));
+               new GUIWire(submodelModifiable, nandA3.getPin("Y"), nandY3.getPin("A"), new Point(52.5, 112.5), new Point(52.5, 57.5));
+               new GUIWire(submodelModifiable, nandB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 137.5), new Point(55, 67.5));
+               new GUIWire(submodelModifiable, nandA4.getPin("Y"), nandY4.getPin("A"), new Point(57.5, 162.5), new Point(57.5, 82.5));
+               new GUIWire(submodelModifiable, nandB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
+               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIsel2_4.class.getCanonicalName(), (m, p, n) -> new GUIsel2_4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel3_4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIsel3_4.java
new file mode 100644 (file)
index 0000000..ec5891b
--- /dev/null
@@ -0,0 +1,123 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIsel3_4 extends SimpleRectangularSubmodelComponent
+{
+       public GUIsel3_4(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIsel3_4(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIsel3_4", name);
+               setSubmodelScale(.2);
+               setInputPins("SA", "SB", "SC", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin SA = getSubmodelPin("SA");
+               Pin SB = getSubmodelPin("SB");
+               Pin SC = getSubmodelPin("SC");
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B1 = getSubmodelPin("B1");
+               Pin B2 = getSubmodelPin("B2");
+               Pin B3 = getSubmodelPin("B3");
+               Pin B4 = getSubmodelPin("B4");
+               Pin C1 = getSubmodelPin("C1");
+               Pin C2 = getSubmodelPin("C2");
+               Pin C3 = getSubmodelPin("C3");
+               Pin C4 = getSubmodelPin("C4");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+
+               GUIsel2_4 sel2_4 = new GUIsel2_4(submodelModifiable);
+               GUInot4 not4 = new GUInot4(submodelModifiable);
+               GUINandGate nandC1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandC2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandC3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandC4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpSC1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSC2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSC3 = new WireCrossPoint(submodelModifiable, 1);
+
+               sel2_4.moveTo(35, 250);
+               not4.moveTo(75, 250);
+               nandC1.moveTo(50, 570);
+               nandC2.moveTo(50, 620);
+               nandC3.moveTo(50, 670);
+               nandC4.moveTo(50, 720);
+               nandY1.moveTo(152.5, 15);
+               nandY2.moveTo(152.5, 65);
+               nandY3.moveTo(152.5, 115);
+               nandY4.moveTo(152.5, 165);
+               cpSC1.moveCenterTo(30, 585);
+               cpSC2.moveCenterTo(30, 635);
+               cpSC3.moveCenterTo(30, 685);
+
+               new GUIWire(submodelModifiable, SA, sel2_4.getPin("SA"), new Point(25, 25), new Point(25, 255));
+               new GUIWire(submodelModifiable, SB, sel2_4.getPin("SB"), new Point(20, 75), new Point(20, 265));
+               new GUIWire(submodelModifiable, A1, sel2_4.getPin("A1"), new Point(15, 175), new Point(15, 275));
+               new GUIWire(submodelModifiable, A2, sel2_4.getPin("A2"), new Point(10, 225), new Point(10, 285));
+               new GUIWire(submodelModifiable, A3, sel2_4.getPin("A3"), new Point(5, 275), new Point(5, 295));
+               new GUIWire(submodelModifiable, A4, sel2_4.getPin("A4"), new Point(5, 325), new Point(5, 305));
+               new GUIWire(submodelModifiable, B1, sel2_4.getPin("B1"), new Point(10, 375), new Point(10, 315));
+               new GUIWire(submodelModifiable, B2, sel2_4.getPin("B2"), new Point(15, 425), new Point(15, 325));
+               new GUIWire(submodelModifiable, B3, sel2_4.getPin("B3"), new Point(20, 475), new Point(20, 335));
+               new GUIWire(submodelModifiable, B4, sel2_4.getPin("B4"), new Point(25, 525), new Point(25, 345));
+               new GUIWire(submodelModifiable, sel2_4.getPin("Y1"), not4.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, sel2_4.getPin("Y2"), not4.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, sel2_4.getPin("Y3"), not4.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, sel2_4.getPin("Y4"), not4.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, SC, cpSC1, new Point(30, 125));
+               new GUIWire(submodelModifiable, cpSC1, nandC1.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSC1, cpSC2, new Point(30, 125));
+               new GUIWire(submodelModifiable, cpSC2, nandC2.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSC2, cpSC3, new Point(30, 125));
+               new GUIWire(submodelModifiable, cpSC3, nandC3.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSC3, nandC4.getPin("B"), new Point(30, 735));
+               new GUIWire(submodelModifiable, C1, nandC1.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, C2, nandC2.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, C3, nandC3.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, C4, nandC4.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, not4.getPin("Y1"), nandY1.getPin("A"), new Point(115, 255), new Point(115, 20));
+               new GUIWire(submodelModifiable, not4.getPin("Y2"), nandY2.getPin("A"), new Point(120, 265), new Point(120, 70));
+               new GUIWire(submodelModifiable, not4.getPin("Y3"), nandY3.getPin("A"), new Point(125, 275), new Point(125, 120));
+               new GUIWire(submodelModifiable, not4.getPin("Y4"), nandY4.getPin("A"), new Point(130, 285), new Point(130, 170));
+               new GUIWire(submodelModifiable, nandC1.getPin("Y"), nandY1.getPin("B"), new Point(135, 580), new Point(135, 30));
+               new GUIWire(submodelModifiable, nandC2.getPin("Y"), nandY2.getPin("B"), new Point(140, 630), new Point(140, 80));
+               new GUIWire(submodelModifiable, nandC3.getPin("Y"), nandY3.getPin("B"), new Point(145, 680), new Point(145, 130));
+               new GUIWire(submodelModifiable, nandC4.getPin("Y"), nandY4.getPin("B"), new Point(150, 730), new Point(150, 180));
+               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIsel3_4.class.getCanonicalName(), (m, p, n) -> new GUIsel3_4(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIxor.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIxor.java
new file mode 100644 (file)
index 0000000..77b659d
--- /dev/null
@@ -0,0 +1,70 @@
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIxor extends SimpleRectangularSubmodelComponent
+{
+       public GUIxor(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIxor(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIxor", name);
+               setSubmodelScale(.4);
+               setInputPins("A", "B");
+               setOutputPins("Y");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin A = getSubmodelPin("A");
+               Pin B = getSubmodelPin("B");
+               Pin Y = getSubmodelPin("Y");
+
+               GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpAB = new WireCrossPoint(submodelModifiable, 1);
+
+               nandAB.moveTo(7.5, 15);
+               nandYA.moveTo(35, 2.5);
+               nandYB.moveTo(35, 27.5);
+               nandY.moveTo(62.5, 15);
+               cpA.moveCenterTo(5, 12.5);
+               cpB.moveCenterTo(5, 37.5);
+               cpAB.moveCenterTo(30, 25);
+
+               new GUIWire(submodelModifiable, A, cpA, new Point[0]);
+               new GUIWire(submodelModifiable, B, cpB, new Point[0]);
+               new GUIWire(submodelModifiable, cpA, nandAB.getPin("A"), new Point(5, 20));
+               new GUIWire(submodelModifiable, cpB, nandAB.getPin("B"), new Point(5, 30));
+               new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpAB);
+               new GUIWire(submodelModifiable, cpAB, nandYA.getPin("B"), new Point(30, 17.5));
+               new GUIWire(submodelModifiable, cpAB, nandYB.getPin("A"), new Point(30, 32.5));
+               new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
+               new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
+               new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"));
+               new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"));
+               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIxor.class.getCanonicalName(), (m, p, n) -> new GUIxor(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java
new file mode 100644 (file)
index 0000000..aca03d9
--- /dev/null
@@ -0,0 +1,357 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901 extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901", name);
+               setSubmodelScale(.1);
+               setInputPins("I8", "I7", "I6", "I5", "I4", "I3", "I2", "I1", "I0", "C", "Cn", "D1", "D2", "D3", "D4", "A0", "A1", "A2", "A3", "B0",
+                               "B1", "B2", "B3", "IRAMn", "IRAMn+3", "IQn", "IQn+3");
+               setOutputPins("Y1", "Y2", "Y3", "Y4", "F=0", "Cn+4", "OVR", "F3", "ORAMn", "ORAMn+3", "OQn", "OQn+3");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I8 = getSubmodelPin("I8");
+               Pin I7 = getSubmodelPin("I7");
+               Pin I6 = getSubmodelPin("I6");
+               Pin I5 = getSubmodelPin("I5");
+               Pin I4 = getSubmodelPin("I4");
+               Pin I3 = getSubmodelPin("I3");
+               Pin I2 = getSubmodelPin("I2");
+               Pin I1 = getSubmodelPin("I1");
+               Pin I0 = getSubmodelPin("I0");
+               Pin C = getSubmodelPin("C");
+               Pin Cn = getSubmodelPin("Cn");
+               Pin D1 = getSubmodelPin("D1");
+               Pin D2 = getSubmodelPin("D2");
+               Pin D3 = getSubmodelPin("D3");
+               Pin D4 = getSubmodelPin("D4");
+               Pin A0 = getSubmodelPin("A0");
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin B0 = getSubmodelPin("B0");
+               Pin B1 = getSubmodelPin("B1");
+               Pin B2 = getSubmodelPin("B2");
+               Pin B3 = getSubmodelPin("B3");
+               Pin IRAMn = getSubmodelPin("IRAMn");
+               Pin IRAMnplus3 = getSubmodelPin("IRAMn+3");
+               Pin IQn = getSubmodelPin("IQn");
+               Pin IQnplus3 = getSubmodelPin("IQn+3");
+               Pin Y1 = getSubmodelPin("Y1");
+               Pin Y2 = getSubmodelPin("Y2");
+               Pin Y3 = getSubmodelPin("Y3");
+               Pin Y4 = getSubmodelPin("Y4");
+               Pin Feq0 = getSubmodelPin("F=0");
+               Pin Cnplus4 = getSubmodelPin("Cn+4");
+               Pin OVR = getSubmodelPin("OVR");
+               Pin F3 = getSubmodelPin("F3");
+               Pin ORAMn = getSubmodelPin("ORAMn");
+               Pin ORAMnplus3 = getSubmodelPin("ORAMn+3");
+               Pin OQn = getSubmodelPin("OQn");
+               Pin OQnplus3 = getSubmodelPin("OQn+3");
+
+               GUIAm2901DestDecode destDecode = new GUIAm2901DestDecode(submodelModifiable);
+               GUImux1_4 Ymux = new GUImux1_4(submodelModifiable);
+               GUIand ramweAnd = new GUIand(submodelModifiable);
+               GUINandGate notC = new GUINandGate(submodelModifiable, 1);
+               GUIAm2901ALUInclSourceDecodeInclFunctionDecode alu = new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(submodelModifiable);
+               GUIor4 Fneq0 = new GUIor4(submodelModifiable);
+               GUINandGate notFneq0 = new GUINandGate(submodelModifiable, 1);
+               GUIram4 ram = new GUIram4(submodelModifiable);
+               GUIdlatch4 QAlatch = new GUIdlatch4(submodelModifiable);
+               GUIdlatch4 QBlatch = new GUIdlatch4(submodelModifiable);
+               GUIsel3_4 ramDsel = new GUIsel3_4(submodelModifiable);
+               GUIsel3_4 qregDsel = new GUIsel3_4(submodelModifiable);
+               GUIAm2901QReg qreg = new GUIAm2901QReg(submodelModifiable);
+
+               WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpC4 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpLSH = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNSH = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpRSH = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQA1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQA2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQA3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQA4 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ4 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpOQn = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpOQnplus3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ2Rsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpQ3Rsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpORAMn = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpORAMnplus3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF11 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF21 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF31 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF41 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF12 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF22 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF32 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF42 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF1Lsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF2Lsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF3Lsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF2Rsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF3Rsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF4Rsh = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF13 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF23 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF33 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpF43 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpFneq0 = new WireCrossPoint(submodelModifiable, 1);
+
+               destDecode.moveTo(15, 45);
+               Ymux.moveTo(275, 135);
+               ramweAnd.moveTo(190, 65);
+               notC.moveTo(160, 75);
+               alu.moveTo(240, 2110);
+               Fneq0.moveTo(275, 445);
+               notFneq0.moveTo(320, 440);
+               ram.moveTo(95, 2220);
+               QAlatch.moveTo(160, 2220);
+               QBlatch.moveTo(160, 2275);
+               ramDsel.moveTo(45, 2310);
+               qregDsel.moveTo(45, 2510);
+               qreg.moveTo(90, 2490);
+               cpC1.moveCenterTo(155, 950);
+               cpC2.moveCenterTo(155, 90);
+               cpC3.moveCenterTo(155, 2265);
+               cpC4.moveCenterTo(155, 2320);
+               cpLSH.moveCenterTo(40, 2315);
+               cpNSH.moveCenterTo(35, 2325);
+               cpRSH.moveCenterTo(30, 2335);
+               cpQA1.moveCenterTo(220, 2225);
+               cpQA2.moveCenterTo(225, 2235);
+               cpQA3.moveCenterTo(230, 2245);
+               cpQA4.moveCenterTo(235, 2255);
+               cpQ1.moveCenterTo(130, 2495);
+               cpQ2.moveCenterTo(135, 2505);
+               cpQ3.moveCenterTo(140, 2515);
+               cpQ4.moveCenterTo(145, 2525);
+               cpOQn.moveCenterTo(220, 2495);
+               cpOQnplus3.moveCenterTo(235, 2525);
+               cpQ2Rsh.moveCenterTo(35, 2625);
+               cpQ3Rsh.moveCenterTo(40, 2635);
+               cpORAMn.moveCenterTo(280, 2115);
+               cpORAMnplus3.moveCenterTo(295, 2145);
+               cpF3.moveCenterTo(330, 950);
+               cpF11.moveCenterTo(255, 2090);
+               cpF21.moveCenterTo(260, 2095);
+               cpF31.moveCenterTo(265, 2100);
+               cpF41.moveCenterTo(270, 2105);
+               cpF12.moveCenterTo(255, 450);
+               cpF22.moveCenterTo(260, 460);
+               cpF32.moveCenterTo(265, 470);
+               cpF42.moveCenterTo(270, 480);
+               cpF1Lsh.moveCenterTo(10, 2355);
+               cpF2Lsh.moveCenterTo(15, 2365);
+               cpF3Lsh.moveCenterTo(20, 2375);
+               cpF2Rsh.moveCenterTo(15, 2395);
+               cpF3Rsh.moveCenterTo(20, 2405);
+               cpF4Rsh.moveCenterTo(25, 2415);
+               cpF13.moveCenterTo(10, 2385);
+               cpF23.moveCenterTo(15, 2425);
+               cpF33.moveCenterTo(20, 2435);
+               cpF43.moveCenterTo(25, 2445);
+               cpFneq0.moveCenterTo(315, 450);
+
+               new GUIWire(submodelModifiable, I8, destDecode.getPin("I8"), new Point[0]);
+               new GUIWire(submodelModifiable, I7, destDecode.getPin("I7"), new Point(5, 150), new Point(5, 60));
+               new GUIWire(submodelModifiable, I6, destDecode.getPin("I6"), new Point(10, 250), new Point(10, 70));
+               new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point(130, 350), new Point(130, 2115));
+               new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(125, 450), new Point(125, 2125));
+               new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(120, 550), new Point(120, 2135));
+               new GUIWire(submodelModifiable, I2, alu.getPin("I2"), new Point(115, 650), new Point(115, 2145));
+               new GUIWire(submodelModifiable, I1, alu.getPin("I1"), new Point(110, 750), new Point(110, 2155));
+               new GUIWire(submodelModifiable, I0, alu.getPin("I0"), new Point(105, 850), new Point(105, 2165));
+               new GUIWire(submodelModifiable, C, cpC1, new Point[0]);
+               new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
+               new GUIWire(submodelModifiable, cpC2, notC.getPin("A"), new Point(155, 80));
+               new GUIWire(submodelModifiable, cpC2, notC.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpC1, cpC3, new Point[0]);
+               new GUIWire(submodelModifiable, cpC3, QAlatch.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, cpC3, cpC4, new Point[0]);
+               new GUIWire(submodelModifiable, cpC4, QBlatch.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, cpC4, qreg.getPin("C"), new Point(155, 2485), new Point(80, 2485), new Point(80, 2495));
+               new GUIWire(submodelModifiable, destDecode.getPin("LSH"), cpLSH, new Point(55, 90), new Point(55, 125), new Point(40, 125));
+               new GUIWire(submodelModifiable, destDecode.getPin("NSH"), cpNSH, new Point(60, 50), new Point(60, 120), new Point(35, 120));
+               new GUIWire(submodelModifiable, destDecode.getPin("RSH"), cpRSH, new Point(65, 60), new Point(65, 115), new Point(30, 115));
+               new GUIWire(submodelModifiable, cpLSH, ramDsel.getPin("SA"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNSH, ramDsel.getPin("SB"), new Point[0]);
+               new GUIWire(submodelModifiable, cpRSH, ramDsel.getPin("SC"), new Point[0]);
+               new GUIWire(submodelModifiable, cpLSH, qregDsel.getPin("SA"), new Point(40, 2515));
+               new GUIWire(submodelModifiable, cpNSH, qregDsel.getPin("SB"), new Point(35, 2525));
+               new GUIWire(submodelModifiable, cpRSH, qregDsel.getPin("SC"), new Point(30, 2535));
+               new GUIWire(submodelModifiable, A0, ram.getPin("A0"), new Point(80, 1550), new Point(80, 2225));
+               new GUIWire(submodelModifiable, A1, ram.getPin("A1"), new Point(75, 1650), new Point(75, 2235));
+               new GUIWire(submodelModifiable, A2, ram.getPin("A2"), new Point(70, 1750), new Point(70, 2245));
+               new GUIWire(submodelModifiable, A3, ram.getPin("A3"), new Point(65, 1850), new Point(65, 2255));
+               new GUIWire(submodelModifiable, B0, ram.getPin("B0"), new Point(60, 1950), new Point(60, 2265));
+               new GUIWire(submodelModifiable, B1, ram.getPin("B1"), new Point(55, 2050), new Point(55, 2275));
+               new GUIWire(submodelModifiable, B2, ram.getPin("B2"), new Point(50, 2150), new Point(50, 2285));
+               new GUIWire(submodelModifiable, B3, ram.getPin("B3"), new Point(45, 2250), new Point(45, 2295));
+               new GUIWire(submodelModifiable, ram.getPin("QA1"), QAlatch.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, ram.getPin("QA2"), QAlatch.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, ram.getPin("QA3"), QAlatch.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, ram.getPin("QA4"), QAlatch.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, ram.getPin("QB1"), QBlatch.getPin("D1"), new Point(150, 2265), new Point(150, 2280));
+               new GUIWire(submodelModifiable, ram.getPin("QB2"), QBlatch.getPin("D2"), new Point(145, 2275), new Point(145, 2290));
+               new GUIWire(submodelModifiable, ram.getPin("QB3"), QBlatch.getPin("D3"), new Point(140, 2285), new Point(140, 2300));
+               new GUIWire(submodelModifiable, ram.getPin("QB4"), QBlatch.getPin("D4"), new Point(135, 2295), new Point(135, 2310));
+               new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(100, 1050), new Point(100, 2175));
+               new GUIWire(submodelModifiable, D1, alu.getPin("D1"), new Point(180, 1150), new Point(180, 2185));
+               new GUIWire(submodelModifiable, D2, alu.getPin("D2"), new Point(175, 1250), new Point(175, 2195));
+               new GUIWire(submodelModifiable, D3, alu.getPin("D3"), new Point(170, 1350), new Point(170, 2205));
+               new GUIWire(submodelModifiable, D4, alu.getPin("D4"), new Point(165, 1450), new Point(165, 2215));
+               new GUIWire(submodelModifiable, QAlatch.getPin("Q1"), cpQA1, new Point[0]);
+               new GUIWire(submodelModifiable, QAlatch.getPin("Q2"), cpQA2, new Point[0]);
+               new GUIWire(submodelModifiable, QAlatch.getPin("Q3"), cpQA3, new Point[0]);
+               new GUIWire(submodelModifiable, QAlatch.getPin("Q4"), cpQA4, new Point[0]);
+               new GUIWire(submodelModifiable, cpQA1, Ymux.getPin("I0_1"), new Point(220, 150));
+               new GUIWire(submodelModifiable, cpQA2, Ymux.getPin("I0_2"), new Point(225, 160));
+               new GUIWire(submodelModifiable, cpQA3, Ymux.getPin("I0_3"), new Point(230, 170));
+               new GUIWire(submodelModifiable, cpQA4, Ymux.getPin("I0_4"), new Point(235, 180));
+               new GUIWire(submodelModifiable, cpQA1, alu.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQA2, alu.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQA3, alu.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQA4, alu.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, QBlatch.getPin("Q1"), alu.getPin("B1"), new Point(200, 2280), new Point(200, 2265));
+               new GUIWire(submodelModifiable, QBlatch.getPin("Q2"), alu.getPin("B2"), new Point(205, 2290), new Point(205, 2275));
+               new GUIWire(submodelModifiable, QBlatch.getPin("Q3"), alu.getPin("B3"), new Point(210, 2300), new Point(210, 2285));
+               new GUIWire(submodelModifiable, QBlatch.getPin("Q4"), alu.getPin("B4"), new Point(215, 2310), new Point(215, 2295));
+               new GUIWire(submodelModifiable, qreg.getPin("Q1"), cpQ1, new Point[0]);
+               new GUIWire(submodelModifiable, qreg.getPin("Q2"), cpQ2, new Point[0]);
+               new GUIWire(submodelModifiable, qreg.getPin("Q3"), cpQ3, new Point[0]);
+               new GUIWire(submodelModifiable, qreg.getPin("Q4"), cpQ4, new Point[0]);
+               new GUIWire(submodelModifiable, cpQ1, cpOQn, new Point[0]);
+               new GUIWire(submodelModifiable, cpOQn, OQn, new Point(335, 2495), new Point(335, 1050));
+               new GUIWire(submodelModifiable, cpQ4, cpOQnplus3, new Point[0]);
+               new GUIWire(submodelModifiable, cpOQnplus3, OQnplus3, new Point(340, 2525), new Point(340, 1150));
+               new GUIWire(submodelModifiable, cpQ2, cpQ2Rsh, new Point(135, 2670), new Point(30, 2670), new Point(30, 2635), new Point(35, 2635));
+               new GUIWire(submodelModifiable, cpQ3, cpQ3Rsh, new Point(140, 2675), new Point(35, 2675), new Point(35, 2640), new Point(40, 2640));
+               new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("C1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("C2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpQ4, qregDsel.getPin("C3"), new Point(145, 2680), new Point(40, 2680), new Point(40, 2645));
+               new GUIWire(submodelModifiable, IQnplus3, qregDsel.getPin("C4"), new Point(5, 2650), new Point(5, 2655));
+               new GUIWire(submodelModifiable, IQn, qregDsel.getPin("A1"), new Point(5, 2550), new Point(5, 2545));
+               new GUIWire(submodelModifiable, cpQ1, qregDsel.getPin("A2"), new Point(130, 2665), new Point(25, 2665), new Point(25, 2630),
+                               new Point(30, 2630), new Point(30, 2555));
+               new GUIWire(submodelModifiable, cpOQn, alu.getPin("Q1"), new Point(220, 2305));
+               new GUIWire(submodelModifiable, cpQ2, alu.getPin("Q2"), new Point(225, 2505), new Point(225, 2315));
+               new GUIWire(submodelModifiable, cpQ3, alu.getPin("Q3"), new Point(230, 2515), new Point(230, 2325));
+               new GUIWire(submodelModifiable, cpOQnplus3, alu.getPin("Q4"), new Point(235, 2335));
+               new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("A3"), new Point(35, 2565));
+               new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("A4"), new Point(40, 2575));
+               new GUIWire(submodelModifiable, qregDsel.getPin("Y1"), qreg.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, qregDsel.getPin("Y2"), qreg.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, qregDsel.getPin("Y3"), qreg.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, qregDsel.getPin("Y4"), qreg.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(315, 2155), new Point(315, 550));
+               new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(320, 2165), new Point(320, 650));
+               new GUIWire(submodelModifiable, alu.getPin("F1"), cpORAMn, new Point[0]);
+               new GUIWire(submodelModifiable, alu.getPin("F4"), cpORAMnplus3, new Point[0]);
+               new GUIWire(submodelModifiable, cpORAMn, ORAMn, new Point(325, 2115), new Point(325, 850));
+               new GUIWire(submodelModifiable, cpORAMnplus3, cpF3, new Point(330, 2145));
+               new GUIWire(submodelModifiable, cpF3, ORAMnplus3, new Point[0]);
+               new GUIWire(submodelModifiable, cpF3, F3, new Point(330, 750));
+               new GUIWire(submodelModifiable, cpORAMn, cpF11, new Point(280, 2090));
+               new GUIWire(submodelModifiable, alu.getPin("F2"), cpF21, new Point(285, 2125), new Point(285, 2095));
+               new GUIWire(submodelModifiable, alu.getPin("F3"), cpF31, new Point(290, 2135), new Point(290, 2100));
+               new GUIWire(submodelModifiable, cpORAMnplus3, cpF41, new Point(295, 2105));
+               new GUIWire(submodelModifiable, cpF11, cpF12, new Point[0]);
+               new GUIWire(submodelModifiable, cpF21, cpF22, new Point[0]);
+               new GUIWire(submodelModifiable, cpF31, cpF32, new Point[0]);
+               new GUIWire(submodelModifiable, cpF41, cpF42, new Point[0]);
+               new GUIWire(submodelModifiable, cpF12, Fneq0.getPin("A1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF22, Fneq0.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF32, Fneq0.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF42, Fneq0.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF12, Ymux.getPin("I1_1"), new Point(255, 190));
+               new GUIWire(submodelModifiable, cpF22, Ymux.getPin("I1_2"), new Point(260, 200));
+               new GUIWire(submodelModifiable, cpF32, Ymux.getPin("I1_3"), new Point(265, 210));
+               new GUIWire(submodelModifiable, cpF42, Ymux.getPin("I1_4"), new Point(270, 220));
+               new GUIWire(submodelModifiable, cpF11, cpF1Lsh, new Point(10, 2090));
+               new GUIWire(submodelModifiable, cpF21, cpF2Lsh, new Point(15, 2095));
+               new GUIWire(submodelModifiable, cpF31, cpF3Lsh, new Point(20, 2100));
+               new GUIWire(submodelModifiable, IRAMn, ramDsel.getPin("A1"), new Point(5, 2350), new Point(5, 2345));
+               new GUIWire(submodelModifiable, cpF1Lsh, ramDsel.getPin("A2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF2Lsh, ramDsel.getPin("A3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF3Lsh, ramDsel.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF2Lsh, cpF2Rsh, new Point[0]);
+               new GUIWire(submodelModifiable, cpF3Lsh, cpF3Rsh, new Point[0]);
+               new GUIWire(submodelModifiable, cpF41, cpF4Rsh, new Point(25, 2105));
+               new GUIWire(submodelModifiable, cpF1Lsh, cpF13, new Point[0]);
+               new GUIWire(submodelModifiable, cpF13, ramDsel.getPin("B1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF2Rsh, ramDsel.getPin("B2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF3Rsh, ramDsel.getPin("B3"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF4Rsh, ramDsel.getPin("B4"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF2Rsh, cpF23, new Point[0]);
+               new GUIWire(submodelModifiable, cpF3Rsh, cpF33, new Point[0]);
+               new GUIWire(submodelModifiable, cpF4Rsh, cpF43, new Point[0]);
+               new GUIWire(submodelModifiable, cpF23, ramDsel.getPin("C1"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF33, ramDsel.getPin("C2"), new Point[0]);
+               new GUIWire(submodelModifiable, cpF43, ramDsel.getPin("C3"), new Point[0]);
+               new GUIWire(submodelModifiable, IRAMnplus3, ramDsel.getPin("C4"), new Point(5, 2450), new Point(5, 2455));
+               new GUIWire(submodelModifiable, cpF13, qregDsel.getPin("B1"), new Point(10, 2585));
+               new GUIWire(submodelModifiable, cpF23, qregDsel.getPin("B2"), new Point(15, 2595));
+               new GUIWire(submodelModifiable, cpF33, qregDsel.getPin("B3"), new Point(20, 2605));
+               new GUIWire(submodelModifiable, cpF43, qregDsel.getPin("B4"), new Point(25, 2615));
+               new GUIWire(submodelModifiable, ramDsel.getPin("Y1"), ram.getPin("D1"), new Point[0]);
+               new GUIWire(submodelModifiable, ramDsel.getPin("Y2"), ram.getPin("D2"), new Point[0]);
+               new GUIWire(submodelModifiable, ramDsel.getPin("Y3"), ram.getPin("D3"), new Point[0]);
+               new GUIWire(submodelModifiable, ramDsel.getPin("Y4"), ram.getPin("D4"), new Point[0]);
+               new GUIWire(submodelModifiable, destDecode.getPin("RAMWE"), ramweAnd.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, notC.getPin("Y"), ramweAnd.getPin("B"));
+               new GUIWire(submodelModifiable, ramweAnd.getPin("Y"), ram.getPin("WE"), new Point(230, 70), new Point(230, 105), new Point(90, 105),
+                               new Point(90, 2305));
+               new GUIWire(submodelModifiable, destDecode.getPin("QWE"), qreg.getPin("WE"), new Point(85, 100), new Point(85, 2505));
+               new GUIWire(submodelModifiable, destDecode.getPin("YF"), Ymux.getPin("S0"), new Point(70, 80), new Point(70, 140));
+               new GUIWire(submodelModifiable, Ymux.getPin("Y1"), Y1, new Point(335, 140), new Point(335, 50));
+               new GUIWire(submodelModifiable, Ymux.getPin("Y2"), Y2, new Point[0]);
+               new GUIWire(submodelModifiable, Ymux.getPin("Y3"), Y3, new Point(335, 160), new Point(335, 250));
+               new GUIWire(submodelModifiable, Ymux.getPin("Y4"), Y4, new Point(325, 170), new Point(325, 350));
+               new GUIWire(submodelModifiable, Fneq0.getPin("Y"), cpFneq0, new Point[0]);
+               new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("A"), new Point(315, 445));
+               new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("B"), new Point(315, 455));
+               new GUIWire(submodelModifiable, notFneq0.getPin("Y"), Feq0, new Point[0]);
+
+               addHighLevelStateSubcomponentID("regs", ram);
+               addHighLevelStateSubcomponentID("qreg", qreg);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901.class.getCanonicalName(), (m, p, n) -> new GUIAm2901(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java
new file mode 100644 (file)
index 0000000..8a62634
--- /dev/null
@@ -0,0 +1,121 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInand3;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUFuncDecode extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901ALUFuncDecode(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901ALUFuncDecode(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901ALUFuncDecode", name);
+               setSubmodelScale(.25);
+               setInputPins("I5", "I4", "I3");
+               setOutputPins("CinE", "L", "SN", "SBE", "FN", "RN");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I5 = getSubmodelPin("I5");
+               Pin I4 = getSubmodelPin("I4");
+               Pin I3 = getSubmodelPin("I3");
+               Pin CinE = getSubmodelPin("CinE");
+               Pin L = getSubmodelPin("L");
+               Pin SN = getSubmodelPin("SN");
+               Pin SBE = getSubmodelPin("SBE");
+               Pin FN = getSubmodelPin("FN");
+               Pin RN = getSubmodelPin("RN");
+
+               GUINandGate notI5 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notI4 = new GUINandGate(submodelModifiable, 1);
+               GUInand3 nandI4I3NotI5 = new GUInand3(submodelModifiable);
+               GUINandGate nandI5NotI4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandI3I4 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandL = new GUINandGate(submodelModifiable, 1);
+               GUIand andSBE = new GUIand(submodelModifiable);
+
+               WireCrossPoint cpI51 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI52 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI53 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI41 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI42 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI43 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI44 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI31 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI32 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI51 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI52 = new WireCrossPoint(submodelModifiable, 1);
+
+               notI5.moveTo(15, 10);
+               notI4.moveTo(15, 50);
+               nandI4I3NotI5.moveTo(55, 10);
+               nandI5NotI4.moveTo(55, 45);
+               nandI3I4.moveTo(55, 70);
+               nandL.moveTo(100, 50);
+               andSBE.moveTo(100, 135);
+               cpI51.moveCenterTo(5, 20);
+               cpI52.moveCenterTo(5, 25);
+               cpI53.moveCenterTo(5, 45);
+               cpI41.moveCenterTo(10, 60);
+               cpI42.moveCenterTo(10, 55);
+               cpI43.moveCenterTo(10, 65);
+               cpI44.moveCenterTo(10, 85);
+               cpI31.moveCenterTo(50, 100);
+               cpI32.moveCenterTo(50, 75);
+               cpNotI51.moveCenterTo(40, 20);
+               cpNotI52.moveCenterTo(40, 35);
+
+               new GUIWire(submodelModifiable, I5, cpI51, new Point[0]);
+               new GUIWire(submodelModifiable, cpI51, notI5.getPin("A"), new Point(5, 15));
+               new GUIWire(submodelModifiable, cpI51, cpI52, new Point[0]);
+               new GUIWire(submodelModifiable, cpI52, notI5.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI52, cpI53, new Point[0]);
+               new GUIWire(submodelModifiable, cpI53, nandI5NotI4.getPin("A"), new Point(45, 45), new Point(45, 50));
+               new GUIWire(submodelModifiable, cpI53, FN, new Point(5, 180));
+               new GUIWire(submodelModifiable, I4, cpI41, new Point[0]);
+               new GUIWire(submodelModifiable, cpI41, cpI42, new Point[0]);
+               new GUIWire(submodelModifiable, cpI42, nandI4I3NotI5.getPin("A"), new Point(10, 40), new Point(45, 40), new Point(45, 15));
+               new GUIWire(submodelModifiable, cpI42, notI4.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI41, cpI43, new Point[0]);
+               new GUIWire(submodelModifiable, cpI43, notI4.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI43, cpI44, new Point[0]);
+               new GUIWire(submodelModifiable, cpI44, nandI3I4.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI44, SN, new Point(10, 105), new Point(135, 105), new Point(135, 100));
+               new GUIWire(submodelModifiable, I3, cpI31, new Point(50, 100));
+               new GUIWire(submodelModifiable, cpI31, RN, new Point(50, 220));
+               new GUIWire(submodelModifiable, cpI31, cpI32, new Point[0]);
+               new GUIWire(submodelModifiable, cpI32, nandI4I3NotI5.getPin("B"), new Point(50, 25));
+               new GUIWire(submodelModifiable, cpI32, nandI3I4.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, notI5.getPin("Y"), cpNotI51, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI51, CinE, new Point(40, 5), new Point(115, 5), new Point(115, 20));
+               new GUIWire(submodelModifiable, cpNotI51, cpNotI52, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI52, nandI4I3NotI5.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI52, andSBE.getPin("B"), new Point(40, 150));
+               new GUIWire(submodelModifiable, notI4.getPin("Y"), nandI5NotI4.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nandI4I3NotI5.getPin("Y"), nandL.getPin("A"));
+               new GUIWire(submodelModifiable, nandI5NotI4.getPin("Y"), nandL.getPin("B"));
+               new GUIWire(submodelModifiable, nandI3I4.getPin("Y"), andSBE.getPin("A"));
+               new GUIWire(submodelModifiable, nandL.getPin("Y"), L, new Point[0]);
+               new GUIWire(submodelModifiable, andSBE.getPin("Y"), SBE, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUFuncDecode.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901ALUFuncDecode(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java
new file mode 100644 (file)
index 0000000..5c1afe1
--- /dev/null
@@ -0,0 +1,181 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUInclDecode extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901ALUInclDecode(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901ALUInclDecode(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901ALUInclDecode", name);
+               setSubmodelScale(.25);
+               setInputPins("I5", "I4", "I3", "Cn", "R1", "R2", "R3", "R4", "S1", "S2", "S3", "S4");
+               setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I5 = getSubmodelPin("I5");
+               Pin I4 = getSubmodelPin("I4");
+               Pin I3 = getSubmodelPin("I3");
+               Pin Cn = getSubmodelPin("Cn");
+               Pin R1 = getSubmodelPin("R1");
+               Pin R2 = getSubmodelPin("R2");
+               Pin R3 = getSubmodelPin("R3");
+               Pin R4 = getSubmodelPin("R4");
+               Pin S1 = getSubmodelPin("S1");
+               Pin S2 = getSubmodelPin("S2");
+               Pin S3 = getSubmodelPin("S3");
+               Pin S4 = getSubmodelPin("S4");
+               Pin F1 = getSubmodelPin("F1");
+               Pin F2 = getSubmodelPin("F2");
+               Pin F3 = getSubmodelPin("F3");
+               Pin F4 = getSubmodelPin("F4");
+               Pin Cnplus4 = getSubmodelPin("Cn+4");
+               Pin OVR = getSubmodelPin("OVR");
+
+               GUIAm2901ALUFuncDecode funcDecode = new GUIAm2901ALUFuncDecode(submodelModifiable);
+               GUIAm2901ALUOneBit alu1 = new GUIAm2901ALUOneBit(submodelModifiable);
+               GUIAm2901ALUOneBit alu2 = new GUIAm2901ALUOneBit(submodelModifiable);
+               GUIAm2901ALUOneBit alu3 = new GUIAm2901ALUOneBit(submodelModifiable);
+               GUIAm2901ALUOneBit alu4 = new GUIAm2901ALUOneBit(submodelModifiable);
+               GUIxor xorOVR = new GUIxor(submodelModifiable);
+
+               WireCrossPoint cpCoutE1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCoutE2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCoutE3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCinE1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCinE2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCinE3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpRN1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpRN2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpRN3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSN1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSN2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSN3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpFN1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpFN2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpFN3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpL1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpL2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpL3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCnplus3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpCnplus4 = new WireCrossPoint(submodelModifiable, 1);
+
+               funcDecode.moveTo(20, 2.5);
+               alu1.moveTo(45, 80);
+               alu2.moveTo(45, 180);
+               alu3.moveTo(45, 280);
+               alu4.moveTo(45, 380);
+               xorOVR.moveTo(95, 400);
+               cpCoutE1.moveCenterTo(25, 95);
+               cpCoutE2.moveCenterTo(25, 195);
+               cpCoutE3.moveCenterTo(25, 295);
+               cpCinE1.moveCenterTo(27.5, 105);
+               cpCinE2.moveCenterTo(27.5, 205);
+               cpCinE3.moveCenterTo(27.5, 305);
+               cpRN1.moveCenterTo(30, 125);
+               cpRN2.moveCenterTo(30, 225);
+               cpRN3.moveCenterTo(30, 325);
+               cpSN1.moveCenterTo(32.5, 145);
+               cpSN2.moveCenterTo(32.5, 245);
+               cpSN3.moveCenterTo(32.5, 345);
+               cpFN1.moveCenterTo(35, 155);
+               cpFN2.moveCenterTo(35, 255);
+               cpFN3.moveCenterTo(35, 355);
+               cpL1.moveCenterTo(37.5, 165);
+               cpL2.moveCenterTo(37.5, 265);
+               cpL3.moveCenterTo(37.5, 365);
+               cpCnplus3.moveCenterTo(85, 375);
+               cpCnplus4.moveCenterTo(85, 385);
+
+               new GUIWire(submodelModifiable, I5, funcDecode.getPin("I5"), new Point(5, 20), new Point(5, 7.5));
+               new GUIWire(submodelModifiable, I4, funcDecode.getPin("I4"), new Point(10, 60), new Point(10, 17.5));
+               new GUIWire(submodelModifiable, I3, funcDecode.getPin("I3"), new Point(15, 100), new Point(15, 27.5));
+               new GUIWire(submodelModifiable, funcDecode.getPin("SBE"), cpCoutE1, new Point(62.5, 37.5), new Point(62.5, 70), new Point(25, 70));
+               new GUIWire(submodelModifiable, cpCoutE1, cpCoutE2, new Point[0]);
+               new GUIWire(submodelModifiable, cpCoutE2, cpCoutE3, new Point[0]);
+               new GUIWire(submodelModifiable, cpCoutE1, alu1.getPin("CoutE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCoutE2, alu2.getPin("CoutE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCoutE3, alu3.getPin("CoutE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCoutE3, alu4.getPin("CoutE"), new Point(25, 395));
+               new GUIWire(submodelModifiable, funcDecode.getPin("CinE"), cpCinE1, new Point(70, 7.5), new Point(70, 77.5), new Point(27.5, 77.5));
+               new GUIWire(submodelModifiable, cpCinE1, cpCinE2, new Point[0]);
+               new GUIWire(submodelModifiable, cpCinE2, cpCinE3, new Point[0]);
+               new GUIWire(submodelModifiable, cpCinE1, alu1.getPin("CinE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCinE2, alu2.getPin("CinE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCinE3, alu3.getPin("CinE"), new Point[0]);
+               new GUIWire(submodelModifiable, cpCinE3, alu4.getPin("CinE"), new Point(27.5, 405));
+               new GUIWire(submodelModifiable, funcDecode.getPin("RN"), cpRN1, new Point(57.5, 57.5), new Point(57.5, 65), new Point(30, 65));
+               new GUIWire(submodelModifiable, cpRN1, cpRN2, new Point[0]);
+               new GUIWire(submodelModifiable, cpRN2, cpRN3, new Point[0]);
+               new GUIWire(submodelModifiable, cpRN1, alu1.getPin("RN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpRN2, alu2.getPin("RN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpRN3, alu3.getPin("RN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpRN3, alu4.getPin("RN"), new Point(30, 425));
+               new GUIWire(submodelModifiable, funcDecode.getPin("SN"), cpSN1, new Point(65, 27.5), new Point(65, 72.5), new Point(32.5, 72.5));
+               new GUIWire(submodelModifiable, cpSN1, cpSN2, new Point[0]);
+               new GUIWire(submodelModifiable, cpSN2, cpSN3, new Point[0]);
+               new GUIWire(submodelModifiable, cpSN1, alu1.getPin("SN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSN2, alu2.getPin("SN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSN3, alu3.getPin("SN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpSN3, alu4.getPin("SN"), new Point(32.5, 445));
+               new GUIWire(submodelModifiable, funcDecode.getPin("FN"), cpFN1, new Point(60, 47.5), new Point(60, 67.5), new Point(35, 67.5));
+               new GUIWire(submodelModifiable, cpFN1, cpFN2, new Point[0]);
+               new GUIWire(submodelModifiable, cpFN2, cpFN3, new Point[0]);
+               new GUIWire(submodelModifiable, cpFN1, alu1.getPin("FN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpFN2, alu2.getPin("FN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpFN3, alu3.getPin("FN"), new Point[0]);
+               new GUIWire(submodelModifiable, cpFN3, alu4.getPin("FN"), new Point(35, 455));
+               new GUIWire(submodelModifiable, funcDecode.getPin("L"), cpL1, new Point(67.5, 17.5), new Point(67.5, 75), new Point(37.5, 75));
+               new GUIWire(submodelModifiable, cpL1, cpL2, new Point[0]);
+               new GUIWire(submodelModifiable, cpL2, cpL3, new Point[0]);
+               new GUIWire(submodelModifiable, cpL1, alu1.getPin("L"), new Point[0]);
+               new GUIWire(submodelModifiable, cpL2, alu2.getPin("L"), new Point[0]);
+               new GUIWire(submodelModifiable, cpL3, alu3.getPin("L"), new Point[0]);
+               new GUIWire(submodelModifiable, cpL3, alu4.getPin("L"), new Point(37.5, 465));
+               new GUIWire(submodelModifiable, R1, alu1.getPin("R"), new Point(10, 180), new Point(10, 115));
+               new GUIWire(submodelModifiable, R2, alu2.getPin("R"), new Point(10, 220), new Point(10, 215));
+               new GUIWire(submodelModifiable, R3, alu3.getPin("R"), new Point(10, 260), new Point(10, 315));
+               new GUIWire(submodelModifiable, R4, alu4.getPin("R"), new Point(20, 300), new Point(20, 415));
+               new GUIWire(submodelModifiable, S1, alu1.getPin("S"), new Point(15, 340), new Point(15, 135));
+               new GUIWire(submodelModifiable, S2, alu2.getPin("S"), new Point(5, 380), new Point(5, 235));
+               new GUIWire(submodelModifiable, S3, alu3.getPin("S"), new Point(10, 420), new Point(10, 335));
+               new GUIWire(submodelModifiable, S4, alu4.getPin("S"), new Point(10, 460), new Point(10, 435));
+               new GUIWire(submodelModifiable, Cn, alu1.getPin("Cin"), new Point(5, 140), new Point(5, 85));
+               new GUIWire(submodelModifiable, alu1.getPin("Cout"), alu2.getPin("Cin"), new Point(85, 85), new Point(85, 175), new Point(40, 175),
+                               new Point(40, 185));
+               new GUIWire(submodelModifiable, alu2.getPin("Cout"), alu3.getPin("Cin"), new Point(85, 185), new Point(85, 275), new Point(40, 275),
+                               new Point(40, 285));
+               new GUIWire(submodelModifiable, alu3.getPin("Cout"), cpCnplus3, new Point(85, 285));
+               new GUIWire(submodelModifiable, cpCnplus3, alu4.getPin("Cin"), new Point(40, 375), new Point(40, 385));
+               new GUIWire(submodelModifiable, alu4.getPin("Cout"), cpCnplus4, new Point[0]);
+               new GUIWire(submodelModifiable, alu1.getPin("F"), F1, new Point(90, 95), new Point(90, 20));
+               new GUIWire(submodelModifiable, alu2.getPin("F"), F2, new Point(95, 195), new Point(95, 60));
+               new GUIWire(submodelModifiable, alu3.getPin("F"), F3, new Point(100, 295), new Point(100, 100));
+               new GUIWire(submodelModifiable, alu4.getPin("F"), F4, new Point(105, 395), new Point(105, 140));
+               new GUIWire(submodelModifiable, cpCnplus3, xorOVR.getPin("A"), new Point(90, 375), new Point(90, 405));
+               new GUIWire(submodelModifiable, cpCnplus4, xorOVR.getPin("B"), new Point(85, 415));
+               new GUIWire(submodelModifiable, cpCnplus4, Cnplus4, new Point(130, 385), new Point(130, 180));
+               new GUIWire(submodelModifiable, xorOVR.getPin("Y"), OVR);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUInclDecode.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901ALUInclDecode(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java
new file mode 100644 (file)
index 0000000..a57e315
--- /dev/null
@@ -0,0 +1,152 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel2_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUInclSourceDecodeInclFunctionDecode extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901ALUInclSourceDecodeInclFunctionDecode", name);
+               setSubmodelScale(.25);
+               setInputPins("I5", "I4", "I3", "I2", "I1", "I0", "Cn", "D1", "D2", "D3", "D4", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "Q1",
+                               "Q2", "Q3", "Q4");
+               setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I5 = getSubmodelPin("I5");
+               Pin I4 = getSubmodelPin("I4");
+               Pin I3 = getSubmodelPin("I3");
+               Pin I2 = getSubmodelPin("I2");
+               Pin I1 = getSubmodelPin("I1");
+               Pin I0 = getSubmodelPin("I0");
+               Pin Cn = getSubmodelPin("Cn");
+               Pin D1 = getSubmodelPin("D1");
+               Pin D2 = getSubmodelPin("D2");
+               Pin D3 = getSubmodelPin("D3");
+               Pin D4 = getSubmodelPin("D4");
+               Pin A1 = getSubmodelPin("A1");
+               Pin A2 = getSubmodelPin("A2");
+               Pin A3 = getSubmodelPin("A3");
+               Pin A4 = getSubmodelPin("A4");
+               Pin B1 = getSubmodelPin("B1");
+               Pin B2 = getSubmodelPin("B2");
+               Pin B3 = getSubmodelPin("B3");
+               Pin B4 = getSubmodelPin("B4");
+               Pin Q1 = getSubmodelPin("Q1");
+               Pin Q2 = getSubmodelPin("Q2");
+               Pin Q3 = getSubmodelPin("Q3");
+               Pin Q4 = getSubmodelPin("Q4");
+               Pin F1 = getSubmodelPin("F1");
+               Pin F2 = getSubmodelPin("F2");
+               Pin F3 = getSubmodelPin("F3");
+               Pin F4 = getSubmodelPin("F4");
+               Pin Cnplus4 = getSubmodelPin("Cn+4");
+               Pin OVR = getSubmodelPin("OVR");
+
+               GUIAm2901SourceDecode sourceDecode = new GUIAm2901SourceDecode(submodelModifiable);
+               GUIsel2_4 selR = new GUIsel2_4(submodelModifiable);
+               GUIsel3_4 selS = new GUIsel3_4(submodelModifiable);
+               GUIAm2901ALUInclDecode alu = new GUIAm2901ALUInclDecode(submodelModifiable);
+
+               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+
+               sourceDecode.moveTo(15, 165);
+               selR.moveTo(45, 365);
+               selS.moveTo(45, 575);
+               alu.moveTo(60, 15);
+               cpA1.moveCenterTo(10, 460);
+               cpA2.moveCenterTo(15, 500);
+               cpA3.moveCenterTo(20, 540);
+               cpA4.moveCenterTo(25, 580);
+
+               new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point[0]);
+               new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(5, 60), new Point(5, 30));
+               new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(15, 100), new Point(15, 40));
+               new GUIWire(submodelModifiable, I2, sourceDecode.getPin("I2"), new Point(5, 140), new Point(5, 170));
+               new GUIWire(submodelModifiable, I1, sourceDecode.getPin("I1"), new Point[0]);
+               new GUIWire(submodelModifiable, I0, sourceDecode.getPin("I0"), new Point(5, 220), new Point(5, 190));
+               new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(10, 260), new Point(10, 50));
+               new GUIWire(submodelModifiable, D1, selR.getPin("A1"), new Point(15, 300), new Point(15, 390));
+               new GUIWire(submodelModifiable, D2, selR.getPin("A2"), new Point(10, 340), new Point(10, 400));
+               new GUIWire(submodelModifiable, D3, selR.getPin("A3"), new Point(5, 380), new Point(5, 410));
+               new GUIWire(submodelModifiable, D4, selR.getPin("A4"), new Point[0]);
+               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+               new GUIWire(submodelModifiable, cpA1, selR.getPin("B1"), new Point(10, 430));
+               new GUIWire(submodelModifiable, cpA2, selR.getPin("B2"), new Point(15, 440));
+               new GUIWire(submodelModifiable, cpA3, selR.getPin("B3"), new Point(20, 450));
+               new GUIWire(submodelModifiable, cpA4, selR.getPin("B4"), new Point(25, 460));
+               new GUIWire(submodelModifiable, cpA1, selS.getPin("A1"), new Point(10, 610));
+               new GUIWire(submodelModifiable, cpA2, selS.getPin("A2"), new Point(15, 620));
+               new GUIWire(submodelModifiable, cpA3, selS.getPin("A3"), new Point(20, 630));
+               new GUIWire(submodelModifiable, cpA4, selS.getPin("A4"), new Point(25, 640));
+               new GUIWire(submodelModifiable, B1, selS.getPin("B1"), new Point(5, 620), new Point(5, 650));
+               new GUIWire(submodelModifiable, B2, selS.getPin("B2"), new Point[0]);
+               new GUIWire(submodelModifiable, B3, selS.getPin("B3"), new Point(5, 700), new Point(5, 670));
+               new GUIWire(submodelModifiable, B4, selS.getPin("B4"), new Point(10, 740), new Point(10, 680));
+               new GUIWire(submodelModifiable, Q1, selS.getPin("C1"), new Point(15, 780), new Point(15, 690));
+               new GUIWire(submodelModifiable, Q2, selS.getPin("C2"), new Point(20, 820), new Point(20, 700));
+               new GUIWire(submodelModifiable, Q3, selS.getPin("C3"), new Point(25, 860), new Point(25, 710));
+               new GUIWire(submodelModifiable, Q4, selS.getPin("C4"), new Point(30, 900), new Point(30, 720));
+               new GUIWire(submodelModifiable, sourceDecode.getPin("SQ"), selS.getPin("SC"), new Point(75, 170), new Point(75, 240),
+                               new Point(30, 240), new Point(30, 600));
+               new GUIWire(submodelModifiable, sourceDecode.getPin("RA"), selR.getPin("SB"), new Point(70, 180), new Point(70, 235),
+                               new Point(20, 235), new Point(20, 380));
+               new GUIWire(submodelModifiable, sourceDecode.getPin("SB"), selS.getPin("SB"), new Point(65, 190), new Point(65, 230),
+                               new Point(35, 230), new Point(35, 590));
+               new GUIWire(submodelModifiable, sourceDecode.getPin("SA"), selS.getPin("SA"), new Point(60, 200), new Point(60, 225),
+                               new Point(40, 225), new Point(40, 580));
+               new GUIWire(submodelModifiable, sourceDecode.getPin("RD"), selR.getPin("SA"), new Point(55, 210), new Point(55, 220),
+                               new Point(25, 220), new Point(25, 370));
+               new GUIWire(submodelModifiable, selR.getPin("Y1"), alu.getPin("R1"), new Point(82.5, 370), new Point(82.5, 162.5),
+                               new Point(20, 162.5), new Point(20, 60));
+               new GUIWire(submodelModifiable, selR.getPin("Y2"), alu.getPin("R2"), new Point(85, 380), new Point(85, 160), new Point(22.5, 160),
+                               new Point(22.5, 70));
+               new GUIWire(submodelModifiable, selR.getPin("Y3"), alu.getPin("R3"), new Point(87.5, 390), new Point(87.5, 157.5),
+                               new Point(25, 157.5), new Point(25, 80));
+               new GUIWire(submodelModifiable, selR.getPin("Y4"), alu.getPin("R4"), new Point(90, 400), new Point(90, 155), new Point(27.5, 155),
+                               new Point(27.5, 90));
+               new GUIWire(submodelModifiable, selS.getPin("Y1"), alu.getPin("S1"), new Point(92.5, 580), new Point(92.5, 152.5),
+                               new Point(30, 152.5), new Point(30, 100));
+               new GUIWire(submodelModifiable, selS.getPin("Y2"), alu.getPin("S2"), new Point(95, 590), new Point(95, 150), new Point(32.5, 150),
+                               new Point(32.5, 110));
+               new GUIWire(submodelModifiable, selS.getPin("Y3"), alu.getPin("S3"), new Point(97.5, 600), new Point(97.5, 147.5),
+                               new Point(35, 147.5), new Point(35, 120));
+               new GUIWire(submodelModifiable, selS.getPin("Y4"), alu.getPin("S4"), new Point(100, 610), new Point(100, 145), new Point(37.5, 145),
+                               new Point(37.5, 130));
+               new GUIWire(submodelModifiable, alu.getPin("F1"), F1, new Point[0]);
+               new GUIWire(submodelModifiable, alu.getPin("F2"), F2, new Point(135, 30), new Point(135, 60));
+               new GUIWire(submodelModifiable, alu.getPin("F3"), F3, new Point(130, 40), new Point(130, 100));
+               new GUIWire(submodelModifiable, alu.getPin("F4"), F4, new Point(125, 50), new Point(125, 140));
+               new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(120, 60), new Point(120, 180));
+               new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(115, 70), new Point(115, 220));
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUInclSourceDecodeInclFunctionDecode.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java
new file mode 100644 (file)
index 0000000..453a669
--- /dev/null
@@ -0,0 +1,101 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUOneBit extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901ALUOneBit(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901ALUOneBit(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901ALUOneBit", name);
+               setSubmodelScale(.2);
+               setInputPins("Cin", "CoutE", "CinE", "R", "RN", "S", "SN", "FN", "L");
+               setOutputPins("Cout", "F");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin Cin = getSubmodelPin("Cin");
+               Pin CoutE = getSubmodelPin("CoutE");
+               Pin CinE = getSubmodelPin("CinE");
+               Pin R = getSubmodelPin("R");
+               Pin RN = getSubmodelPin("RN");
+               Pin S = getSubmodelPin("S");
+               Pin SN = getSubmodelPin("SN");
+               Pin FN = getSubmodelPin("FN");
+               Pin L = getSubmodelPin("L");
+               Pin Cout = getSubmodelPin("Cout");
+               Pin F = getSubmodelPin("F");
+
+               GUIand Cinand = new GUIand(submodelModifiable);
+               GUIxor Rxor = new GUIxor(submodelModifiable);
+               GUIxor Sxor = new GUIxor(submodelModifiable);
+               GUIfulladder add = new GUIfulladder(submodelModifiable);
+               GUINandGate nand = new GUINandGate(submodelModifiable, 1);
+               GUIand Coutand = new GUIand(submodelModifiable);
+               GUImux1 Fsel = new GUImux1(submodelModifiable);
+               GUIxor Fxor = new GUIxor(submodelModifiable);
+
+               WireCrossPoint cpRXored = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpSXored = new WireCrossPoint(submodelModifiable, 1);
+
+               Cinand.moveTo(10, 20);
+               Rxor.moveTo(10, 190);
+               Sxor.moveTo(10, 290);
+               add.moveTo(60, 20);
+               nand.moveTo(60, 55);
+               Coutand.moveTo(135, 20);
+               Fsel.moveTo(90, 70);
+               Fxor.moveTo(135, 70);
+               cpRXored.moveCenterTo(50, 60);
+               cpSXored.moveCenterTo(55, 70);
+
+               new GUIWire(submodelModifiable, Cin, Cinand.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, CoutE, Coutand.getPin("A"), new Point(5, 75), new Point(5, 10), new Point(130, 10),
+                               new Point(130, 25));
+               new GUIWire(submodelModifiable, CinE, Cinand.getPin("B"), new Point(7.5, 125), new Point(7.5, 35));
+               new GUIWire(submodelModifiable, R, Rxor.getPin("A"));
+               new GUIWire(submodelModifiable, RN, Rxor.getPin("B"));
+               new GUIWire(submodelModifiable, S, Sxor.getPin("A"));
+               new GUIWire(submodelModifiable, SN, Sxor.getPin("B"));
+               new GUIWire(submodelModifiable, FN, Fxor.getPin("B"), new Point(130, 375), new Point(130, 85));
+               new GUIWire(submodelModifiable, L, Fsel.getPin("S0"), new Point(87.5, 425), new Point(87.5, 75));
+               new GUIWire(submodelModifiable, Cinand.getPin("Y"), add.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, Rxor.getPin("Y"), cpRXored, new Point(50, 195));
+               new GUIWire(submodelModifiable, cpRXored, add.getPin("B"), new Point(50, 35));
+               new GUIWire(submodelModifiable, cpRXored, nand.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, Sxor.getPin("Y"), cpSXored, new Point(55, 295));
+               new GUIWire(submodelModifiable, cpSXored, add.getPin("C"), new Point(55, 45));
+               new GUIWire(submodelModifiable, cpSXored, nand.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, add.getPin("Y"), Fsel.getPin("I0"), new Point(100, 25), new Point(100, 65), new Point(85, 65),
+                               new Point(85, 85));
+               new GUIWire(submodelModifiable, add.getPin("Z"), Coutand.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nand.getPin("Y"), Fsel.getPin("I1"), new Point(82.5, 65), new Point(82.5, 95));
+               new GUIWire(submodelModifiable, Fsel.getPin("Y"), Fxor.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, Coutand.getPin("Y"), Cout, new Point[0]);
+               new GUIWire(submodelModifiable, Fxor.getPin("Y"), F, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUOneBit.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901ALUOneBit(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java
new file mode 100644 (file)
index 0000000..fbdaeab
--- /dev/null
@@ -0,0 +1,157 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901DestDecode extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901DestDecode(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901DestDecode(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901DestDecode", name);
+               setSubmodelScale(.25);
+               setInputPins("I8", "I7", "I6");
+               setOutputPins("NSH", "RSH", "RAMWE", "YF", "LSH", "QWE");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I8 = getSubmodelPin("I8");
+               Pin I7 = getSubmodelPin("I7");
+               Pin I6 = getSubmodelPin("I6");
+               Pin NSH = getSubmodelPin("NSH");
+               Pin RSH = getSubmodelPin("RSH");
+               Pin RAMWE = getSubmodelPin("RAMWE");
+               Pin YF = getSubmodelPin("YF");
+               Pin LSH = getSubmodelPin("LSH");
+               Pin QWE = getSubmodelPin("QWE");
+
+               GUINandGate notI8 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notI7 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandI8I7 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notI6 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandRSH = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandRAMWE = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandI7NotI8 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandLSH = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notRSH = new GUINandGate(submodelModifiable, 1);
+               GUINandGate andI7NotI8 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandQWE = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandYF = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notQWE = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpI81 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI82 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI83 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI71 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI72 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI73 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI6 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI7 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI81 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI82 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNandI8I7 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotRSH = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNandI7NotI81 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNandI7NotI82 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI6 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNandQWE = new WireCrossPoint(submodelModifiable, 1);
+
+               notI8.moveTo(15, 10);
+               notI7.moveTo(15, 50);
+               nandI8I7.moveTo(15, 90);
+               notI6.moveTo(15, 150);
+               nandRSH.moveTo(50, 10);
+               nandRAMWE.moveTo(50, 50);
+               nandI7NotI8.moveTo(50, 90);
+               nandLSH.moveTo(50, 130);
+               notRSH.moveTo(80, 10);
+               andI7NotI8.moveTo(80, 90);
+               nandQWE.moveTo(80, 145);
+               nandYF.moveTo(110, 105);
+               notQWE.moveTo(115, 210);
+               cpI81.moveCenterTo(5, 20);
+               cpI82.moveCenterTo(5, 15);
+               cpI83.moveCenterTo(5, 25);
+               cpI71.moveCenterTo(10, 60);
+               cpI72.moveCenterTo(10, 65);
+               cpI73.moveCenterTo(10, 105);
+               cpI6.moveCenterTo(5, 155);
+               cpNotI7.moveCenterTo(40, 60);
+               cpNotI81.moveCenterTo(45, 20);
+               cpNotI82.moveCenterTo(45, 55);
+               cpNandI8I7.moveCenterTo(40, 135);
+               cpNotRSH.moveCenterTo(75, 20);
+               cpNandI7NotI81.moveCenterTo(75, 100);
+               cpNandI7NotI82.moveCenterTo(75, 105);
+               cpNotI6.moveCenterTo(75, 160);
+               cpNandQWE.moveCenterTo(110, 215);
+
+               new GUIWire(submodelModifiable, I8, cpI81, new Point[0]);
+               new GUIWire(submodelModifiable, cpI81, cpI82, new Point[0]);
+               new GUIWire(submodelModifiable, cpI81, cpI83, new Point[0]);
+               new GUIWire(submodelModifiable, cpI82, notI8.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI83, notI8.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, I7, cpI71, new Point[0]);
+               new GUIWire(submodelModifiable, cpI71, notI7.getPin("A"), new Point(10, 55));
+               new GUIWire(submodelModifiable, cpI71, cpI72, new Point[0]);
+               new GUIWire(submodelModifiable, cpI72, notI7.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI72, cpI73, new Point[0]);
+               new GUIWire(submodelModifiable, cpI73, nandI8I7.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI83, nandI8I7.getPin("A"), new Point(5, 95));
+               new GUIWire(submodelModifiable, I6, cpI6, new Point(5, 100));
+               new GUIWire(submodelModifiable, cpI6, notI6.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI6, notI6.getPin("B"), new Point(5, 165));
+               new GUIWire(submodelModifiable, cpI82, nandRSH.getPin("A"), new Point(5, 5), new Point(40, 5), new Point(40, 15));
+               new GUIWire(submodelModifiable, notI7.getPin("Y"), cpNotI7, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI7, nandRSH.getPin("B"), new Point(40, 25));
+               new GUIWire(submodelModifiable, cpNotI7, nandRAMWE.getPin("B"), new Point(40, 65));
+               new GUIWire(submodelModifiable, notI8.getPin("Y"), cpNotI81, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI81, NSH, new Point(45, 5), new Point(135, 5), new Point(135, 20));
+               new GUIWire(submodelModifiable, cpNotI81, cpNotI82, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI82, nandRAMWE.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI82, nandI7NotI8.getPin("A"), new Point(45, 95));
+               new GUIWire(submodelModifiable, cpI73, nandI7NotI8.getPin("B"), new Point(10, 115), new Point(45, 115), new Point(45, 105));
+               new GUIWire(submodelModifiable, nandI8I7.getPin("Y"), cpNandI8I7, new Point(40, 100));
+               new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("B"), new Point(40, 145));
+               new GUIWire(submodelModifiable, nandRSH.getPin("Y"), cpNotRSH, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("A"), new Point(75, 15));
+               new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("B"), new Point(75, 25));
+               new GUIWire(submodelModifiable, nandRAMWE.getPin("Y"), RAMWE, new Point(125, 60), new Point(125, 100));
+               new GUIWire(submodelModifiable, nandI7NotI8.getPin("Y"), cpNandI7NotI81, new Point[0]);
+               new GUIWire(submodelModifiable, cpNandI7NotI81, andI7NotI8.getPin("A"), new Point(75, 95));
+               new GUIWire(submodelModifiable, cpNandI7NotI81, cpNandI7NotI82, new Point[0]);
+               new GUIWire(submodelModifiable, cpNandI7NotI82, andI7NotI8.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, nandLSH.getPin("Y"), LSH, new Point(125, 140), new Point(125, 180));
+               new GUIWire(submodelModifiable, cpNandI7NotI82, nandQWE.getPin("A"), new Point(75, 150));
+               new GUIWire(submodelModifiable, notI6.getPin("Y"), cpNotI6, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI6, nandQWE.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, notRSH.getPin("Y"), RSH, new Point(130, 20), new Point(130, 60));
+               new GUIWire(submodelModifiable, andI7NotI8.getPin("Y"), nandYF.getPin("A"));
+               new GUIWire(submodelModifiable, cpNotI6, nandYF.getPin("B"), new Point(75, 170), new Point(105, 170), new Point(105, 120));
+               new GUIWire(submodelModifiable, nandQWE.getPin("Y"), cpNandQWE, new Point(110, 155));
+               new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("B"), new Point(110, 225));
+               new GUIWire(submodelModifiable, nandYF.getPin("Y"), YF);
+               new GUIWire(submodelModifiable, notQWE.getPin("Y"), QWE, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901DestDecode.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901DestDecode(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java
new file mode 100644 (file)
index 0000000..efae9af
--- /dev/null
@@ -0,0 +1,154 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdff;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent
+{
+       private GUIdff dff1;
+       private GUIdff dff2;
+       private GUIdff dff3;
+       private GUIdff dff4;
+
+       public GUIAm2901QReg(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901QReg(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "GUIAm2901QReg", name);
+               setSubmodelScale(.4);
+               setInputPins("C", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("Q1", "Q2", "Q3", "Q4");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin C = getSubmodelPin("C");
+               Pin WE = getSubmodelPin("WE");
+               Pin D1 = getSubmodelPin("D1");
+               Pin D2 = getSubmodelPin("D2");
+               Pin D3 = getSubmodelPin("D3");
+               Pin D4 = getSubmodelPin("D4");
+               Pin Q1 = getSubmodelPin("Q1");
+               Pin Q2 = getSubmodelPin("Q2");
+               Pin Q3 = getSubmodelPin("Q3");
+               Pin Q4 = getSubmodelPin("Q4");
+
+               GUIand and = new GUIand(submodelModifiable);
+               dff1 = new GUIdff(submodelModifiable);
+               dff2 = new GUIdff(submodelModifiable);
+               dff3 = new GUIdff(submodelModifiable);
+               dff4 = new GUIdff(submodelModifiable);
+
+               WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
+
+               and.moveTo(5, 15);
+               dff1.moveTo(50, 7.5);
+               dff2.moveTo(50, 32.5);
+               dff3.moveTo(50, 57.5);
+               dff4.moveTo(50, 82.5);
+               cpC1.moveCenterTo(42.5, 20);
+               cpC2.moveCenterTo(42.5, 37.5);
+               cpC3.moveCenterTo(42.5, 62.5);
+
+               new GUIWire(submodelModifiable, C, and.getPin("A"));
+               new GUIWire(submodelModifiable, WE, and.getPin("B"));
+               new GUIWire(submodelModifiable, and.getPin("Y"), cpC1, new Point[0]);
+               new GUIWire(submodelModifiable, cpC1, dff1.getPin("C"), new Point(42.5, 12.5));
+               new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
+               new GUIWire(submodelModifiable, cpC2, dff2.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, cpC2, cpC3, new Point[0]);
+               new GUIWire(submodelModifiable, cpC3, dff3.getPin("C"), new Point[0]);
+               new GUIWire(submodelModifiable, cpC3, dff4.getPin("C"), new Point(42.5, 87.5));
+               new GUIWire(submodelModifiable, D1, dff1.getPin("D"), new Point(17.5, 62.5), new Point(17.5, 42.5), new Point(45, 42.5),
+                               new Point(45, 22.5));
+               new GUIWire(submodelModifiable, D2, dff2.getPin("D"), new Point(22.5, 87.5), new Point(22.5, 47.5));
+               new GUIWire(submodelModifiable, D3, dff3.getPin("D"), new Point(27.5, 112.5), new Point(27.5, 72.5));
+               new GUIWire(submodelModifiable, D4, dff4.getPin("D"), new Point(32.5, 137.5), new Point(32.5, 97.5));
+               new GUIWire(submodelModifiable, dff1.getPin("Q"), Q1, new Point[0]);
+               new GUIWire(submodelModifiable, dff2.getPin("Q"), Q2, new Point[0]);
+               new GUIWire(submodelModifiable, dff3.getPin("Q"), Q3, new Point[0]);
+               new GUIWire(submodelModifiable, dff4.getPin("Q"), Q4, new Point[0]);
+
+               addAtomicHighLevelStateID("q1");
+               addAtomicHighLevelStateID("q2");
+               addAtomicHighLevelStateID("q3");
+               addAtomicHighLevelStateID("q4");
+               addAtomicHighLevelStateID("q");
+       }
+
+       @Override
+       public void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "q1":
+                       dff1.setHighLevelState("q", newState);
+                       break;
+               case "q2":
+                       dff2.setHighLevelState("q", newState);
+                       break;
+               case "q3":
+                       dff3.setHighLevelState("q", newState);
+                       break;
+               case "q4":
+                       dff4.setHighLevelState("q", newState);
+                       break;
+               case "q":
+                       BitVector newStateCasted = (BitVector) newState;
+                       setHighLevelState("q1", newStateCasted.getLSBit(0));
+                       setHighLevelState("q2", newStateCasted.getLSBit(1));
+                       setHighLevelState("q3", newStateCasted.getLSBit(2));
+                       setHighLevelState("q4", newStateCasted.getLSBit(3));
+                       break;
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       @Override
+       public Object getAtomicHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "q1":
+                       return dff1.getHighLevelState("q");
+               case "q2":
+                       return dff2.getHighLevelState("q");
+               case "q3":
+                       return dff3.getHighLevelState("q");
+               case "q4":
+                       return dff4.getHighLevelState("q");
+               case "q":
+                       Bit q1 = (Bit) getHighLevelState("q1");
+                       Bit q2 = (Bit) getHighLevelState("q2");
+                       Bit q3 = (Bit) getHighLevelState("q3");
+                       Bit q4 = (Bit) getHighLevelState("q4");
+                       return BitVector.of(q4, q3, q2, q1);
+               default:
+                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
+                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+               }
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901QReg.class.getCanonicalName(), (m, p, n) -> new GUIAm2901QReg(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java
new file mode 100644 (file)
index 0000000..dbe3a76
--- /dev/null
@@ -0,0 +1,163 @@
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901SourceDecode extends SimpleRectangularSubmodelComponent
+{
+       public GUIAm2901SourceDecode(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIAm2901SourceDecode(ViewModelModifiable model, String name)
+       {
+               super(model, 1, "Am2901SourceDecode", name);
+               setSubmodelScale(.25);
+               setInputPins("I2", "I1", "I0");
+               setOutputPins("SQ", "RA", "SB", "SA", "RD");
+               initSubmodelComponents();
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents()
+       {
+               Pin I2 = getSubmodelPin("I2");
+               Pin I1 = getSubmodelPin("I1");
+               Pin I0 = getSubmodelPin("I0");
+               Pin SQ = getSubmodelPin("SQ");
+               Pin RA = getSubmodelPin("RA");
+               Pin SB = getSubmodelPin("SB");
+               Pin SA = getSubmodelPin("SA");
+               Pin RD = getSubmodelPin("RD");
+
+               GUINandGate notI2 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notI1 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate notI0 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand21 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand22 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand23 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand24 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand25 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand31 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand32 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand33 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand34 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand35 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand41 = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nand42 = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpI21 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI22 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI23 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI1 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI01 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpI02 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI2 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI11 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI12 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI13 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNotI0 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNand22 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNand23 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNand24 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNand31 = new WireCrossPoint(submodelModifiable, 1);
+               WireCrossPoint cpNand35 = new WireCrossPoint(submodelModifiable, 1);
+
+               notI2.moveTo(10, 10);
+               notI1.moveTo(10, 50);
+               notI0.moveTo(10, 90);
+               nand21.moveTo(40, 10);
+               nand22.moveTo(40, 50);
+               nand23.moveTo(40, 90);
+               nand24.moveTo(40, 130);
+               nand25.moveTo(40, 170);
+               nand31.moveTo(70, 10);
+               nand32.moveTo(70, 50);
+               nand33.moveTo(70, 90);
+               nand34.moveTo(70, 130);
+               nand35.moveTo(70, 170);
+               nand41.moveTo(100, 10);
+               nand42.moveTo(100, 170);
+               cpI21.moveCenterTo(5, 20);
+               cpI22.moveCenterTo(7.5, 20);
+               cpI23.moveCenterTo(5, 145);
+               cpI1.moveCenterTo(7.5, 60);
+               cpI01.moveCenterTo(7.5, 100);
+               cpI02.moveCenterTo(7.5, 105);
+               cpNotI2.moveCenterTo(32.5, 55);
+               cpNotI11.moveCenterTo(35, 60);
+               cpNotI12.moveCenterTo(35, 65);
+               cpNotI13.moveCenterTo(35, 135);
+               cpNotI0.moveCenterTo(37.5, 100);
+               cpNand22.moveCenterTo(65, 60);
+               cpNand23.moveCenterTo(65, 100);
+               cpNand24.moveCenterTo(65, 140);
+               cpNand31.moveCenterTo(95, 20);
+               cpNand35.moveCenterTo(95, 180);
+
+               new GUIWire(submodelModifiable, I2, cpI21, new Point[0]);
+               new GUIWire(submodelModifiable, cpI21, nand21.getPin("A"), new Point(5, 5), new Point(35, 5), new Point(35, 15));
+               new GUIWire(submodelModifiable, cpI21, cpI22, new Point[0]);
+               new GUIWire(submodelModifiable, cpI22, notI2.getPin("A"), new Point(7.5, 15));
+               new GUIWire(submodelModifiable, cpI22, notI2.getPin("B"), new Point(7.5, 25));
+               new GUIWire(submodelModifiable, cpI21, cpI23, new Point[0]);
+               new GUIWire(submodelModifiable, cpI23, nand24.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI23, nand35.getPin("B"), new Point(5, 195), new Point(65, 195), new Point(65, 185));
+               new GUIWire(submodelModifiable, I1, cpI1, new Point[0]);
+               new GUIWire(submodelModifiable, cpI1, notI1.getPin("A"), new Point(7.5, 55));
+               new GUIWire(submodelModifiable, cpI1, notI1.getPin("B"), new Point(7.5, 65));
+               new GUIWire(submodelModifiable, I0, cpI01, new Point[0]);
+               new GUIWire(submodelModifiable, cpI01, notI0.getPin("A"), new Point(7.5, 95));
+               new GUIWire(submodelModifiable, cpI01, cpI02, new Point[0]);
+               new GUIWire(submodelModifiable, cpI02, notI0.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpI02, nand23.getPin("B"), new Point(7.5, 112.5), new Point(32.5, 112.5), new Point(32.5, 105));
+               new GUIWire(submodelModifiable, notI2.getPin("Y"), cpNotI2, new Point(32.5, 20));
+               new GUIWire(submodelModifiable, cpNotI2, nand22.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI2, nand23.getPin("A"), new Point(32.5, 95));
+               new GUIWire(submodelModifiable, notI1.getPin("Y"), cpNotI11, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI11, nand21.getPin("B"), new Point(35, 25));
+               new GUIWire(submodelModifiable, cpNotI11, cpNotI12, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI12, nand22.getPin("B"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI12, cpNotI13, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI13, nand24.getPin("A"), new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI13, nand25.getPin("A"), new Point(35, 175));
+               new GUIWire(submodelModifiable, notI0.getPin("Y"), cpNotI0, new Point[0]);
+               new GUIWire(submodelModifiable, cpNotI0, nand31.getPin("B"), new Point(37.5, 35), new Point(65, 35), new Point(65, 25));
+               new GUIWire(submodelModifiable, cpNotI0, nand25.getPin("B"), new Point(37.5, 185));
+               new GUIWire(submodelModifiable, nand21.getPin("Y"), nand31.getPin("A"));
+               new GUIWire(submodelModifiable, nand22.getPin("Y"), cpNand22, new Point[0]);
+               new GUIWire(submodelModifiable, cpNand22, nand32.getPin("A"), new Point(65, 55));
+               new GUIWire(submodelModifiable, cpNand22, nand32.getPin("B"), new Point(65, 65));
+               new GUIWire(submodelModifiable, nand23.getPin("Y"), cpNand23, new Point[0]);
+               new GUIWire(submodelModifiable, cpNand23, nand33.getPin("A"), new Point(65, 95));
+               new GUIWire(submodelModifiable, cpNand23, nand33.getPin("B"), new Point(65, 105));
+               new GUIWire(submodelModifiable, nand24.getPin("Y"), cpNand24, new Point[0]);
+               new GUIWire(submodelModifiable, cpNand24, nand34.getPin("A"), new Point(65, 135));
+               new GUIWire(submodelModifiable, cpNand24, nand34.getPin("B"), new Point(65, 145));
+               new GUIWire(submodelModifiable, nand25.getPin("Y"), nand35.getPin("A"));
+               new GUIWire(submodelModifiable, nand31.getPin("Y"), cpNand31, new Point[0]);
+               new GUIWire(submodelModifiable, cpNand31, nand41.getPin("A"), new Point(95, 15));
+               new GUIWire(submodelModifiable, cpNand31, nand41.getPin("B"), new Point(95, 25));
+               new GUIWire(submodelModifiable, nand32.getPin("Y"), RA, new Point[0]);
+               new GUIWire(submodelModifiable, nand33.getPin("Y"), SB, new Point[0]);
+               new GUIWire(submodelModifiable, nand34.getPin("Y"), SA, new Point[0]);
+               new GUIWire(submodelModifiable, nand35.getPin("Y"), cpNand35, new Point[0]);
+               new GUIWire(submodelModifiable, cpNand35, nand42.getPin("A"), new Point(95, 175));
+               new GUIWire(submodelModifiable, cpNand35, nand42.getPin("B"), new Point(95, 185));
+               new GUIWire(submodelModifiable, nand41.getPin("Y"), SQ, new Point[0]);
+               new GUIWire(submodelModifiable, nand42.getPin("Y"), RD, new Point[0]);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901SourceDecode.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAm2901SourceDecode(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java
new file mode 100644 (file)
index 0000000..03790ec
--- /dev/null
@@ -0,0 +1,298 @@
+package net.mograsim.logic.ui.am2900;
+
+import static net.mograsim.logic.ui.am2900.TestUtil.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Register.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.awt.Point;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+
+import net.mograsim.logic.ui.am2900.TestableAm2901.Register;
+
+@DisplayName("Am2901 Tests")
+@TestMethodOrder(OrderAnnotation.class)
+public class Am2901Test
+{
+       private TestableAm2901 am2901;
+
+       @BeforeEach
+       void initialize()
+       {
+               createAndSetup();
+               setInputsToZero();
+       }
+
+       void createAndSetup()
+       {
+               am2901 = new TestableAm2901Impl();
+               am2901.setup();
+       }
+
+       void setRegistersToZero()
+       {
+               setInputsToZero();
+               for (Register r : Register.values())
+               {
+                       setRegisterToZero(r);
+               }
+       }
+
+       void setRegisterToZero(Register r)
+       {
+               am2901.setD("0000");
+               am2901.setSrc(DZ);
+               am2901.setFunc(AND);
+               setRegOutput(r);
+
+               am2901.assertFullCycleSuccess();
+       }
+
+       void setRegOutput(Register r)
+       {
+               if (r == Q)
+               {
+                       am2901.setDest(QREG);
+               } else
+               {
+                       am2901.setReg_B(r.toBitString());
+                       am2901.setDest(RAMF);
+               }
+       }
+
+       void setInputsToZero()
+       {
+               am2901.setCarryIn("0");
+               am2901.setQ_0("0");
+               am2901.setQ_3("0");
+               am2901.setRAM_0("0");
+               am2901.setRAM_3("0");
+               am2901.setReg_A("0000");
+               am2901.setReg_B("0000");
+               am2901.setD("0000");
+               am2901.setSrc(AB);
+               am2901.setFunc(ADD);
+               am2901.setDest(QREG);
+//             am2901.setNotOutEnable("0"); TODO
+               am2901.clockOn(true);
+               am2901.assertRunSuccess();
+       }
+
+       @ParameterizedTest(name = "{0}")
+       @Order(1)
+       @DisplayName("Direct / high level access")
+       @EnumSource(Register.class)
+       void testDirectAccess(Register r)
+       {
+               assertEquals("UUUU", am2901.getDirectly(r));
+
+               am2901.setDirectly(r, "1011");
+
+               assertEquals("1011", am2901.getDirectly(r));
+       }
+
+       @ParameterizedTest(name = "{0}")
+       @Order(2)
+       @DisplayName("Setting each register to 0")
+       @EnumSource(Register.class)
+       void testSetToZero(Register r)
+       {
+               assertEquals("UUUU", am2901.getDirectly(r));
+
+               setRegisterToZero(r);
+
+               assertEquals("0000", am2901.getDirectly(r));
+               assertEquals("0000", am2901.getY());
+               assertEquals("0", am2901.getCarryOut());
+               assertEquals("0", am2901.getOverflow());
+               assertEquals("0", am2901.getSign());
+               assertEquals("1", am2901.getZero());
+       }
+
+       @Test
+       @Order(3)
+       @DisplayName("Setting all registers to 0")
+       void testSetAllToZero()
+       {
+               setRegistersToZero();
+
+               assertEquals("0000", am2901.getY());
+               assertEquals("0", am2901.getCarryOut());
+               assertEquals("0", am2901.getOverflow());
+               assertEquals("0", am2901.getSign());
+               assertEquals("1", am2901.getZero());
+               assertEquals("0", am2901.getQ_0());
+               assertEquals("0", am2901.getQ_3());
+               assertEquals("0", am2901.getRAM_0());
+               assertEquals("0", am2901.getRAM_3());
+
+               assertAll("register values", Register.stream().map(r -> () ->
+               {
+                       assertEquals("0000", am2901.getDirectly(r), r.name());
+               }));
+       }
+
+       @Test
+       @Order(4)
+       @DisplayName("ADD operation")
+       void testADD()
+       {
+               am2901.setSrc(DA);
+               am2901.setFunc(ADD);
+               am2901.setDest(NOP);
+               am2901.setReg_A(r0.toBitString());
+
+               assertAll(getAll4BitPairs().map(xy -> () ->
+               {
+                       am2901.setDirectly(r0, to4bitBin(xy.x));
+                       am2901.setD(to4bitBin(xy.y));
+
+                       am2901.assertFullCycleSuccess();
+
+                       int res32Bit = xy.x + xy.y;
+                       int res4Bit = res32Bit & 0b1111;
+                       int res32Bit_sgn = signed4ToSigned32(xy.x) + signed4ToSigned32(xy.y);
+                       int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
+
+                       assertAll("Result of " + xy.x + " + " + xy.y + " = " + res32Bit,
+                                       () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), "    Y"),
+                                       () -> assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), "    F=0"),
+                                       () -> assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), "    F3"),
+                                       () -> assertEquals(to1bitBin(res32Bit > 15), am2901.getCarryOut(), "    Cn+4"),
+                                       () -> assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), "    OVR"));
+               }));
+       }
+
+       @Test
+       @Order(4)
+       @DisplayName("AND operation")
+       void testAND()
+       {
+               am2901.setSrc(DA);
+               am2901.setFunc(AND);
+               am2901.setDest(NOP);
+               am2901.setReg_A(r0.toBitString());
+
+               assertAll(getAll4BitPairs().map(xy -> () ->
+               {
+                       am2901.setDirectly(r0, to4bitBin(xy.x));
+                       am2901.setD(to4bitBin(xy.y));
+
+                       am2901.assertFullCycleSuccess();
+
+                       int res32Bit = xy.x & xy.y;
+
+                       assertAll("Result of " + xy.x + " & " + xy.y + " = " + res32Bit,
+                                       () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), "    Y"),
+                                       () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), "    F=0"),
+                                       () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), "    F3")
+//                                     () -> assertEquals(to1bitBin(res32Bit), am2901.getCarryOut(), "    Cn+4"), // TODO
+//                                     () -> assertEquals(to1bitBin(res32Bit), am2901.getOverflow(), "    OVR") // TODO
+                       );
+               }));
+       }
+
+       @Test
+       @Order(4)
+       @DisplayName("OR operation")
+       void testOR()
+       {
+               am2901.setSrc(DA);
+               am2901.setFunc(OR);
+               am2901.setDest(NOP);
+               am2901.setReg_A(r0.toBitString());
+
+               assertAll(getAll4BitPairs().map(xy -> () ->
+               {
+                       am2901.setDirectly(r0, to4bitBin(xy.x));
+                       am2901.setD(to4bitBin(xy.y));
+
+                       am2901.assertFullCycleSuccess();
+
+                       int res32Bit = xy.x | xy.y;
+
+                       assertAll("Result of " + xy.x + " | " + xy.y + " = " + res32Bit,
+                                       () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), "    Y"),
+                                       () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), "    F=0"),
+                                       () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), "    F3")
+//                                     () -> assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), "    Cn+4"), // TODO
+//                                     () -> assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), "    OVR") // TODO
+                       );
+               }));
+       }
+
+       @Test
+       @Order(4)
+       @DisplayName("XOR operation")
+       void testXOR()
+       {
+               am2901.setSrc(DA);
+               am2901.setFunc(EXOR);
+               am2901.setDest(NOP);
+               am2901.setReg_A(r0.toBitString());
+
+               assertAll(getAll4BitPairs().map(xy -> () ->
+               {
+                       am2901.setDirectly(r0, to4bitBin(xy.x));
+                       am2901.setD(to4bitBin(xy.y));
+
+                       am2901.assertFullCycleSuccess();
+
+                       int res32Bit = xy.x ^ xy.y;
+
+                       assertAll("Result of " + xy.x + " ^ " + xy.y + " = " + res32Bit,
+                                       () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), "    Y"),
+                                       () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), "    F=0"),
+                                       () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), "    F3"));
+               }));
+       }
+
+       @Test
+       @Order(4)
+       @DisplayName("SUB operation")
+       void testSUB()
+       {
+               am2901.setSrc(DA);
+               am2901.setCarryIn("1");
+               am2901.setFunc(SUBR);
+               am2901.setDest(NOP);
+               am2901.setReg_A(r0.toBitString());
+
+               assertAll(getAll4BitPairs().map(xy -> () ->
+               {
+                       am2901.setDirectly(r0, to4bitBin(xy.x));
+                       am2901.setD(to4bitBin(xy.y));
+
+                       am2901.assertFullCycleSuccess();
+
+                       int res32Bit = xy.x - xy.y;
+                       int res4Bit = res32Bit & 0b1111;
+                       int res32Bit_sgn = signed4ToSigned32(xy.x) - signed4ToSigned32(xy.y);
+                       int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
+
+                       assertAll("Result of " + xy.x + " - " + xy.y + " = " + res32Bit,
+                                       () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), "    Y"),
+                                       () -> assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), "    F=0"),
+                                       () -> assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), "    F3"),
+                                       () -> assertEquals(to1bitBin(xy.x >= xy.y), am2901.getCarryOut(), "    Cn+4"),
+                                       () -> assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), "    OVR"));
+               }));
+       }
+
+       static Stream<Point> getAll4BitPairs()
+       {
+               return IntStream.range(0, 16).boxed().flatMap(x -> IntStream.range(0, 16).mapToObj(y -> new Point(x, y)));
+       }
+}
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java
new file mode 100644 (file)
index 0000000..7c68cc1
--- /dev/null
@@ -0,0 +1,98 @@
+package net.mograsim.logic.ui.am2900;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.atomic.GUIAndGate;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.TextComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.util.ModellingTool;
+
+public class Am2901Testbench
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
+       }
+
+       public static void createTestbench(ViewModelModifiable model)
+       {
+               GUIComponent comp = IndirectGUIComponentCreator.createComponent(model, "GUIAm2901");
+               ModellingTool tool = ModellingTool.createFor(model);
+
+               comp.moveTo(240, 0);
+
+               GUIManualSwitch enable = new GUIManualSwitch(model);
+               WireCrossPoint wcp0 = new WireCrossPoint(model, 1);
+               GUINotGate not1 = new GUINotGate(model, 1);
+               GUINotGate not2 = new GUINotGate(model, 1);
+               GUINotGate not3 = new GUINotGate(model, 1);
+               GUIAndGate and = new GUIAndGate(model, 1);
+               tool.connect(wcp0, enable, "");
+               tool.connect(wcp0, and, "A");
+               tool.connect(wcp0, not1, "A");
+               tool.connect(not1, not2, "Y", "A");
+               tool.connect(not2, not3, "Y", "A");
+               tool.connect(not3, and, "Y", "B");
+               enable.moveTo(20, -32.5);
+               wcp0.moveTo(35, -26);
+               not1.moveTo(50, -20);
+               not2.moveTo(80, -20);
+               not3.moveTo(110, -20);
+               and.moveTo(135, -30);
+               Pin last = and.getPin("Y");
+
+               // guess which pins are outputs and which are inputs
+               // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+               List<String> inputPinNames = new ArrayList<>();
+               List<String> outputPinNames = new ArrayList<>();
+               for (Pin p : comp.getPins().values())
+                       if (p.getRelX() == 0)
+                               inputPinNames.add(p.name);
+                       else
+                               outputPinNames.add(p.name);
+
+               for (int i = 0; i < inputPinNames.size(); i++)
+               {
+                       double x = 55 + 70 * (i % 2);
+                       double y = 10 * i;
+
+                       WireCrossPoint wcp = new WireCrossPoint(model, 1);
+                       GUIComponent d_ff = IndirectGUIComponentCreator.createComponent(model, "GUIdff");
+                       GUIManualSwitch sw = new GUIManualSwitch(model);
+
+                       tool.connect(last, wcp);
+                       tool.connect(wcp, d_ff, "C");
+                       tool.connect(sw, d_ff, "", "D");
+                       tool.connect(d_ff, comp, "Q", inputPinNames.get(i));
+                       last = wcp.getPin();
+
+                       TextComponent label = new TextComponent(model, inputPinNames.get(i));
+
+                       sw.moveTo(x, y + 7.5);
+                       wcp.moveTo(160, y);
+                       d_ff.moveTo(170, y);
+                       label.moveTo(x - 25, y + 15);
+               }
+
+               for (int i = 0; i < outputPinNames.size(); i++)
+               {
+                       double x = 300 + 75 * (i % 2);
+                       double y = 10 * i - 2.5;
+                       GUIBitDisplay bd = new GUIBitDisplay(model);
+                       bd.moveTo(x, y);
+                       tool.connect(bd.getInputPin(), comp, outputPinNames.get(i));
+
+                       TextComponent label = new TextComponent(model, outputPinNames.get(i));
+                       label.moveTo(x + 50, y + 8);
+               }
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java
new file mode 100644 (file)
index 0000000..937e566
--- /dev/null
@@ -0,0 +1,84 @@
+package net.mograsim.logic.ui.am2900;
+
+public final class TestUtil
+{
+       private TestUtil()
+       {
+
+       }
+
+       /**
+        * Transforms the last four bits of an int to a string that contains the binary ('1' and '0') representation of the 4 bits
+        * 
+        * @author Christian Femers
+        */
+       public static String to4bitBin(int x)
+       {
+               StringBuilder sb = new StringBuilder(4);
+               sb.append((x & 0b1000) == 0 ? '0' : '1');
+               sb.append((x & 0b0100) == 0 ? '0' : '1');
+               sb.append((x & 0b0010) == 0 ? '0' : '1');
+               sb.append((x & 0b0001) == 0 ? '0' : '1');
+               return sb.toString();
+       }
+
+       /**
+        * Transforms the given boolean to a string that contains the binary ('1' and '0') representation of the bit
+        * 
+        * @author Christian Femers
+        */
+       public static String to1bitBin(boolean bitIsSet)
+       {
+               return bitIsSet ? "1" : "0";
+       }
+
+       /**
+        * Transforms the given int to a string that contains the binary ('1' and '0') representation of the int. "0" is only returned when the
+        * int is equal to zero.
+        * 
+        * @author Christian Femers
+        */
+       public static String to1bitBin(int someInt)
+       {
+               return someInt != 0 ? "1" : "0";
+       }
+
+       /**
+        * Transforms a 4 bit signed integer (-8 to 7) to a int representing the same number. (Adding leading 1-bits if the 4 bit int is
+        * negative)
+        * 
+        * @author Christian Femers
+        */
+       public static int signed4ToSigned32(int signed4bit)
+       {
+               if ((signed4bit & 0b1000) > 0)
+                       return signed4bit | 0xFF_FF_FF_F0;
+               return signed4bit & 0x00_00_00_0F;
+       }
+
+       /**
+        * Transforms a 16 bit signed integer (-32768 to 32767 - a short) to a int representing the same number. (Adding leading 1-bits if the
+        * 16 bit int is negative)
+        * 
+        * @author Christian Femers
+        */
+       public static int signed16ToSigned32(int signed16bit)
+       {
+               return (short) signed16bit;
+       }
+
+       /**
+        * Transforms the last n bits of an int to a string that contains the binary ('1' and '0') representation of the n bits
+        * 
+        * @author Christian Femers
+        */
+       public static String toNbitString(int x, int n)
+       {
+               StringBuilder sb = new StringBuilder(n);
+               for (int i = 0; i < n; i++)
+               {
+                       sb.append((x >> i) & 1);
+               }
+               return sb.reverse().toString();
+       }
+}
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java
new file mode 100644 (file)
index 0000000..ad0a0b8
--- /dev/null
@@ -0,0 +1,131 @@
+package net.mograsim.logic.ui.am2900;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+public interface TestableAm2901
+{
+       void setup();
+
+       Result run();
+
+       void setDest(Am2901_Dest dest);
+
+       void setFunc(Am2901_Func func);
+
+       void setSrc(Am2901_Src src);
+
+       void setReg_A(String val_4_bit);
+
+       void setReg_B(String val_4_bit);
+
+       void setCarryIn(String val_1_bit);
+
+       void setNotOutEnable(String val_1_bit);
+
+       void setD(String val_4_bit);
+
+       void setQ_0(String val_1_bit);
+
+       void setQ_3(String val_1_bit);
+
+       void setRAM_0(String val_1_bit);
+
+       void setRAM_3(String val_1_bit);
+
+       void clockOn(boolean isClockOn);
+
+       void setDirectly(Register r, String val_4_bit);
+
+       String getQ_0();
+
+       String getQ_3();
+
+       String getRAM_0();
+
+       String getRAM_3();
+
+       String getNotP();
+
+       String getNotG();
+
+       String getCarryOut();
+
+       String getSign();
+
+       String getZero();
+
+       String getOverflow();
+
+       String getY();
+
+       String getDirectly(Register r);
+
+       default void assertRunSuccess()
+       {
+               assertEquals(Result.SUCCESS, run());
+       }
+
+       default void assertFullCycleSuccess()
+       {
+               assertRunSuccess();
+               clockOn(false);
+               assertRunSuccess();
+               clockOn(true);
+               assertRunSuccess();
+       }
+
+       public enum Result
+       {
+               SUCCESS, OUT_OF_TIME, ERROR;
+       }
+
+       public enum Am2901_Dest
+       {
+               QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
+
+               public boolean doesShift()
+               {
+                       return ordinal() >= 4;
+               }
+
+               public int getShiftDir()
+               {
+                       return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
+               }
+
+               public int getI7()
+               {
+                       return this.ordinal() >> 1 & 1;
+               }
+       }
+
+       public enum Am2901_Func
+       {
+               ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
+       }
+
+       public enum Am2901_Src
+       {
+               AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
+       }
+
+       public enum Register
+       {
+               r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
+
+               public String toBitString()
+               {
+                       if (this.ordinal() > 0xF)
+                               throw new UnsupportedOperationException();
+                       return TestUtil.to4bitBin(this.ordinal());
+               }
+
+               public static Stream<Register> stream()
+               {
+                       return Arrays.stream(values());
+               }
+       }
+}
diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
new file mode 100644 (file)
index 0000000..7bbc398
--- /dev/null
@@ -0,0 +1,381 @@
+package net.mograsim.logic.ui.am2900;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Queue;
+import java.util.Set;
+import java.util.TreeSet;
+
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.core.types.BitVector.BitVectorMutator;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+
+public class TestableAm2901Impl implements TestableAm2901
+{
+       private GUIComponent am2901;
+       private Timeline timeline;
+       private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
+       private ManualSwitch C;
+       private ManualSwitch Cn;
+       private ManualSwitch D1, D2, D3, D4;
+       private ManualSwitch A0, A1, A2, A3;
+       private ManualSwitch B0, B1, B2, B3;
+       private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
+       private BitDisplay Y1, Y2, Y3, Y4;
+       private BitDisplay F_0, Cn_4, OVR, F3;
+       private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
+
+       private Set<String> wireDebugChangeSet;
+       private boolean debugWires = false;
+       public int debugEventThreshold = 10_000;
+       public int debugEventCount = 500;
+
+       private int eventCounter;
+
+       @Override
+       public Result run()
+       {
+               // Normal execution until completion or eventLimit
+               int eventLimit = debugEventThreshold;
+               eventCounter = 0;
+               debugWires = false;
+               while (eventCounter < eventLimit)
+               {
+                       timeline.executeNext();
+                       if (!timeline.hasNext())
+                       {
+//                             System.out.println("run() took " + eventCounter + " events");
+                               return Result.SUCCESS;
+                       }
+               }
+               // Start debugging if event limit is reached
+               debugWires = true;
+               wireDebugChangeSet = new TreeSet<>();
+               Set<String> oldChangeSet;
+               // observe wire changes to detect, if we are really stuck in an endless loop
+               do
+               {
+                       eventLimit += debugEventCount;
+                       oldChangeSet = wireDebugChangeSet;
+                       wireDebugChangeSet = new TreeSet<>();
+                       while (eventCounter < eventLimit)
+                       {
+                               timeline.executeNext();
+                               if (!timeline.hasNext())
+                               {
+                                       // no endless loop, but more events needed than expected
+                                       System.out.println("run() took longer than expected: " + eventCounter);
+                                       return Result.SUCCESS;
+                               }
+                       }
+               } while (!oldChangeSet.equals(wireDebugChangeSet));
+               // if stuck, abort execution and print wires
+               System.err.print("Problematic Wire updates:");
+               wireDebugChangeSet.forEach(System.out::println);
+               System.err.println("run() failed: " + eventCounter);
+               return Result.OUT_OF_TIME;
+       }
+
+       @SuppressWarnings("unused")
+       @Override
+       public void setup()
+       {
+               // Create view model
+               ViewModelModifiable viewModel = new ViewModelModifiable();
+               // TODO replace with deserialized version as soon as high level states work for deserialized components
+               am2901 = new GUIAm2901(viewModel);
+//             am2901 = IndirectGUIComponentCreator.createComponent(viewModel, "GUIAm2901");
+               // guess which pins are outputs and which are inputs
+               // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+               List<String> inputPinNames = new ArrayList<>();
+               List<String> outputPinNames = new ArrayList<>();
+               for (Pin p : am2901.getPins().values())
+                       if (p.getRelX() == 0)
+                               inputPinNames.add(p.name);
+                       else
+                               outputPinNames.add(p.name);
+               // Get switches
+               HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();
+               for (String id : inputPinNames)
+               {
+                       GUIManualSwitch sw = new GUIManualSwitch(viewModel);
+                       new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());
+                       idSwitchMap.put(id, sw);
+               }
+               // Get displays
+               HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();
+               for (String id : outputPinNames)
+               {
+                       GUIBitDisplay bd = new GUIBitDisplay(viewModel);
+//                     bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));
+                       new GUIWire(viewModel, am2901.getPin(id), bd.getInputPin());
+                       idDisplayMap.put(id, bd);
+               }
+               // Create logic model
+               LogicModelParameters params = new LogicModelParameters();
+               params.gateProcessTime = 50;
+               params.wireTravelTime = 10;
+               timeline = ViewLogicModelAdapter.convert(viewModel, params);
+               // Bind switches/displays to this test class
+               for (var entry : idSwitchMap.entrySet())
+                       setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getManualSwitch());
+               for (var entry : idDisplayMap.entrySet())
+                       setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getBitDisplay());
+
+               // Debug code
+               HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();
+               Queue<ViewModel> modelsToIterate = new LinkedList<>();
+               modelsToIterate.add(viewModel);
+               while (modelsToIterate.size() > 0)
+               {
+                       ViewModel model = modelsToIterate.poll();
+                       wiresIncludingSubmodels.addAll(model.getWires());
+                       for (GUIComponent comp : model.getComponentsByName().values())
+                               if (comp instanceof SubmodelComponent)
+                                       modelsToIterate.offer(((SubmodelComponent) comp).submodel);
+               }
+               wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->
+               {
+                       if (debugWires)
+                       {
+                               wireDebugChangeSet.add(w.toString());
+                       }
+               }));
+               timeline.addEventAddedListener(te -> eventCounter++);
+       }
+
+       @Override
+       public void setDest(Am2901_Dest dest)
+       {
+               var bits = of(dest.ordinal(), 3);
+               I8.setToValueOf(bits.getLSBit(2));
+               I7.setToValueOf(bits.getLSBit(1));
+               I6.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setFunc(Am2901_Func func)
+       {
+               var bits = of(func.ordinal(), 3);
+               I5.setToValueOf(bits.getLSBit(2));
+               I4.setToValueOf(bits.getLSBit(1));
+               I3.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setSrc(Am2901_Src src)
+       {
+               var bits = of(src.ordinal(), 3);
+               I2.setToValueOf(bits.getLSBit(2));
+               I1.setToValueOf(bits.getLSBit(1));
+               I0.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setReg_A(String val_4_bit)
+       {
+               var bits = BitVector.parse(val_4_bit);
+               A3.setToValueOf(bits.getLSBit(3));
+               A2.setToValueOf(bits.getLSBit(2));
+               A1.setToValueOf(bits.getLSBit(1));
+               A0.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setReg_B(String val_4_bit)
+       {
+               var bits = BitVector.parse(val_4_bit);
+               B3.setToValueOf(bits.getLSBit(3));
+               B2.setToValueOf(bits.getLSBit(2));
+               B1.setToValueOf(bits.getLSBit(1));
+               B0.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setCarryIn(String val_1_bit)
+       {
+               Cn.setToValueOf(Bit.parse(val_1_bit));
+       }
+
+       @Override
+       public void setNotOutEnable(String val_1_bit)
+       {
+               throw new UnsupportedOperationException(); // TODO
+       }
+
+       @Override
+       public void setD(String val_4_bit)
+       {
+               var bits = BitVector.parse(val_4_bit);
+               D4.setToValueOf(bits.getLSBit(3));
+               D3.setToValueOf(bits.getLSBit(2));
+               D2.setToValueOf(bits.getLSBit(1));
+               D1.setToValueOf(bits.getLSBit(0));
+       }
+
+       @Override
+       public void setQ_0(String val_1_bit)
+       {
+               IQn.setToValueOf(Bit.parse(val_1_bit));
+       }
+
+       @Override
+       public void setQ_3(String val_1_bit)
+       {
+               IQn_3.setToValueOf(Bit.parse(val_1_bit));
+       }
+
+       @Override
+       public void setRAM_0(String val_1_bit)
+       {
+               IRAMn.setToValueOf(Bit.parse(val_1_bit));
+       }
+
+       @Override
+       public void setRAM_3(String val_1_bit)
+       {
+               IRAMn_3.setToValueOf(Bit.parse(val_1_bit));
+       }
+
+       @Override
+       public void clockOn(boolean isClockOn)
+       {
+               C.setState(isClockOn);
+       }
+
+       @Override
+       public String getQ_0()
+       {
+               return OQn.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getQ_3()
+       {
+               return OQn_3.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getRAM_0()
+       {
+               return ORAMn.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getRAM_3()
+       {
+               return ORAMn_3.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getNotP()
+       {
+               throw new UnsupportedOperationException(); // TODO
+       }
+
+       @Override
+       public String getNotG()
+       {
+               throw new UnsupportedOperationException(); // TODO
+       }
+
+       @Override
+       public String getCarryOut()
+       {
+               return Cn_4.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getSign()
+       {
+               return F3.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getZero()
+       {
+               return F_0.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getOverflow()
+       {
+               return OVR.getDisplayedValue().toString();
+       }
+
+       @Override
+       public String getY()
+       {
+               var y3 = Y4.getDisplayedValue();
+               var y2 = Y3.getDisplayedValue();
+               var y1 = Y2.getDisplayedValue();
+               var y0 = Y1.getDisplayedValue();
+               return y3.concat(y2).concat(y1).concat(y0).toString();
+       }
+
+       private void setField(String name, Object value)
+       {
+               try
+               {
+                       Field f = TestableAm2901Impl.class.getDeclaredField(name);
+                       f.setAccessible(true);
+                       f.set(this, Objects.requireNonNull(value));
+               }
+               catch (Exception e)
+               {
+                       fail(e);
+               }
+       }
+
+       private static BitVector of(int value, int length)
+       {
+               BitVectorMutator mutator = BitVectorMutator.ofLength(length);
+               int val = value;
+               for (int i = length - 1; i >= 0; i--)
+               {
+                       mutator.setMSBit(i, Bit.lastBitOf(val));
+                       val >>>= 1;
+               }
+               return mutator.toBitVector();
+       }
+
+       @Override
+       public void setDirectly(Register r, String val_4_bit)
+       {
+               am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_4_bit));
+       }
+
+       @Override
+       public String getDirectly(Register r)
+       {
+               return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toString();
+       }
+
+       private static String regToStateID(Register r)
+       {
+               if (r == Register.Q)
+                       return "qreg.q";
+               return "regs.c" + r.toBitString() + ".q";
+       }
+}
diff --git a/net.mograsim.logic.model.editor/.classpath b/net.mograsim.logic.model.editor/.classpath
new file mode 100644 (file)
index 0000000..c4b0fff
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+               <attributes>
+                       <attribute name="module" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/net.mograsim.logic.model.editor/.gitignore b/net.mograsim.logic.model.editor/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/net.mograsim.logic.model.editor/.project b/net.mograsim.logic.model.editor/.project
new file mode 100644 (file)
index 0000000..4f792a6
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>net.mograsim.logic.model.editor</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.PluginNature</nature>
+       </natures>
+</projectDescription>
diff --git a/net.mograsim.logic.model.editor/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.model.editor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..e256158
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/META-INF/MANIFEST.MF b/net.mograsim.logic.model.editor/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..40d0654
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/build.properties b/net.mograsim.logic.model.editor/build.properties
new file mode 100644 (file)
index 0000000..d176327
--- /dev/null
@@ -0,0 +1,3 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUI_rsLatch.json b/net.mograsim.logic.model.editor/components/GUI_rsLatch.json
new file mode 100644 (file)
index 0000000..a91b815
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIand.json b/net.mograsim.logic.model.editor/components/GUIand.json
new file mode 100644 (file)
index 0000000..5877291
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIand41.json b/net.mograsim.logic.model.editor/components/GUIand41.json
new file mode 100644 (file)
index 0000000..973a4c9
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIandor414.json b/net.mograsim.logic.model.editor/components/GUIandor414.json
new file mode 100644 (file)
index 0000000..5cadf0f
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIdemux2.json b/net.mograsim.logic.model.editor/components/GUIdemux2.json
new file mode 100644 (file)
index 0000000..5ded84b
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIdff.json b/net.mograsim.logic.model.editor/components/GUIdff.json
new file mode 100644 (file)
index 0000000..55151f8
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIdlatch.json b/net.mograsim.logic.model.editor/components/GUIdlatch.json
new file mode 100644 (file)
index 0000000..69562ce
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIdlatch4.json b/net.mograsim.logic.model.editor/components/GUIdlatch4.json
new file mode 100644 (file)
index 0000000..29f4ac0
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIfulladder.json b/net.mograsim.logic.model.editor/components/GUIfulladder.json
new file mode 100644 (file)
index 0000000..dc4c616
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIhalfadder.json b/net.mograsim.logic.model.editor/components/GUIhalfadder.json
new file mode 100644 (file)
index 0000000..761d6ce
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUImux1.json b/net.mograsim.logic.model.editor/components/GUImux1.json
new file mode 100644 (file)
index 0000000..7ce9002
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUImux1_4.json b/net.mograsim.logic.model.editor/components/GUImux1_4.json
new file mode 100644 (file)
index 0000000..21e2f21
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUInand3.json b/net.mograsim.logic.model.editor/components/GUInand3.json
new file mode 100644 (file)
index 0000000..b3a6300
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUInot4.json b/net.mograsim.logic.model.editor/components/GUInot4.json
new file mode 100644 (file)
index 0000000..7d575c8
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIor4.json b/net.mograsim.logic.model.editor/components/GUIor4.json
new file mode 100644 (file)
index 0000000..d4bcd57
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIor_4.json b/net.mograsim.logic.model.editor/components/GUIor_4.json
new file mode 100644 (file)
index 0000000..86b4413
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIram2.json b/net.mograsim.logic.model.editor/components/GUIram2.json
new file mode 100644 (file)
index 0000000..3cb8583
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIram4.json b/net.mograsim.logic.model.editor/components/GUIram4.json
new file mode 100644 (file)
index 0000000..99f606d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIsel2_4.json b/net.mograsim.logic.model.editor/components/GUIsel2_4.json
new file mode 100644 (file)
index 0000000..219e1b9
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIsel3_4.json b/net.mograsim.logic.model.editor/components/GUIsel3_4.json
new file mode 100644 (file)
index 0000000..1cae789
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIxor.json b/net.mograsim.logic.model.editor/components/GUIxor.json
new file mode 100644 (file)
index 0000000..9e3ec59
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json
new file mode 100644 (file)
index 0000000..7563d83
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUFuncDecode.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUFuncDecode.json
new file mode 100644 (file)
index 0000000..a24476b
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclDecode.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclDecode.json
new file mode 100644 (file)
index 0000000..62d78f1
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json
new file mode 100644 (file)
index 0000000..75c63dd
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUOneBit.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901ALUOneBit.json
new file mode 100644 (file)
index 0000000..b6b05e1
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901DestDecode.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901DestDecode.json
new file mode 100644 (file)
index 0000000..d80d080
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json
new file mode 100644 (file)
index 0000000..6af804d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901SourceDecode.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901SourceDecode.json
new file mode 100644 (file)
index 0000000..e36193d
--- /dev/null
@@ -0,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
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/DialogManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/DialogManager.java
new file mode 100644 (file)
index 0000000..347e622
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java
new file mode 100644 (file)
index 0000000..fac2304
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java
new file mode 100644 (file)
index 0000000..36dcbc7
--- /dev/null
@@ -0,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<ComponentInfo> copyBuffer = new HashSet<>();
+       public final DeserializedSubmodelComponent toBeEdited;
+       public final HandleManager handleManager;
+       final static Map<GUIComponent, String> 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<Handle, Point> 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<ComponentInfo> 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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorCanvas.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorCanvas.java
new file mode 100644 (file)
index 0000000..df6b913
--- /dev/null
@@ -0,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<Handle> 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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorGUI.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorGUI.java
new file mode 100644 (file)
index 0000000..2627d3c
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java
new file mode 100644 (file)
index 0000000..cb66e94
--- /dev/null
@@ -0,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;
+                               }
+
+                       }
+               });
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java
new file mode 100644 (file)
index 0000000..848227b
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Selection.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Selection.java
new file mode 100644 (file)
index 0000000..23135e4
--- /dev/null
@@ -0,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<Handle>
+{
+       private Set<Handle> selection = new HashSet<>();
+
+       public Map<Handle, Point> calculateOffsets()
+       {
+               Map<Handle, Point> 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<Handle> handles)
+       {
+               handles.forEach(h -> h.onSelect());
+               selection.addAll(handles);
+       }
+
+       @Override
+       public Iterator<Handle> iterator()
+       {
+               return selection.iterator();
+       }
+
+       @Override
+       public String toString()
+       {
+               return selection.toString();
+       }
+
+       public boolean isEmpty()
+       {
+               return selection.isEmpty();
+       }
+}
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java
new file mode 100644 (file)
index 0000000..52b634d
--- /dev/null
@@ -0,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<ComponentInfo> 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;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/CornerHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/CornerHandle.java
new file mode 100644 (file)
index 0000000..b56ec2b
--- /dev/null
@@ -0,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;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/Handle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/Handle.java
new file mode 100644 (file)
index 0000000..454f421
--- /dev/null
@@ -0,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<Runnable> 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<ComponentInfo> 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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java
new file mode 100644 (file)
index 0000000..f999c96
--- /dev/null
@@ -0,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<Pin, StaticPinHandle> handlePerPin;
+       private final Map<Pin, InterfacePinHandle> handlePerInterfacePin;
+       private final Map<GUIWire, List<WirePointHandle>> pointHandlesPerWire;
+       private final Map<GUIWire, WireHandle> handlePerWire;
+       private final Set<Handle> handles;
+       private final Set<WirePointHandle> wirePointHandles;
+       private final Map<GUIComponent, ComponentHandle> handlePerComp;
+
+       private final Collection<Consumer<Handle>> handleAddedListeners;
+       private final Collection<Consumer<Handle>> 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<String, GUIComponent> compsByName = model.getComponentsByName();
+                       Set<GUIComponent> 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<WirePointHandle> 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<WirePointHandle> 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<WirePointHandle> getWirePointHandles(GUIWire parent)
+       {
+               return pointHandlesPerWire.get(parent).stream().collect(Collectors.toSet());
+       }
+
+       /**
+        * @return An unmodifiable view of all registered {@link Handle}s
+        */
+       public Collection<Handle> getHandles()
+       {
+               return Collections.unmodifiableCollection(handles);
+       }
+
+       /**
+        * @return An unmodifiable view of all registered {@link StaticPinHandle}s
+        */
+       public Collection<StaticPinHandle> getPinHandles()
+       {
+               return Collections.unmodifiableCollection(handlePerPin.values());
+       }
+       
+       /**
+        * @return An unmodifiable view of all registered {@link InterfacePinHandle}s
+        */
+       public Collection<InterfacePinHandle> getInterfacePinHandles()
+       {
+               return Collections.unmodifiableCollection(handlePerInterfacePin.values());
+       }
+
+       /**
+        * @return An unmodifiable view of all registered {@link ComponentHandle}s
+        */
+       public Collection<ComponentHandle> getComponentHandles()
+       {
+               return Collections.unmodifiableCollection(handlePerComp.values());
+       }
+
+       /**
+        * @return An unmodifiable view of all registered {@link WireHandle}s
+        */
+       public Collection<WireHandle> getWireHandles()
+       {
+               return Collections.unmodifiableCollection(handlePerWire.values());
+       }
+
+       /**
+        * @return An unmodifiable view of all registered {@link WirePointHandle}s
+        */
+       public Collection<WirePointHandle> 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<? extends Handle> 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<Handle> c)
+       {
+               handleAddedListeners.add(c);
+       }
+
+       private void callHandleAddedListeners(Handle added)
+       {
+               handleAddedListeners.forEach(l -> l.accept(added));
+       }
+
+       public void removeHandleAddedListener(Consumer<Handle> c)
+       {
+               handleAddedListeners.remove(c);
+       }
+
+       public void addHandleRemovedListener(Consumer<Handle> c)
+       {
+               handleRemovedListeners.add(c);
+       }
+
+       private void callHandleRemovedListeners(Handle removed)
+       {
+               handleRemovedListeners.forEach(l -> l.accept(removed));
+       }
+
+       public void removeHandleRemovedListener(Consumer<Handle> c)
+       {
+               handleRemovedListeners.remove(c);
+       }
+}
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/InterfacePinHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/InterfacePinHandle.java
new file mode 100644 (file)
index 0000000..9eff5ce
--- /dev/null
@@ -0,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;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/PinHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/PinHandle.java
new file mode 100644 (file)
index 0000000..365bec5
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/StaticPinHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/StaticPinHandle.java
new file mode 100644 (file)
index 0000000..7c3f523
--- /dev/null
@@ -0,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;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WireHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WireHandle.java
new file mode 100644 (file)
index 0000000..dcb9451
--- /dev/null
@@ -0,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<WireClickData> 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<WireClickData> 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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java
new file mode 100644 (file)
index 0000000..2457579
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/BoxSelectionState.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/BoxSelectionState.java
new file mode 100644 (file)
index 0000000..516f8e6
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java
new file mode 100644 (file)
index 0000000..e955d8a
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/EditorState.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/EditorState.java
new file mode 100644 (file)
index 0000000..05e05d8
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/GrabState.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/GrabState.java
new file mode 100644 (file)
index 0000000..7369164
--- /dev/null
@@ -0,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<Handle, Point> 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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/SelectionState.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/SelectionState.java
new file mode 100644 (file)
index 0000000..446635e
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/StateManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/StateManager.java
new file mode 100644 (file)
index 0000000..d4b3fc4
--- /dev/null
@@ -0,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 --git a/net.mograsim.logic.model/.classpath b/net.mograsim.logic.model/.classpath
new file mode 100644 (file)
index 0000000..4a00bec
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+               <attributes>
+                       <attribute name="module" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/net.mograsim.logic.model/.gitignore b/net.mograsim.logic.model/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/net.mograsim.logic.model/.project b/net.mograsim.logic.model/.project
new file mode 100644 (file)
index 0000000..c6d1060
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>net.mograsim.logic.model</name>
+       <comment></comment>
+       <projects>
+               <project>net.mograsim.logic.core</project>
+               <project>SWTZoomableCanvas</project>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.PluginNature</nature>
+       </natures>
+</projectDescription>
diff --git a/net.mograsim.logic.model/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..f8bd225
--- /dev/null
@@ -0,0 +1,456 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+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.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=140
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=140
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/net.mograsim.logic.model/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.model/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..8f2c0a4
--- /dev/null
@@ -0,0 +1,63 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_MoGraSim
+formatter_settings_version=16
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/net.mograsim.logic.model/META-INF/MANIFEST.MF b/net.mograsim.logic.model/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..61a85d1
--- /dev/null
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: net.mograsim.logic.model;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Export-Package: net.mograsim.logic.model,
+ net.mograsim.logic.model.examples,
+ net.mograsim.logic.model.model,
+ net.mograsim.logic.model.model.components,
+ net.mograsim.logic.model.model.components.atomic,
+ net.mograsim.logic.model.model.components.submodels,
+ net.mograsim.logic.model.model.wires,
+ net.mograsim.logic.model.modeladapter,
+ net.mograsim.logic.model.modeladapter.componentadapters,
+ net.mograsim.logic.model.serializing,
+ net.mograsim.logic.model.serializing.snippets,
+ net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers,
+ net.mograsim.logic.model.serializing.snippets.outlinerenderers,
+ net.mograsim.logic.model.serializing.snippets.symbolrenderers,
+ net.mograsim.logic.model.util
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: org.eclipse.swt;bundle-version="3.0.0";visibility:=reexport,
+ SWTZoomableCanvas;bundle-version="1.0.0";visibility:=reexport,
+ net.mograsim.logic.core;bundle-version="0.1.0";visibility:=reexport,
+ com.google.gson;bundle-version="2.8.2";visibility:=reexport,
+ net.mograsim.preferences;bundle-version="0.1.0"
+Automatic-Module-Name: net.mograsim.logic.ui
+Bundle-Vendor: Mograsim Team
diff --git a/net.mograsim.logic.model/OSGI-INF/l10n/bundle.properties b/net.mograsim.logic.model/OSGI-INF/l10n/bundle.properties
new file mode 100644 (file)
index 0000000..4eac282
--- /dev/null
@@ -0,0 +1,3 @@
+#Properties file for net.mograsim.logic.ui
+Bundle-Vendor = Mograsim Team
+Bundle-Name = Mograsim logic user interface
\ No newline at end of file
diff --git a/net.mograsim.logic.model/build.properties b/net.mograsim.logic.model/build.properties
new file mode 100644 (file)
index 0000000..d6642e6
--- /dev/null
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/net.mograsim.logic.model/oldsrc/GUIMerger.java b/net.mograsim.logic.model/oldsrc/GUIMerger.java
new file mode 100644 (file)
index 0000000..64fd0aa
--- /dev/null
@@ -0,0 +1,79 @@
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.logic.components.Merger;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUIMerger extends Merger implements GUIComponent
+{
+       private final int inputCount;
+       private final double height;
+       private final List<ReadEnd> connectedWireEnds;
+       private final List<Point> WireEndConnectionPoints;
+
+       public GUIMerger(ReadWriteEnd union, ReadEnd... inputs)
+       {
+               super(union, inputs);
+
+               List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
+               List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
+
+               this.inputCount = inputs.length;
+               this.height = (inputCount - 1) * 10;
+
+               {
+                       connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
+                       double inputHeight = 0;
+                       for (int i = 0; i < inputCount; i++, inputHeight += 10)
+                               WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
+               }
+
+               connectedWireEndsModifiable.add(union);
+               WireEndConnectionPointsModifiable.add(new Point(20, height / 2));
+
+               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+       }
+
+       @Override
+       public Rectangle getBounds()
+       {
+               return new Rectangle(0, 0, 20, height);
+       }
+
+       @Override
+       public void render(GeneralGC gc)
+       {
+               double inputHeight = 0;
+               for (int i = 0; i < inputCount; i++, inputHeight += 10)
+                       gc.drawLine(0, inputHeight, 10, inputHeight);
+               gc.drawLine(10, 0, 10, height);
+               gc.drawLine(10, height / 2, 20, height / 2);
+       }
+
+       @Override
+       public int getConnectedWireEndsCount()
+       {
+               return connectedWireEnds.size();
+       }
+
+       @Override
+       public ReadEnd getConnectedWireEnd(int connectionIndex)
+       {
+               return connectedWireEnds.get(connectionIndex);
+       }
+
+       @Override
+       public Point getWireEndConnectionPoint(int connectionI)
+       {
+               return WireEndConnectionPoints.get(connectionI);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/oldsrc/GUIMux.java b/net.mograsim.logic.model/oldsrc/GUIMux.java
new file mode 100644 (file)
index 0000000..d004d90
--- /dev/null
@@ -0,0 +1,80 @@
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.logic.components.Mux;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUIMux extends Mux implements GUIComponent
+{
+       private final double height;
+       private final List<ReadEnd> connectedWireEnds;
+       private final List<Point> WireEndConnectionPoints;
+
+       public GUIMux(int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
+       {
+               super(processTime, out, select, inputs);
+
+               double height = inputs.length * 5;
+               if (height < 10)
+                       height = 10;
+               this.height = height;
+
+               List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
+               List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
+
+               connectedWireEndsModifiable.add(out);
+               WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));
+
+               connectedWireEndsModifiable.add(select);
+               WireEndConnectionPointsModifiable.add(new Point(10, 5));
+
+               {
+                       connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
+                       double inputHeightIncrement = (height + 20) / inputs.length;
+                       double inputHeight = inputHeightIncrement / 2;
+                       for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)
+                               WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
+               }
+
+               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+       }
+
+       @Override
+       public Rectangle getBounds()
+       {
+               return new Rectangle(0, 0, 20, height + 20);
+       }
+
+       @Override
+       public void render(GeneralGC gc)
+       {
+               gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });
+       }
+
+       @Override
+       public int getConnectedWireEndsCount()
+       {
+               return connectedWireEnds.size();
+       }
+
+       @Override
+       public ReadEnd getConnectedWireEnd(int connectionIndex)
+       {
+               return connectedWireEnds.get(connectionIndex);
+       }
+
+       @Override
+       public Point getWireEndConnectionPoint(int connectionI)
+       {
+               return WireEndConnectionPoints.get(connectionI);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/oldsrc/GUISplitter.java b/net.mograsim.logic.model/oldsrc/GUISplitter.java
new file mode 100644 (file)
index 0000000..1bff424
--- /dev/null
@@ -0,0 +1,72 @@
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.gui.ViewModel;
+import era.mi.logic.components.Splitter;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUISplitter extends GUIComponent
+{
+       public GUISplitter(ViewModel model)
+       {
+               super(model);
+
+               this.outputCount = outputs.length;
+               this.height = (outputCount - 1) * 10;
+
+               connectedWireEndsModifiable.add(input);
+               WireEndConnectionPointsModifiable.add(new Point(0, height / 2));
+
+               {
+                       connectedWireEndsModifiable.addAll(Arrays.asList(outputs));
+                       double outputHeight = 0;
+                       for (int i = 0; i < outputCount; i++, outputHeight += 10)
+                               WireEndConnectionPointsModifiable.add(new Point(20, outputHeight));
+               }
+
+               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+       }
+
+       @Override
+       public Rectangle getBounds()
+       {
+               return new Rectangle(0, 0, 20, height);
+       }
+
+       @Override
+       public void render(GeneralGC gc)
+       {
+               gc.drawLine(0, height / 2, 10, height / 2);
+               gc.drawLine(10, 0, 10, height);
+               double outputHeight = 0;
+               for (int i = 0; i < outputCount; i++, outputHeight += 10)
+                       gc.drawLine(10, outputHeight, 20, outputHeight);
+       }
+
+       @Override
+       public int getConnectedWireEndsCount()
+       {
+               return connectedWireEnds.size();
+       }
+
+       @Override
+       public ReadEnd getConnectedWireEnd(int connectionIndex)
+       {
+               return connectedWireEnds.get(connectionIndex);
+       }
+
+       @Override
+       public Point getWireEndConnectionPoint(int connectionI)
+       {
+               return WireEndConnectionPoints.get(connectionI);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicExecuter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicExecuter.java
new file mode 100644 (file)
index 0000000..aa36b1c
--- /dev/null
@@ -0,0 +1,111 @@
+package net.mograsim.logic.model;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+import net.mograsim.logic.core.timeline.Timeline;
+
+//TODO maybe move to logic core?
+public class LogicExecuter
+{
+       // TODO replace with LogicModel when it exists
+       private final Timeline timeline;
+
+       private final AtomicBoolean shouldBeRunningLive;
+       private final AtomicBoolean isRunningLive;
+       private final AtomicLong nextExecSimulTime;
+       private final Thread simulationThread;
+
+       public LogicExecuter(Timeline timeline)
+       {
+               this.timeline = timeline;
+
+               timeline.setTimeFunction(System::currentTimeMillis);
+               shouldBeRunningLive = new AtomicBoolean();
+               isRunningLive = new AtomicBoolean();
+               nextExecSimulTime = new AtomicLong();
+               simulationThread = new Thread(() ->
+               {
+                       isRunningLive.set(true);
+                       synchronized (isRunningLive)
+                       {
+                               isRunningLive.notify();
+                       }
+                       try
+                       {
+                               while (shouldBeRunningLive.get())
+                               {
+                                       // always execute to keep timeline from "hanging behind" for too long
+                                       long current = System.currentTimeMillis();
+                                       timeline.executeUntil(timeline.laterThan(current), current + 10);
+                                       long sleepTime;
+                                       if (timeline.hasNext())
+                                               sleepTime = timeline.nextEventTime() - current;
+                                       else
+                                               sleepTime = 10000;
+                                       try
+                                       {
+                                               nextExecSimulTime.set(current + sleepTime);
+                                               if (sleepTime > 0)
+                                                       Thread.sleep(sleepTime);
+                                       }
+                                       catch (@SuppressWarnings("unused") InterruptedException e)
+                                       {// do nothing; it is normal execution flow to be interrupted
+                                       }
+                               }
+                       }
+                       finally
+                       {
+                               isRunningLive.set(false);
+                               synchronized (isRunningLive)
+                               {
+                                       isRunningLive.notify();
+                               }
+                       }
+               });
+               timeline.addEventAddedListener(event ->
+               {
+                       if (isRunningLive.get())
+                               if (Timeline.timeCmp(event.getTiming(), nextExecSimulTime.get()) < 0)
+                                       simulationThread.interrupt();
+               });
+       }
+
+       public void executeNextStep()
+       {
+               timeline.executeNext();
+       }
+
+       public synchronized void startLiveExecution()
+       {
+               if (shouldBeRunningLive.get())
+                       return;
+               shouldBeRunningLive.set(true);
+               simulationThread.start();
+               waitForIsRunning(true);
+       }
+
+       public synchronized void stopLiveExecution()
+       {
+               if (!shouldBeRunningLive.get())
+                       return;
+               shouldBeRunningLive.set(false);
+               simulationThread.interrupt();
+               waitForIsRunning(false);
+       }
+
+       private void waitForIsRunning(boolean expectedState)
+       {
+               while (isRunningLive.get() ^ expectedState)
+                       try
+                       {
+                               synchronized (isRunningLive)
+                               {
+                                       isRunningLive.wait();
+                               }
+                       }
+                       catch (@SuppressWarnings("unused") InterruptedException e)
+                       {// no need to do anything
+                       }
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java
new file mode 100644 (file)
index 0000000..609bf74
--- /dev/null
@@ -0,0 +1,177 @@
+package net.mograsim.logic.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Simulation visualizer canvas.
+ * 
+ * @author Daniel Kirschten
+ */
+public class LogicUICanvas extends ZoomableCanvas
+{
+       private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false;
+
+       private final ViewModel model;
+
+       public LogicUICanvas(Composite parent, int style, ViewModel model)
+       {
+               super(parent, style);
+
+               this.model = model;
+
+               LogicUIRenderer renderer = new LogicUIRenderer(model);
+               addZoomedRenderer(gc ->
+               {
+                       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
+                       renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
+               });
+               model.addRedrawListener(this::redrawThreadsafe);
+
+               addListener(SWT.MouseDown, this::mouseDown);
+
+               if (OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL)
+                       openDebugSetHighLevelStateShell(model);
+       }
+
+       private void mouseDown(Event e)
+       {
+               if (e.button == 1)
+               {
+                       Point click = canvasToWorldCoords(e.x, e.y);
+                       for (GUIComponent component : model.getComponentsByName().values())
+                               if (component.getBounds().contains(click) && component.clicked(click.x, click.y))
+                               {
+                                       redraw();
+                                       break;
+                               }
+               }
+       }
+
+       private void openDebugSetHighLevelStateShell(ViewModel model)
+       {
+               Shell debugShell = new Shell();
+               debugShell.setLayout(new GridLayout(2, false));
+               new Label(debugShell, SWT.NONE).setText("Target component: ");
+               Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
+               componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               List<GUIComponent> componentsByItemIndex = new ArrayList<>();
+               model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+               model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+               recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
+               new Label(debugShell, SWT.NONE).setText("Target state ID: ");
+               Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+               stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               new Label(debugShell, SWT.NONE).setText("Value type: ");
+               Composite radioGroup = new Composite(debugShell, SWT.NONE);
+               radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               GridLayout radioGroupLayout = new GridLayout(2, false);
+               radioGroupLayout.marginHeight = 0;
+               radioGroupLayout.marginWidth = 0;
+               radioGroup.setLayout(radioGroupLayout);
+               Button radioBit = new Button(radioGroup, SWT.RADIO);
+               radioBit.setText("Single bit");
+               Button radioBitVector = new Button(radioGroup, SWT.RADIO);
+               radioBitVector.setText("Bitvector");
+               new Label(debugShell, SWT.NONE).setText("Value string representation: \n(Bit vectors: MSBit...LSBit)");
+               Text valueText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+               valueText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               Button send = new Button(debugShell, SWT.PUSH);
+               send.setText("Send!");
+               Button get = new Button(debugShell, SWT.PUSH);
+               get.setText("Get!");
+               Text output = new Text(debugShell, SWT.READ_ONLY);
+               output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
+               Listener sendAction = e ->
+               {
+                       try
+                       {
+                               int componentIndex = componentSelector.getSelectionIndex();
+                               if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size())
+                                       throw new RuntimeException("No component selected");
+                               GUIComponent target = componentsByItemIndex.get(componentIndex);
+                               String valueString = valueText.getText();
+                               Object value;
+                               if (radioBit.getSelection())
+                                       value = Bit.parse(valueString);
+                               else if (radioBitVector.getSelection())
+                                       value = BitVector.parse(valueString);
+                               else
+                                       throw new RuntimeException("No value type selected");
+                               target.setHighLevelState(stateIDText.getText(), value);
+                               output.setText("Success!");
+                       }
+                       catch (Exception x)
+                       {
+                               output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
+                       }
+               };
+               Listener getAction = e ->
+               {
+                       try
+                       {
+                               if (componentSelector.getSelectionIndex() >= componentsByItemIndex.size())
+                                       throw new RuntimeException("No valid component selected");
+                               output.setText("Success! Value: \r\n"
+                                               + componentsByItemIndex.get(componentSelector.getSelectionIndex()).getHighLevelState(stateIDText.getText()));
+                       }
+                       catch (Exception x)
+                       {
+                               output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
+                       }
+               };
+               send.addListener(SWT.Selection, sendAction);
+               valueText.addListener(SWT.DefaultSelection, sendAction);
+               get.addListener(SWT.Selection, getAction);
+               stateIDText.addListener(SWT.DefaultSelection, getAction);
+               debugShell.open();
+       }
+
+       private void recalculateComponentSelector(List<GUIComponent> componentsByItemIndex, Combo componentSelector, ViewModel model)
+       {
+               componentsByItemIndex.clear();
+               componentSelector.setItems();
+               addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model);
+       }
+
+       private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
+       {
+               for (GUIComponent c : model.getComponentsByName().values())
+                       if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
+                       {
+                               String item = base + c.name;
+                               componentsByItemIndex.add(c);
+                               componentSelector.add(item);
+                               if (c instanceof SubmodelComponent)
+                                       addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
+                       }
+       }
+
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java
new file mode 100644 (file)
index 0000000..c85dd53
--- /dev/null
@@ -0,0 +1,57 @@
+package net.mograsim.logic.model;
+
+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.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class LogicUIRenderer
+{
+       private static final boolean DRAW_PINS = false;
+
+       private final ViewModel model;
+
+       public LogicUIRenderer(ViewModel model)
+       {
+               this.model = model;
+       }
+
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               gc.setAntialias(SWT.ON);
+               gc.setClipping(visibleRegion);
+               gc.setLineWidth(.5);
+               model.getWires().forEach(w ->
+               {
+                       Rectangle bounds = w.getBounds();
+                       double lw = gc.getLineWidth();
+                       if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
+                               w.render(gc);
+               });
+               model.getComponentsByName().values().forEach(c -> renderComponent(gc, c, visibleRegion));
+       }
+
+       private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
+       {
+               Rectangle bounds = component.getBounds();
+               double lw = gc.getLineWidth();
+               if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
+               {
+                       component.render(gc, visibleRegion);
+                       if (DRAW_PINS)
+                       {
+                               gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
+                               for (Pin p : component.getPins().values())
+                               {
+                                       Point pos = p.getPos();
+                                       gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
+                               }
+                       }
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java
new file mode 100644 (file)
index 0000000..700f69b
--- /dev/null
@@ -0,0 +1,53 @@
+package net.mograsim.logic.model;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+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.model.ViewModel;
+
+/**
+ * Standalone simulation visualizer graphical user interface.
+ * 
+ * @author Daniel Kirschten
+ */
+public class LogicUIStandaloneGUI implements Runnable
+{
+       private final Display display;
+       private final Shell shell;
+       private final LogicUICanvas ui;
+
+       public LogicUIStandaloneGUI(ViewModel model)
+       {
+               display = new Display();
+               shell = new Shell(display);
+               shell.setLayout(new FillLayout());
+               ui = new LogicUICanvas(shell, SWT.NONE, model);
+
+               ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
+               userInput.buttonDrag = 3;
+               userInput.buttonZoom = 2;
+               userInput.enableUserInput();
+               new ZoomableCanvasOverlay(ui, null).enableScale();
+       }
+
+       public LogicUICanvas getLogicUICanvas()
+       {
+               return ui;
+       }
+
+       /**
+        * Opens the UI shell. Returns when the shell is closed.
+        */
+       @Override
+       public void run()
+       {
+               shell.open();
+               while (!shell.isDisposed())
+                       if (!display.readAndDispatch())
+                               display.sleep();
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java
new file mode 100644 (file)
index 0000000..23252d4
--- /dev/null
@@ -0,0 +1,43 @@
+package net.mograsim.logic.model;
+
+import java.util.function.Consumer;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+
+public class SimpleLogicUIStandalone
+{
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
+       {
+               LogicModelParameters params = new LogicModelParameters();
+               params.gateProcessTime = 50;
+               params.wireTravelTime = 10;
+               executeVisualisation(setupViewModel, params);
+       }
+
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
+       {
+               // setup view model
+               ViewModelModifiable viewModel = new ViewModelModifiable();
+               setupViewModel.accept(viewModel);
+
+               // convert to logic model
+               Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
+
+               // initialize UI and executer
+               LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
+               LogicExecuter exec = new LogicExecuter(timeline);
+
+               // run it
+               exec.startLiveExecution();
+               ui.run();
+               exec.stopLiveExecution();
+       }
+
+       private SimpleLogicUIStandalone()
+       {
+               throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/examples/ClickableSubmodelComponentsTest.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/examples/ClickableSubmodelComponentsTest.java
new file mode 100644 (file)
index 0000000..4ac98e3
--- /dev/null
@@ -0,0 +1,38 @@
+package net.mograsim.logic.model.examples;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ClickableSubmodelComponentsTest
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(ClickableSubmodelComponentsTest::createExample);
+       }
+
+       public static void createExample(ViewModelModifiable model)
+       {
+               @SuppressWarnings("unused") // GUIWire
+               SimpleRectangularSubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 1, "")
+               {
+                       {
+                               setSubmodelScale(.4);
+                               setOutputPins("O0");
+
+                               GUIManualSwitch sw = new GUIManualSwitch(submodelModifiable);
+                               GUIBitDisplay bd = new GUIBitDisplay(submodelModifiable);
+
+                               sw.moveTo(10, 5);
+                               bd.moveTo(50, 5);
+
+                               new GUIWire(submodelModifiable, sw.getOutputPin(), bd.getInputPin());
+
+                       }
+               };
+               comp.moveTo(10, 10);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/examples/RSLatchExample.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/examples/RSLatchExample.java
new file mode 100644 (file)
index 0000000..005b39a
--- /dev/null
@@ -0,0 +1,61 @@
+package net.mograsim.logic.model.examples;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.GUIOrGate;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+
+public class RSLatchExample
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(RSLatchExample::createRSLatchExample);
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       public static void createRSLatchExample(ViewModelModifiable model)
+       {
+               GUIManualSwitch rIn = new GUIManualSwitch(model);
+               rIn.moveTo(100, 100);
+               GUIManualSwitch sIn = new GUIManualSwitch(model);
+               sIn.moveTo(100, 200);
+
+               GUIOrGate or1 = new GUIOrGate(model, 1);
+               or1.moveTo(160, 102.5);
+               new GUIWire(model, rIn.getOutputPin(), or1.getPin("A"));
+
+               GUIOrGate or2 = new GUIOrGate(model, 1);
+               or2.moveTo(160, 192.5);
+               new GUIWire(model, sIn.getOutputPin(), or2.getPin("B"));
+
+               GUINotGate not1 = new GUINotGate(model, 1);
+               not1.moveTo(200, 107.5);
+               new GUIWire(model, or1.getPin("Y"), not1.getPin("A"));
+
+               GUINotGate not2 = new GUINotGate(model, 1);
+               not2.moveTo(200, 197.5);
+               new GUIWire(model, or2.getPin("Y"), not2.getPin("A"));
+
+               WireCrossPoint p1 = new WireCrossPoint(model, 1);
+               p1.moveCenterTo(250, 112.5);
+               new GUIWire(model, not1.getPin("Y"), p1);
+               new GUIWire(model, p1, or2.getPin("A"), new Point(250, 130), new Point(140, 185), new Point(140, 197.5));
+
+               WireCrossPoint p2 = new WireCrossPoint(model, 1);
+               p2.moveCenterTo(250, 202.5);
+               new GUIWire(model, not2.getPin("Y"), p2);
+               new GUIWire(model, p2, or1.getPin("B"), new Point(250, 185), new Point(140, 130), new Point(140, 117.5));
+
+               WireCrossPoint o1 = new WireCrossPoint(model, 1);
+               o1.moveCenterTo(270, 112.5);
+               new GUIWire(model, p1, o1);
+
+               WireCrossPoint o2 = new WireCrossPoint(model, 1);
+               o2.moveCenterTo(270, 202.5);
+               new GUIWire(model, p2, o2);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModel.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModel.java
new file mode 100644 (file)
index 0000000..1938132
--- /dev/null
@@ -0,0 +1,129 @@
+package net.mograsim.logic.model.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ViewModel
+{
+       private final Map<String, GUIComponent> components;
+       private final Map<String, GUIComponent> componentsUnmodifiable;
+       private final List<GUIWire> wires;
+       private final List<GUIWire> wiresUnmodifiable;
+
+       private final List<Consumer<? super GUIComponent>> componentAddedListeners;
+       private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
+       private final List<Consumer<? super GUIWire>> wireAddedListeners;
+       private final List<Consumer<? super GUIWire>> wireRemovedListeners;
+       private final List<Runnable> redrawListeners;
+
+       private final Runnable redrawListenerForSubcomponents;
+
+       protected ViewModel()
+       {
+               components = new HashMap<>();
+               componentsUnmodifiable = Collections.unmodifiableMap(components);
+               wires = new ArrayList<>();
+               wiresUnmodifiable = Collections.unmodifiableList(wires);
+
+               componentAddedListeners = new ArrayList<>();
+               componentRemovedListeners = new ArrayList<>();
+               wireAddedListeners = new ArrayList<>();
+               wireRemovedListeners = new ArrayList<>();
+               redrawListeners = new ArrayList<>();
+
+               redrawListenerForSubcomponents = this::callRedrawListeners;
+       }
+
+       /**
+        * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
+        * code as it is automatically called in {@link GUIComponent}'s constructor.
+        */
+       protected void componentCreated(GUIComponent component)
+       {
+               if (components.containsKey(component.name))
+                       throw new IllegalStateException("Don't add the same component twice!");
+               components.put(component.name, component);
+               callComponentAddedListeners(component);
+               component.addRedrawListener(redrawListenerForSubcomponents);
+               callRedrawListeners();
+       }
+
+       /**
+        * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from
+        * application code as it is automatically called in {@link GUIComponent#destroy()}.
+        */
+       protected void componentDestroyed(GUIComponent component)
+       {
+               if (!components.containsKey(component.name))
+                       throw new IllegalStateException("Don't remove the same component twice!");
+               components.remove(component.name);
+               callComponentRemovedListeners(component);
+               component.removeRedrawListener(redrawListenerForSubcomponents);
+               callRedrawListeners();
+       }
+
+       /**
+        * Adds the given wire to the list of wires and calls all wireAddedListeners. Don't call this method from application code as it is
+        * automatically called in {@link GUIWire}'s constructor(s).
+        */
+       protected void wireCreated(GUIWire wire)
+       {
+               if (wires.contains(wire))
+                       throw new IllegalStateException("Don't add the same wire twice!");
+               wires.add(wire);
+               callWireAddedListeners(wire);
+               wire.addRedrawListener(redrawListenerForSubcomponents);
+               callRedrawListeners();
+       }
+
+       /**
+        * Removes the given wire from the list of wires and calls all wireRemovedListeners. Don't call this method from application code as it
+        * is automatically called in {@link GUIWire#destroy()}.
+        */
+       protected void wireDestroyed(GUIWire wire)
+       {
+               if (!wires.contains(wire))
+                       throw new IllegalStateException("Don't remove the same wire twice!");
+               wires.remove(wire);
+               callWireRemovedListeners(wire);
+               wire.removeRedrawListener(redrawListenerForSubcomponents);
+               callRedrawListeners();
+       }
+
+       public Map<String, GUIComponent> getComponentsByName()
+       {
+               return componentsUnmodifiable;
+       }
+
+       public List<GUIWire> getWires()
+       {
+               return wiresUnmodifiable;
+       }
+
+       // @formatter:off
+       public void addComponentAddedListener     (Consumer<? super GUIComponent> listener) {componentAddedListeners  .add   (listener);}
+       public void addComponentRemovedListener   (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add   (listener);}
+       public void addWireAddedListener          (Consumer<? super GUIWire     > listener) {wireAddedListeners       .add   (listener);}
+       public void addWireRemovedListener        (Consumer<? super GUIWire     > listener) {wireRemovedListeners     .add   (listener);}
+       public void addRedrawListener             (Runnable                       listener) {redrawListeners          .add   (listener);}
+
+       public void removeComponentAddedListener  (Consumer<? super GUIComponent> listener) {componentAddedListeners  .remove(listener);}
+       public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener) {componentRemovedListeners.remove(listener);}
+       public void removeWireAddedListener       (Consumer<? super GUIWire     > listener) {wireAddedListeners       .remove(listener);}
+       public void removeWireRemovedListener     (Consumer<? super GUIWire     > listener) {wireRemovedListeners     .remove(listener);}
+       public void removeRedrawListener          (Runnable                       listener) {redrawListeners          .remove(listener);}
+
+       private void callComponentAddedListeners  (GUIComponent c) {componentAddedListeners  .forEach(l -> l.accept(c));}
+       private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
+       private void callWireAddedListeners       (GUIWire w     ) {wireAddedListeners       .forEach(l -> l.accept(w));}
+       private void callWireRemovedListeners     (GUIWire w     ) {wireRemovedListeners     .forEach(l -> l.accept(w));}
+       private void callRedrawListeners          (              ) {redrawListeners          .forEach(l -> l.run(    ));}
+       // @formatter:on
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModelModifiable.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModelModifiable.java
new file mode 100644 (file)
index 0000000..79304ec
--- /dev/null
@@ -0,0 +1,45 @@
+package net.mograsim.logic.model.model;
+
+import java.util.Set;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ViewModelModifiable extends ViewModel
+{
+       public String getDefaultComponentName(GUIComponent component)
+       {
+               Set<String> componentNames = getComponentsByName().keySet();
+               String nameBase = component.getClass().getSimpleName() + '#';
+               for (int i = 0;; i++)
+               {
+                       String nameCandidate = nameBase + i;
+                       if (!componentNames.contains(nameCandidate))
+                               return nameCandidate;
+               }
+       }
+
+       @Override
+       public void componentCreated(GUIComponent component)
+       {
+               super.componentCreated(component);
+       }
+
+       @Override
+       public void componentDestroyed(GUIComponent component)
+       {
+               super.componentDestroyed(component);
+       }
+
+       @Override
+       public void wireCreated(GUIWire wire)
+       {
+               super.wireCreated(wire);
+       }
+
+       @Override
+       public void wireDestroyed(GUIWire wire)
+       {
+               super.wireDestroyed(wire);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java
new file mode 100644 (file)
index 0000000..1b97cd3
--- /dev/null
@@ -0,0 +1,316 @@
+package net.mograsim.logic.model.model.components;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+
+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.wires.Pin;
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+
+/**
+ * The base class for all GUI components.<br>
+ * A <code>GUIComponent</code> has a position and size. The size can only be modified by subclasses.<br>
+ * 
+ * @author Daniel Kirschten
+ */
+public abstract class GUIComponent
+{
+       /**
+        * The model this component is a part of.
+        */
+       protected final ViewModelModifiable model;
+       /**
+        * The name of this component. Is unique in its model.
+        */
+       public final String name;
+       private final Rectangle bounds;
+       /**
+        * The list of all pins of this component by name.
+        */
+       private final Map<String, Pin> pinsByName;
+       /**
+        * An unmodifiable view of {@link #pinsByName}.
+        */
+       protected final Map<String, Pin> pinsUnmodifiable;
+
+       private final List<Consumer<? super GUIComponent>> componentMovedListeners;
+       private final List<Consumer<? super GUIComponent>> componentResizedListeners;
+       private final List<Consumer<? super Pin>> pinAddedListeners;
+       private final List<Consumer<? super Pin>> pinRemovedListeners;
+       private final List<Runnable> redrawListeners;
+
+       private final Runnable redrawListenerForSubcomponents;
+       // creation and destruction
+
+       public GUIComponent(ViewModelModifiable model, String name)
+       {
+               this.model = model;
+               this.name = name == null ? model.getDefaultComponentName(this) : name;
+               this.bounds = new Rectangle(0, 0, 0, 0);
+               this.pinsByName = new HashMap<>();
+               this.pinsUnmodifiable = Collections.unmodifiableMap(pinsByName);
+
+               this.componentMovedListeners = new ArrayList<>();
+               this.componentResizedListeners = new ArrayList<>();
+               this.pinAddedListeners = new ArrayList<>();
+               this.pinRemovedListeners = new ArrayList<>();
+               this.redrawListeners = new ArrayList<>();
+
+               redrawListenerForSubcomponents = this::requestRedraw;
+
+               model.componentCreated(this);
+       }
+
+       /**
+        * Destroys this component. This method implicitly calls {@link ViewModelModifiable#componentDestroyed(GUIComponent)
+        * componentDestroyed()} for the model this component is a part of.
+        * 
+        * @author Daniel Kirschten
+        */
+       public void destroy()
+       {
+               pinsByName.values().forEach(p -> pinRemovedListeners.forEach(l -> l.accept(p)));
+               model.componentDestroyed(this);
+       }
+
+       // pins
+
+       /**
+        * Adds the given pin to this component and calls pinAddedListeners and redrawListeners.
+        * 
+        * @throws IllegalArgumentException if the pin doesn't belong to this component
+        * @throws IllegalArgumentException if there already is a pin with the given name
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void addPin(Pin pin)
+       {
+               if (pin.component != this)
+                       throw new IllegalArgumentException("Can't add a pin not belonging to this component!");
+               if (pinsByName.containsKey(pin.name))
+                       throw new IllegalArgumentException("Duplicate pin name: " + pin.name);
+               pinsByName.put(pin.name, pin);
+               callPinAddedListeners(pin);
+               pin.addRedrawListener(redrawListenerForSubcomponents);
+               requestRedraw();
+       }
+
+       /**
+        * Removes the given pin from this component and calls pinAddedListeners and redrawListeners.
+        * 
+        * @throws NullPointerException if there was no pin with this name
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void removePin(String name)
+       {
+               Pin pin = pinsByName.remove(name);
+               callPinRemovedListeners(pin);
+               pin.removeRedrawListener(redrawListenerForSubcomponents);
+               requestRedraw();
+       }
+
+       /**
+        * Returns a collection of pins of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Map<String, Pin> getPins()
+       {
+               return pinsUnmodifiable;
+       }
+
+       /**
+        * Returns the pin with the given name of this component.
+        * 
+        * @throws IllegalArgumentException if there is no pin with the given name
+        * 
+        * @author Daniel Kirschten
+        */
+       public Pin getPin(String name)
+       {
+               Pin pin = pinsByName.get(name);
+               if (pin == null)
+                       throw new IllegalArgumentException("No pin with the name " + name);
+               return pin;
+       }
+
+       // high-level access
+
+       /**
+        * Sets the given high-level state to the given value. <br>
+        * See {@link HighLevelStateHandler#setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+        * 
+        * @see #getHighLevelState(String)
+        * @see HighLevelStateHandler#setHighLevelState(String, Object)
+        * 
+        * @author Daniel Kirschten
+        */
+       @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
+       public void setHighLevelState(String stateID, Object newState)
+       {
+               throw new IllegalArgumentException("No high level state with ID " + stateID);
+       }
+
+       /**
+        * Gets the current value of the given high-level state. <br>
+        * See {@link HighLevelStateHandler#setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+        * 
+        * @see #setHighLevelState(String, Object)
+        * @see HighLevelStateHandler#getHighLevelState(String)
+        * 
+        * @author Daniel Kirschten
+        */
+       @SuppressWarnings("static-method") // this method is intended to be overridden
+       public Object getHighLevelState(String stateID)
+       {
+               throw new IllegalArgumentException("No high level state with ID " + stateID);
+       }
+
+       // "graphical" operations
+
+       /**
+        * Sets the position of this component and calls componentMovedListeners and redrawListeners.
+        * 
+        * @author Daniel Kirschten
+        */
+       public void moveTo(double x, double y)
+       {
+               bounds.x = x;
+               bounds.y = y;
+               callComponentMovedListeners();
+               requestRedraw();
+       }
+
+       /**
+        * Sets the size of this component and calls redrawListeners.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void setSize(double width, double height)
+       {
+               bounds.width = width;
+               bounds.height = height;
+               callComponentResizedListener();
+               requestRedraw();
+       }
+
+       /**
+        * Returns the bounds of this component. Is a bit slower than {@link #getPosX()}, {@link #getPosY()}, {@link #getWidth},
+        * {@link #getHeight}, because new objects are created.
+        * 
+        * @author Daniel Kirschten
+        */
+       public final Rectangle getBounds()
+       {
+               return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+       }
+
+       /**
+        * Returns the x coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getPosX()
+       {
+               return bounds.x;
+       }
+
+       /**
+        * Returns the y coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getPosY()
+       {
+               return bounds.y;
+       }
+
+       /**
+        * Returns the (graphical) width of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getWidth()
+       {
+               return bounds.width;
+       }
+
+       /**
+        * Returns the height of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getHeight()
+       {
+               return bounds.height;
+       }
+
+       /**
+        * Called when this component is clicked. Absolute coordinates of the click are given. Returns true if this component consumed this
+        * click.
+        * 
+        * @author Daniel Kirschten
+        */
+       @SuppressWarnings({ "static-method", "unused" }) // this method is inteded to be overridden
+       public boolean clicked(double x, double y)
+       {
+               return false;
+       }
+
+       /**
+        * Render this component to the given gc, in absoulute coordinates.
+        * 
+        * @author Daniel Kirschten
+        */
+       public abstract void render(GeneralGC gc, Rectangle visibleRegion);
+
+       // serializing
+
+       @SuppressWarnings("static-method") // this method is intended to be overridden
+       public JsonElement getParams()
+       {
+               return JsonNull.INSTANCE;
+       }
+
+       // listeners
+
+       /**
+        * Calls redraw listeners.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void requestRedraw()
+       {
+               callRedrawListeners();
+       }
+
+       // @formatter:off
+       public void addComponentMovedListener      (Consumer<? super GUIComponent> listener) {componentMovedListeners  .add   (listener);}
+       public void addComponentResizedListener    (Consumer<? super GUIComponent> listener) {componentResizedListeners.add   (listener);}
+       public void addPinAddedListener            (Consumer<? super Pin         > listener) {pinAddedListeners        .add   (listener);}
+       public void addPinRemovedListener          (Consumer<? super Pin         > listener) {pinRemovedListeners      .add   (listener);}
+       public void addRedrawListener              (Runnable                       listener) {redrawListeners          .add   (listener);}
+
+       public void removeComponentMovedListener   (Consumer<? super GUIComponent> listener) {componentMovedListeners  .remove(listener);}
+       public void removeComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.remove(listener);}
+       public void removePinAddedListener         (Consumer<? super Pin         > listener) {pinAddedListeners        .remove(listener);}
+       public void removePinRemovedListener       (Consumer<? super Pin         > listener) {pinRemovedListeners      .remove(listener);}
+       public void removeRedrawListener           (Runnable                       listener) {redrawListeners          .remove(listener);}
+
+       private void callComponentMovedListeners (     ) {componentMovedListeners  .forEach(l -> l.accept(this));}
+       private void callComponentResizedListener(     ) {componentResizedListeners.forEach(l -> l.accept(this));}
+       private void callPinAddedListeners       (Pin p) {pinAddedListeners        .forEach(l -> l.accept(p   ));}
+       private void callPinRemovedListeners     (Pin p) {pinRemovedListeners      .forEach(l -> l.accept(p   ));}
+       private void callRedrawListeners         (     ) {redrawListeners          .forEach(l -> l.run(       ));}
+       // @formatter:on
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIAndGate.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIAndGate.java
new file mode 100644 (file)
index 0000000..5859f1f
--- /dev/null
@@ -0,0 +1,28 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.AndGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAndGate extends SimpleRectangularGUIGate
+{
+       public GUIAndGate(ViewModelModifiable model, int logicWidth)
+       {
+               this(model, logicWidth, null);
+       }
+
+       public GUIAndGate(ViewModelModifiable model, int logicWidth, String name)
+       {
+               super(model, "&", false, logicWidth, name);
+               setInputCount(2);// TODO make variable
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new));
+               IndirectGUIComponentCreator.setComponentSupplier(GUIAndGate.class.getCanonicalName(),
+                               (m, p, n) -> new GUIAndGate(m, p.getAsInt(), n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIBitDisplay.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIBitDisplay.java
new file mode 100644 (file)
index 0000000..46c8546
--- /dev/null
@@ -0,0 +1,94 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+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.core.LogicObserver;
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.BitDisplayAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+public class GUIBitDisplay extends GUIComponent
+{
+       private static final double width = 20;
+       private static final double height = 15;
+       private static final double fontHeight = 5;
+
+       private final Pin inputPin;
+
+       private final LogicObserver logicObs;
+       private BitDisplay bitDisplay;
+
+       public GUIBitDisplay(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIBitDisplay(ViewModelModifiable model, String name)
+       {
+               super(model, name);
+               logicObs = (i) -> requestRedraw();
+
+               setSize(width, height);
+               addPin(this.inputPin = new Pin(this, "", 1, 0, height / 2));
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+               if (foreground != null)
+                       gc.setForeground(foreground);
+               gc.drawRectangle(getBounds());
+               String label = bitDisplay == null ? BitVectorFormatter.formatAsString(null)
+                               : BitVectorFormatter.formatAsString(bitDisplay.getDisplayedValue());
+               Font oldFont = gc.getFont();
+               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+               gc.setFont(labelFont);
+               Point textExtent = gc.textExtent(label);
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+               gc.setFont(oldFont);
+       }
+
+       public void setLogicModelBinding(BitDisplay bitDisplay)
+       {
+               if (this.bitDisplay != null)
+                       this.bitDisplay.deregisterObserver(logicObs);
+               this.bitDisplay = bitDisplay;
+               if (bitDisplay != null)
+                       bitDisplay.registerObserver(logicObs);
+       }
+
+       public boolean hasLogicModelBinding()
+       {
+               return bitDisplay != null;
+       }
+
+       public BitDisplay getBitDisplay()
+       {
+               return bitDisplay;
+       }
+
+       public Pin getInputPin()
+       {
+               return inputPin;
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter());
+               IndirectGUIComponentCreator.setComponentSupplier(GUIBitDisplay.class.getCanonicalName(), (m, p, n) -> new GUIBitDisplay(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIManualSwitch.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIManualSwitch.java
new file mode 100644 (file)
index 0000000..2fd1749
--- /dev/null
@@ -0,0 +1,148 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+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.core.LogicObservable;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.ManualSwitchAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+public class GUIManualSwitch extends GUIComponent
+{
+       private static final double width = 20;
+       private static final double height = 15;
+       private static final double fontHeight = 5;
+
+       private final Pin outputPin;
+
+       private final LogicObserver logicObs;
+       private ManualSwitch logicSwitch;
+       private ReadEnd end;
+
+       public GUIManualSwitch(ViewModelModifiable model)
+       {
+               this(model, null);
+       }
+
+       public GUIManualSwitch(ViewModelModifiable model, String name)
+       {
+               super(model, name);
+               logicObs = (i) -> requestRedraw();
+
+               setSize(width, height);
+               addPin(this.outputPin = new Pin(this, "", 1, width, height / 2));
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               // TODO maybe draw switch state too?
+               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+               if (foreground != null)
+                       gc.setForeground(foreground);
+               gc.drawRectangle(getBounds());
+               String label = BitVectorFormatter.formatValueAsString(end);
+               Font oldFont = gc.getFont();
+               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+               gc.setFont(labelFont);
+               Point textExtent = gc.textExtent(label);
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+               gc.setFont(oldFont);
+       }
+
+       public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)
+       {
+               deregisterLogicObs(this.end);
+               deregisterLogicObs(this.logicSwitch);
+               this.logicSwitch = logicSwitch;
+               this.end = end;
+               registerLogicObs(end);
+               registerLogicObs(logicSwitch);
+       }
+
+       public boolean hasLogicModelBinding()
+       {
+               return logicSwitch != null;
+       }
+
+       @Override
+       public void setHighLevelState(String stateID, Object newState)
+       {
+               switch (stateID)
+               {
+               case "out":
+                       if (logicSwitch != null)
+                               logicSwitch.setToValueOf((Bit) newState);
+                       break;
+               default:
+                       super.setHighLevelState(stateID, newState);
+                       break;
+               }
+       }
+
+       @Override
+       public Object getHighLevelState(String stateID)
+       {
+               switch (stateID)
+               {
+               case "out":
+                       if (logicSwitch != null)
+                               return logicSwitch.getValue();
+                       return null;
+               default:
+                       return super.getHighLevelState(stateID);
+               }
+       }
+
+       private void registerLogicObs(LogicObservable observable)
+       {
+               if (observable != null)
+                       observable.registerObserver(logicObs);
+       }
+
+       private void deregisterLogicObs(LogicObservable observable)
+       {
+               if (observable != null)
+                       observable.deregisterObserver(logicObs);
+       }
+
+       @Override
+       public boolean clicked(double x, double y)
+       {
+               if (logicSwitch != null)
+                       logicSwitch.toggle();
+               return true;
+       }
+
+       public ManualSwitch getManualSwitch()
+       {
+               return logicSwitch;
+       }
+
+       public Pin getOutputPin()
+       {
+               return outputPin;
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter());
+               IndirectGUIComponentCreator.setComponentSupplier(GUIManualSwitch.class.getName(), (m, p, n) -> new GUIManualSwitch(m, n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINandGate.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINandGate.java
new file mode 100644 (file)
index 0000000..1d8f63d
--- /dev/null
@@ -0,0 +1,28 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.NandGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUINandGate extends SimpleRectangularGUIGate
+{
+       public GUINandGate(ViewModelModifiable model, int logicWidth)
+       {
+               this(model, logicWidth, null);
+       }
+
+       public GUINandGate(ViewModelModifiable model, int logicWidth, String name)
+       {
+               super(model, "&", true, logicWidth, name);
+               setInputCount(2);// TODO make variable
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new));
+               IndirectGUIComponentCreator.setComponentSupplier(GUINandGate.class.getCanonicalName(),
+                               (m, p, n) -> new GUINandGate(m, p.getAsInt(), n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINotGate.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUINotGate.java
new file mode 100644 (file)
index 0000000..5dc6938
--- /dev/null
@@ -0,0 +1,28 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.NotGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUINotGate extends SimpleRectangularGUIGate
+{
+       public GUINotGate(ViewModelModifiable model, int logicWidth)
+       {
+               this(model, logicWidth, null);
+       }
+
+       public GUINotGate(ViewModelModifiable model, int logicWidth, String name)
+       {
+               super(model, "1", true, logicWidth, name);
+               setInputCount(1);
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o)));
+               IndirectGUIComponentCreator.setComponentSupplier(GUINotGate.class.getCanonicalName(),
+                               (m, p, n) -> new GUINotGate(m, p.getAsInt(), n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIOrGate.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIOrGate.java
new file mode 100644 (file)
index 0000000..65031a6
--- /dev/null
@@ -0,0 +1,28 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.OrGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIOrGate extends SimpleRectangularGUIGate
+{
+       public GUIOrGate(ViewModelModifiable model, int logicWidth)
+       {
+               this(model, logicWidth, null);
+       }
+
+       public GUIOrGate(ViewModelModifiable model, int logicWidth, String name)
+       {
+               super(model, "\u22651", false, logicWidth, name);// ">=1"
+               setInputCount(2);
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new));
+               IndirectGUIComponentCreator.setComponentSupplier(GUIOrGate.class.getCanonicalName(),
+                               (m, p, n) -> new GUIOrGate(m, p.getAsInt(), n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularGUIGate.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularGUIGate.java
new file mode 100644 (file)
index 0000000..c7c2607
--- /dev/null
@@ -0,0 +1,101 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+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.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.preferences.Preferences;
+
+public class SimpleRectangularGUIGate extends GUIComponent
+{
+       private static final double width = 20;
+       private static final double pinDistance = 10;
+       private static final double fontHeight = 5;
+       private static final double invertedCircleDiam = 3.5;
+
+       private final String label;
+       private final boolean isInverted;
+       protected final int logicWidth;
+       private final double rectWidth;
+
+       private MovablePin outputPin;
+       private final List<Pin> inputPins;
+
+       protected SimpleRectangularGUIGate(ViewModelModifiable model, String label, boolean isInverted, int logicWidth, String name)
+       {
+               super(model, name);
+               this.label = label;
+               this.logicWidth = logicWidth;
+               this.isInverted = isInverted;
+               this.rectWidth = width - (isInverted ? invertedCircleDiam : 0);
+               this.outputPin = new MovablePin(this, "Y", logicWidth, width, 0);
+               addPin(outputPin);
+               this.inputPins = new ArrayList<>();
+               setInputCount(1);
+       }
+
+       protected void setInputCount(int inputCount)
+       {
+               int oldInputCount = inputPins.size();
+               setSize(width, inputCount * pinDistance);
+               if (oldInputCount > inputCount)
+                       while (inputPins.size() > inputCount)
+                               removePin(inputPins.remove(inputCount).name);
+               else if (oldInputCount < inputCount)
+                       for (int i = oldInputCount; i < inputCount; i++)
+                       {
+                               // TODO what for more than 24 input pins?
+                               Pin pin = new Pin(this, String.valueOf((char) ('A' + i)), logicWidth, 0, pinDistance / 2 + i * pinDistance);
+                               inputPins.add(pin);
+                               addPin(pin);
+                       }
+               outputPin.setRelPos(width, inputCount * pinDistance / 2);
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+               if (foreground != null)
+                       gc.setForeground(foreground);
+               double height = (getPins().size() - 1) * pinDistance;
+               gc.drawRectangle(getPosX(), getPosY(), rectWidth, height);
+               if (isInverted)
+                       gc.drawOval(getPosX() + rectWidth, getPosY() + (height - invertedCircleDiam) / 2, invertedCircleDiam, invertedCircleDiam);
+               Font oldFont = gc.getFont();
+               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+               gc.setFont(labelFont);
+               Point textExtent = gc.textExtent(label);
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(label, getPosX() + (rectWidth - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+               gc.setFont(oldFont);
+       }
+
+       // serializing
+
+       /**
+        * {@link SimpleRectangularGUIGate}s implementation returns a {@link JsonPrimitive} of type int containing the {@link #logicWidth} of
+        * this component.
+        * 
+        * @see GUIComponent#getParams()
+        */
+       @Override
+       public JsonElement getParams()
+       {
+               return new JsonPrimitive(logicWidth);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/TextComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/TextComponent.java
new file mode 100644 (file)
index 0000000..64a6165
--- /dev/null
@@ -0,0 +1,63 @@
+package net.mograsim.logic.model.model.components.atomic;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+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.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.NoLogicAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+//TODO clean size calculation mess
+public class TextComponent extends GUIComponent
+{
+       private final String text;
+
+       public TextComponent(ViewModelModifiable model, String text)
+       {
+               this(model, text, null);
+       }
+
+       public TextComponent(ViewModelModifiable model, String text, String name)
+       {
+               super(model, name);
+               this.text = text;
+               // If size is unset, it defaults to 0, which could prohibit this component from being rendered, which would prohibit the size being
+               // set to a better guess
+               setSize(1, 1);
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Point textExtent = gc.textExtent(text);
+               setSize(textExtent.x, textExtent.y);
+
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(text, getPosX(), getPosY(), true);
+       }
+
+       // serializing
+
+       @Override
+       public JsonElement getParams()
+       {
+               return new JsonPrimitive(text);
+       }
+
+       static
+       {
+               ViewLogicModelAdapter.addComponentAdapter(new NoLogicAdapter<>(TextComponent.class));
+               IndirectGUIComponentCreator.setComponentSupplier(TextComponent.class.getName(),
+                               (m, p, n) -> new TextComponent(m, p.getAsString(), n));
+       }
+}
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java
new file mode 100644 (file)
index 0000000..530f078
--- /dev/null
@@ -0,0 +1,166 @@
+package net.mograsim.logic.model.model.components.submodels;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.function.Function;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonObject;
+
+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.GUIComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
+import net.mograsim.preferences.Preferences;
+
+public class SimpleRectangularSubmodelComponent extends SubmodelComponent
+{
+       private static final double width = 35;
+       private static final double pinDistance = 10;
+       private static final double pinNameMargin = .5;
+       private static final double labelFontHeight = 5;
+       private static final double pinNameFontHeight = 3.5;
+
+       private final String label;
+       protected final int logicWidth;
+
+       private final List<String> inputPinNames;
+       private final List<String> inputPinNamesUnmodifiable;
+       private final List<String> outputPinNames;
+       private final List<String> outputPinNamesUnmodifiable;
+
+       private Renderer symbolRenderer;
+
+       public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
+       {
+               this(model, logicWidth, label, null);
+       }
+
+       public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label, String name)
+       {
+               super(model, name);
+               this.label = label;
+               this.logicWidth = logicWidth;
+               this.inputPinNames = new ArrayList<>();
+               this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames);
+               this.outputPinNames = new ArrayList<>();
+               this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames);
+
+               SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
+               rendererParams.centerText = label;
+               rendererParams.centerTextHeight = labelFontHeight;
+               rendererParams.horizontalComponentCenter = getWidth() / 2;
+               rendererParams.pinLabelHeight = pinNameFontHeight;
+               rendererParams.pinLabelMargin = pinNameMargin;
+               symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
+       }
+
+       protected void setInputPins(String... pinNames)
+       {
+               setIOPins(0, inputPinNames, outputPinNames, pinNames);
+       }
+
+       protected void setOutputPins(String... pinNames)
+       {
+               setIOPins(width, outputPinNames, inputPinNames, pinNames);
+       }
+
+       private void setIOPins(double relX, List<String> pinNamesListThisSide, List<String> pinNamesListOtherSide, String... newPinNames)
+       {
+               int inputCount = newPinNames.length;
+               List<String> newPinNamesList = Arrays.asList(newPinNames);
+               if (new HashSet<>(newPinNamesList).size() != inputCount)
+                       throw new IllegalArgumentException("Pin names contain duplicates");
+               for (String pinName : newPinNamesList)
+                       if (pinNamesListOtherSide.contains(pinName))
+                               throw new IllegalArgumentException("Can't add pin. There is a pin on the other side with the same name: " + pinName);
+               super.setSize(width, Math.max(inputCount, pinNamesListOtherSide.size()) * pinDistance);
+               for (int i = 0; i < inputCount; i++)
+               {
+                       String pinName = newPinNames[i];
+                       int oldPinIndex = pinNamesListThisSide.indexOf(pinName);
+                       if (oldPinIndex == -1)
+                               super.addSubmodelInterface(new MovablePin(this, pinName, logicWidth, relX, pinDistance / 2 + i * pinDistance));
+                       else
+                               getSupermodelMovablePin(pinName).setRelPos(relX, pinDistance / 2 + i * pinDistance);
+               }
+               for (String pinName : pinNamesListThisSide)
+                       if (!newPinNamesList.contains(pinName))
+                               super.removeSubmodelInterface(pinName);
+               pinNamesListThisSide.clear();
+               pinNamesListThisSide.addAll(newPinNamesList);
+       }
+
+       public List<String> getInputPinNames()
+       {
+               return inputPinNamesUnmodifiable;
+       }
+
+       public List<String> getOutputPinNames()
+       {
+               return outputPinNamesUnmodifiable;
+       }
+
+       @Override
+       protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
+       {
+               symbolRenderer.render(gc, visibleRegion);
+       }
+
+       @Override
+       protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+               if (foreground != null)
+                       gc.setForeground(foreground);
+               gc.drawRectangle(getBounds());
+       }
+
+       // serializing
+
+       @Override
+       public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
+       {
+               SubmodelComponentParams params = super.calculateParams(getIdentifier);
+               JsonObject symbolRendererParams = new JsonObject();
+               symbolRendererParams.addProperty("centerText", label);
+               symbolRendererParams.addProperty("horizontalComponentCenter", getWidth() / 2);
+               symbolRendererParams.addProperty("centerTextHeight", labelFontHeight);
+               symbolRendererParams.addProperty("pinLabelHeight", pinNameFontHeight);
+               symbolRendererParams.addProperty("pinLabelMargin", pinNameMargin);
+               params.symbolRendererSnippetID = "SimpleRectangularLikeSymbolRenderer";
+               params.symbolRendererParams = symbolRendererParams;
+               return params;
+       }
+
+       @Override
+       protected Pin addSubmodelInterface(MovablePin supermodelPin)
+       {
+               throw new UnsupportedOperationException(
+                               "Can't add submodel interfaces to a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+       }
+
+       @Override
+       protected void removeSubmodelInterface(String name)
+       {
+               throw new UnsupportedOperationException(
+                               "Can't remove submodel interfaces of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+       }
+
+       @Override
+       protected void setSize(double width, double height)
+       {
+               throw new UnsupportedOperationException(
+                               "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java
new file mode 100644 (file)
index 0000000..b19f05d
--- /dev/null
@@ -0,0 +1,592 @@
+package net.mograsim.logic.model.model.components.submodels;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.function.Function;
+
+import net.haspamelodica.swt.helper.gcs.GCConfig;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.gcs.TranslatedGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.LogicUIRenderer;
+import net.mograsim.logic.model.model.ViewModel;
+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;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.InterfacePinParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams.InnerPinParams;
+
+/**
+ * A {@link GUIComponent} consisting of another model. A <code>SubmodelComponent</code> can have so-called "interface pins" connecting the
+ * inner and outer models.
+ */
+public abstract class SubmodelComponent extends GUIComponent
+{
+       private static final String SUBMODEL_INTERFACE_NAME = "_submodelinterface";
+       /**
+        * A modifiable view of {@link #submodel}.
+        */
+       protected final ViewModelModifiable submodelModifiable;
+       /**
+        * The model this {@link SubmodelComponent} consists of.
+        */
+       public final ViewModel submodel;
+       /**
+        * The list of all submodel interface pins of this {@link SubmodelComponent} on the submodel side.
+        */
+       private final Map<String, MovablePin> submodelPins;
+       /**
+        * An unmodifiable view of {@link #submodelPins}.
+        */
+       private final Map<String, MovablePin> submodelMovablePinsUnmodifiable;
+       /**
+        * An unmodifiable view of {@link #submodelPins} where pins are not movable.
+        */
+       private final Map<String, Pin> submodelUnmovablePinsUnmodifiable;
+       /**
+        * The list of all submodel interface pins of this {@link SubmodelComponent} on the supermodel side.
+        */
+       private final Map<String, MovablePin> supermodelPins;
+       /**
+        * An unmodifiable view of {@link #supermodelPins}.
+        */
+       private final Map<String, MovablePin> supermodelMovablePinsUnmodifiable;
+       /**
+        * An unmodifiable view of {@link #supermodelPins} where pins are not movable.
+        */
+       private final Map<String, Pin> supermodelUnmovablePinsUnmodifiable;
+       /**
+        * A pseudo-component containing all submodel interface pins on the submodel side.
+        */
+       private final SubmodelInterface submodelInterface;
+
+       /**
+        * The list of all high level state IDs this component supports without delegating to subcomponents.
+        */
+       private final Set<String> highLevelAtomicStates;
+       /**
+        * A map of high level state subcomponent IDs to the {@link GUIComponent} high level state access requests are delegated to.
+        */
+       private final Map<String, GUIComponent> subcomponentsByHighLevelStateSubcomponentID;
+
+       /**
+        * The factor by which the submodel is scaled when rendering.
+        */
+       private double submodelScale;
+       /**
+        * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel starts to
+        * be visible.
+        */
+       private double maxVisibleRegionFillRatioForAlpha0;
+       /**
+        * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is fully
+        * visible.
+        */
+       private double minVisibleRegionFillRatioForAlpha1;
+       /**
+        * The renderer used for rendering the submodel.
+        */
+       private final LogicUIRenderer renderer;
+
+       // creation and destruction
+
+       public SubmodelComponent(ViewModelModifiable model, String name)
+       {
+               super(model, name);
+               this.submodelModifiable = new ViewModelModifiable();
+               this.submodel = submodelModifiable;
+               this.submodelPins = new HashMap<>();
+               this.submodelMovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
+               this.submodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
+               this.supermodelPins = new HashMap<>();
+               this.supermodelMovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
+               this.supermodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
+               this.submodelInterface = new SubmodelInterface(submodelModifiable, SUBMODEL_INTERFACE_NAME);
+
+               this.highLevelAtomicStates = new HashSet<>();
+               this.subcomponentsByHighLevelStateSubcomponentID = new HashMap<>();
+
+               this.submodelScale = 1;
+               this.maxVisibleRegionFillRatioForAlpha0 = 0.4;
+               this.minVisibleRegionFillRatioForAlpha1 = 0.8;
+               this.renderer = new LogicUIRenderer(submodelModifiable);
+
+               submodelModifiable.addRedrawListener(this::requestRedraw);
+       }
+
+       // pins
+
+       /**
+        * Adds a new submodel interface pin.
+        * 
+        * @param supermodelPin the submodel interface pin on the supermodel side
+        * 
+        * @return the submodel interface pin on the submodel side
+        * 
+        * @author Daniel Kirschten
+        */
+       protected Pin addSubmodelInterface(MovablePin supermodelPin)
+       {
+               super.addPin(supermodelPin);// do this first to be fail-fast if the supermodel does not belong to this component
+
+               String name = supermodelPin.name;
+               MovablePin submodelPin = new MovablePin(submodelInterface, name, supermodelPin.logicWidth, supermodelPin.getRelX() / submodelScale,
+                               supermodelPin.getRelY() / submodelScale);
+
+               submodelPin.addPinMovedListener(p ->
+               {
+                       double newRelX = p.getRelX() * submodelScale;
+                       double newRelY = p.getRelY() * submodelScale;
+                       if (supermodelPin.getRelX() != newRelX || supermodelPin.getRelY() != newRelY)
+                               supermodelPin.setRelPos(newRelX, newRelY);
+               });
+               supermodelPin.addPinMovedListener(p ->
+               {
+                       double newRelX = p.getRelX() / submodelScale;
+                       double newRelY = p.getRelY() / submodelScale;
+                       if (submodelPin.getRelX() != newRelX || submodelPin.getRelY() != newRelY)
+                               submodelPin.setRelPos(newRelX, newRelY);
+               });
+
+               submodelInterface.addPin(submodelPin);
+
+               submodelPins.put(name, submodelPin);
+               supermodelPins.put(name, supermodelPin);
+
+               // no need to call requestRedraw() because addPin() will request a redraw
+               return submodelPin;
+       }
+
+       /**
+        * Removes a submodel interface pin.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void removeSubmodelInterface(String name)
+       {
+               super.removePin(name);// do this first to be fail-fast if this component doesn't have a pin with the given name
+               Pin submodelPin = submodelPins.remove(name);
+               submodelInterface.removePin(submodelPin.name);
+               supermodelPins.remove(name);
+
+               // no need to call requestRedraw() because removePin() will request a redraw
+       }
+
+       /**
+        * Returns a collection of submodel interface pins on the submodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Map<String, Pin> getSubmodelPins()
+       {
+               return submodelUnmovablePinsUnmodifiable;
+       }
+
+       /**
+        * Returns the submodel interface pin with the given name on the submodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Pin getSubmodelPin(String name)
+       {
+               return getSubmodelMovablePin(name);
+       }
+
+       /**
+        * Returns a collection of movable submodel interface pins on the submodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected Map<String, MovablePin> getSubmodelMovablePins()
+       {
+               return submodelMovablePinsUnmodifiable;
+       }
+
+       /**
+        * Returns the movable submodel interface pin with the given name on the submodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected MovablePin getSubmodelMovablePin(String name)
+       {
+               return submodelPins.get(name);
+       }
+
+       /**
+        * Returns a collection of submodel interface pins on the supermodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Map<String, Pin> getSupermodelPins()
+       {
+               return supermodelUnmovablePinsUnmodifiable;
+       }
+
+       /**
+        * Returns the submodel interface pin with the given name on the supermodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Pin getSupermodelPin(String name)
+       {
+               return getSupermodelMovablePin(name);
+       }
+
+       /**
+        * Returns a collection of movable submodel interface pins on the supermodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected Map<String, MovablePin> getSupermodelMovablePins()
+       {
+               return supermodelMovablePinsUnmodifiable;
+       }
+
+       /**
+        * Returns the movable submodel interface pin with the given name on the supermodel side of this component.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected MovablePin getSupermodelMovablePin(String name)
+       {
+               return supermodelPins.get(name);
+       }
+
+       // high-level access
+
+       /**
+        * Adds the given subcomponent ID to the set of allowed subcomponent IDs and links the given {@link GUIComponent} as the delegate target
+        * for this subcomponent ID. <br>
+        * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
+        * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called. <br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void addHighLevelStateSubcomponentID(String subcomponentID, GUIComponent subcomponent)
+       {
+               checkHighLevelStateIDPart(subcomponentID);
+               subcomponentsByHighLevelStateSubcomponentID.put(subcomponentID, subcomponent);
+       }
+
+       /**
+        * Removes the given subcomponent ID from the set of allowed subcomponent IDs. <br>
+        * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
+        * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called.<br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void removeHighLevelStateSubcomponentID(String subcomponentID)
+       {
+               subcomponentsByHighLevelStateSubcomponentID.remove(subcomponentID);
+       }
+
+       /**
+        * Adds the given atomic state ID to the set of allowed atomic state IDs. <br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void addAtomicHighLevelStateID(String stateID)
+       {
+               checkHighLevelStateIDPart(stateID);
+               highLevelAtomicStates.add(stateID);
+       }
+
+       /**
+        * Removes the given atomic state ID from the set of allowed atomic state IDs. <br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void removeAtomicHighLevelStateID(String stateID)
+       {
+               highLevelAtomicStates.remove(stateID);
+       }
+
+       @Override
+       public final void setHighLevelState(String stateID, Object newState)
+       {
+               int indexOfDot = stateID.indexOf('.');
+               if (indexOfDot == -1)
+                       if (highLevelAtomicStates.contains(stateID))
+                               setAtomicHighLevelState(stateID, newState);
+                       else
+                               super.setHighLevelState(stateID, newState);
+               else
+                       setSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1), newState);
+       }
+
+       /**
+        * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
+        * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
+        * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to.<br>
+        * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
+        * don't affect whether this method will be called.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
+       {
+               GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
+               if (subcomponent != null)
+                       subcomponent.setHighLevelState(subcomponentHighLevelStateID, newState);
+               else
+                       super.setHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID, newState);
+       }
+
+       /**
+        * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is atomic and in the set of allowed atomic
+        * state IDs. <br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
+       protected void setAtomicHighLevelState(String stateID, Object newState)
+       {
+               throw new IllegalStateException("Unknown high level state ID: " + stateID);
+       }
+
+       @Override
+       public final Object getHighLevelState(String stateID)
+       {
+               int indexOfDot = stateID.indexOf('.');
+               if (indexOfDot == -1)
+               {
+                       if (highLevelAtomicStates.contains(stateID))
+                               return getAtomicHighLevelState(stateID);
+                       return super.getHighLevelState(stateID);
+               }
+               return getSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1));
+       }
+
+       /**
+        * This method is called in {@link #getHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
+        * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
+        * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to. <br>
+        * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
+        * don't affect whether this method will be called.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
+       {
+               GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
+               if (subcomponent != null)
+                       return subcomponent.getHighLevelState(subcomponentHighLevelStateID);
+               return super.getHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID);
+       }
+
+       /**
+        * This method is called in {@link SubmodelComponent#getHighLevelState(String)} when the state ID is in the set of allowed atomic state
+        * IDs. <br>
+        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+        * 
+        * @author Daniel Kirschten
+        */
+       @SuppressWarnings("static-method") // this method is intended to be overridden
+       protected Object getAtomicHighLevelState(String stateID)
+       {
+               throw new IllegalStateException("Unknown high level state ID: " + stateID);
+       }
+
+       private static void checkHighLevelStateIDPart(String stateIDPart)
+       {
+               if (stateIDPart.indexOf('.') != -1)
+                       throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
+
+       }
+
+       // "graphical" operations
+
+       /**
+        * Sets the factor by which the submodel is scaled when rendering and calls redrawListeners. Note that the submodel interface pins will
+        * stay at their position relative to the supermodel, which means they will move relative to the submodel.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void setSubmodelScale(double submodelScale)
+       {
+               this.submodelScale = submodelScale;
+
+               for (Entry<String, MovablePin> e : supermodelPins.entrySet())
+                       getSubmodelMovablePin(e.getKey()).setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale);
+
+               requestRedraw();// needed if there is no submodel interface pin
+       }
+
+       /**
+        * Returns the current factor by which the submodel is scaled when rendering.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected double getSubmodelScale()
+       {
+               return submodelScale;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               GCConfig conf = new GCConfig(gc);
+               TranslatedGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true);
+               conf.reset(tgc);
+               double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height);
+               double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1);
+               alphaFactor = Math.max(0, Math.min(1, alphaFactor));
+               // we need to take the old alpha into account to support nested submodules better.
+               int oldAlpha = gc.getAlpha();
+               int submodelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)));
+               int labelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))));
+               if (submodelAlpha != 0)
+               {
+                       gc.setAlpha(submodelAlpha);
+                       renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale));
+               }
+               if (labelAlpha != 0)
+               {
+                       gc.setAlpha(labelAlpha);
+                       renderSymbol(gc, visibleRegion);
+               }
+               conf.reset(gc);
+               // draw the outline after all other operations to make interface pins look better
+               renderOutline(gc, visibleRegion);
+       }
+
+       // TODO make this a path
+       /**
+        * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected abstract void renderOutline(GeneralGC gc, Rectangle visibleRegion);
+
+       /**
+        * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected abstract void renderSymbol(GeneralGC gc, Rectangle visibleRegion);
+
+       private static double map(double val, double valMin, double valMax, double mapMin, double mapMax)
+       {
+               return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin);
+       }
+
+       @Override
+       public boolean clicked(double x, double y)
+       {
+               double scaledX = (x - getPosX()) / submodelScale;
+               double scaledY = (y - getPosY()) / submodelScale;
+               for (GUIComponent component : submodel.getComponentsByName().values())
+                       if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
+                               return true;
+               return false;
+       }
+
+       // serializing
+
+       // TODO move the methods below to serializing classes
+
+       public SubmodelComponentParams calculateParams()
+       {
+               return calculateParams(c -> "class:" + c.getClass().getCanonicalName());
+       }
+
+       /**
+        * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}.
+        */
+       public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
+       {
+               SubmodelComponentParams params = new SubmodelComponentParams();
+               params.submodel = calculateSubmodelParams(getIdentifier);
+
+               params.width = getWidth();
+               params.height = getHeight();
+
+               InterfacePinParams[] iPins = new InterfacePinParams[getPins().size()];
+               int i = 0;
+               for (Pin p : getPins().values())
+               {
+                       InterfacePinParams iPinParams = new InterfacePinParams();
+                       iPins[i] = iPinParams;
+                       iPinParams.location = p.getRelPos();
+                       iPinParams.name = p.name;
+                       iPinParams.logicWidth = p.logicWidth;
+                       i++;
+               }
+               params.interfacePins = iPins;
+               return params;
+       }
+
+       private SubmodelParameters calculateSubmodelParams(Function<GUIComponent, String> getIdentifier)
+       {
+               SubmodelParameters params = new SubmodelParameters();
+               params.innerScale = getSubmodelScale();
+
+               Map<String, GUIComponent> components = new HashMap<>(submodel.getComponentsByName());
+               components.remove(SUBMODEL_INTERFACE_NAME);
+               InnerComponentParams[] comps = new InnerComponentParams[components.size()];
+               int i = 0;
+               for (GUIComponent component : components.values())
+               {
+                       InnerComponentParams inner = new InnerComponentParams();
+                       comps[i] = inner;
+                       inner.pos = new Point(component.getPosX(), component.getPosY());
+                       inner.id = getIdentifier.apply(component);
+                       inner.params = component.getParams();
+                       inner.name = component.name;
+                       i++;
+               }
+               params.subComps = comps;
+
+               List<GUIWire> wireList = submodel.getWires();
+               InnerWireParams wires[] = new InnerWireParams[wireList.size()];
+               i = 0;
+               for (GUIWire wire : wireList)
+               {
+                       InnerWireParams inner = new InnerWireParams();
+                       wires[i] = inner;
+                       InnerPinParams pin1Params = new InnerPinParams(), pin2Params = new InnerPinParams();
+
+                       pin1Params.pinName = wire.getPin1().name;
+                       pin1Params.compName = wire.getPin1().component.name;
+                       pin2Params.pinName = wire.getPin2().name;
+                       pin2Params.compName = wire.getPin2().component.name;
+                       inner.pin1 = pin1Params;
+                       inner.pin2 = pin2Params;
+                       inner.path = wire.getPath();
+                       i++;
+               }
+               params.innerWires = wires;
+               return params;
+       }
+
+       // operations no longer supported
+
+       @Override
+       protected void addPin(Pin pin)
+       {
+               throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead");
+       }
+
+       @Override
+       protected void removePin(String name)
+       {
+               throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead");
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java
new file mode 100644 (file)
index 0000000..9ac1749
--- /dev/null
@@ -0,0 +1,50 @@
+package net.mograsim.logic.model.model.components.submodels;
+
+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.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class SubmodelInterface extends GUIComponent
+{
+       public SubmodelInterface(ViewModelModifiable model, String name)
+       {
+               super(model, name);
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {// nothing to do here
+       }
+
+       /**
+        * {@inheritDoc}<br>
+        * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
+        * from a SubmodelInterface.<br>
+        * 
+        * @see GUIComponent#removePin(Pin)
+        * 
+        * @author Daniel Kirschten
+        */
+       @Override
+       public void addPin(Pin pin)
+       {
+               super.addPin(pin);
+       }
+
+       /**
+        * {@inheritDoc}<br>
+        * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
+        * from a SubmodelInterface.<br>
+        * 
+        * @see GUIComponent#removePin(Pin)
+        * 
+        * @author Daniel Kirschten
+        */
+       @Override
+       protected void removePin(String name)
+       {
+               super.removePin(name);
+       }
+}
\ No newline at end of file
diff --git 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
new file mode 100644 (file)
index 0000000..d9b7cb9
--- /dev/null
@@ -0,0 +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}.<br>
+        * Special cases: <code>null</code> 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<Runnable> redrawListeners;
+
+       private final Set<PathChangedListener> 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)}.<br>
+        * Special cases: <code>null</code> 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.<br>
+        * 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();
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/MovablePin.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/MovablePin.java
new file mode 100644 (file)
index 0000000..06f4de2
--- /dev/null
@@ -0,0 +1,22 @@
+package net.mograsim.logic.model.model.wires;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+/**
+ * Exactly like {@link Pin}, but {@link #setRelPos(double, double) setRelPos(...)} is public.
+ * 
+ * @author Daniel Kirschten
+ */
+public class MovablePin extends Pin
+{
+       public MovablePin(GUIComponent component, String name, int logicWidth, double relX, double relY)
+       {
+               super(component, name, logicWidth, relX, relY);
+       }
+
+       @Override
+       public void setRelPos(double relX, double relY)
+       {
+               super.setRelPos(relX, relY);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/Pin.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/Pin.java
new file mode 100644 (file)
index 0000000..794914e
--- /dev/null
@@ -0,0 +1,139 @@
+package net.mograsim.logic.model.model.wires;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+/**
+ * A connection interface between a GUIComponent and the rest of a ViewModel. Pins usually are created by {@link GUIComponent}s themselves.
+ * <br>
+ * A pin has a name identifying it. Pin names are unique for a {@link GUIComponent}: Every pin of a {@link GUIComponent} has a different
+ * name, but different {@link GUIComponent}s can have pins with the same name.
+ * 
+ * @author Daniel Kirschten
+ */
+public class Pin
+{
+       /**
+        * The {@link GUIComponent} this pin belongs to
+        */
+       public final GUIComponent component;
+       /**
+        * The name identifying this pin. Is unique for a {@link GUIComponent}.
+        */
+       public final String name;
+       /**
+        * The logical width of this pin. Denotes how many bits this pin consists of.
+        */
+       public final int logicWidth;
+
+       /**
+        * The X position of this pin, relative to its component's location.
+        */
+       protected double relX;
+       /**
+        * The Y position of this pin, relative to its component's location.
+        */
+       protected double relY;
+
+       private final List<Consumer<? super Pin>> pinMovedListeners;
+       private final List<Runnable> redrawListeners;
+
+       // creation and destruction
+
+       /**
+        * Creates a new pin. Usually it is not needed to call this constructor manually, as {@link GUIComponent}s create their pins themselves.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY)
+       {
+               this.component = component;
+               this.name = name;
+               this.logicWidth = logicWidth;
+               this.relX = relX;
+               this.relY = relY;
+
+               this.pinMovedListeners = new ArrayList<>();
+               this.redrawListeners = new ArrayList<>();
+
+               component.addComponentMovedListener(c -> callPinMovedListeners());
+       }
+
+       // "graphical" operations
+
+       /**
+        * Returns the X position of this pin relative to the position of its component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getRelX()
+       {
+               return relX;
+       }
+
+       /**
+        * Returns the Y position of this pin relative to the position of its component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public double getRelY()
+       {
+               return relY;
+       }
+
+       /**
+        * Returns the position of this pin relative to the position of its component.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Point getRelPos()
+       {
+               return new Point(relX, relY);
+       }
+
+       /**
+        * Returns the absolute position of this pin.
+        * 
+        * @author Daniel Kirschten
+        */
+       public Point getPos()
+       {
+               return new Point(relX + component.getPosX(), relY + component.getPosY());
+       }
+
+       /**
+        * Sets the position of this pin relative to the position of its component.
+        * 
+        * @author Daniel Kirschten
+        */
+       protected void setRelPos(double relX, double relY)
+       {
+               this.relX = relX;
+               this.relY = relY;
+               callPinMovedListeners();
+               callRedrawListeners();
+       }
+
+       // listeners
+
+       // @formatter:off
+       public void addPinMovedListener   (Consumer<? super Pin> listener){pinMovedListeners.add   (listener);}
+       public void addRedrawListener     (Runnable              listener){redrawListeners  .add   (listener);}
+
+       public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
+       public void removeRedrawListener  (Runnable              listener){redrawListeners  .remove(listener);}
+
+       private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
+       private void callRedrawListeners  () {redrawListeners  .forEach(l -> l.run   (    ));}
+       // @formatter:on
+
+       @Override
+       public String toString()
+       {
+               return "Pin [" + name + ", point=" + getPos() + "]";
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/WireCrossPoint.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/WireCrossPoint.java
new file mode 100644 (file)
index 0000000..52db277
--- /dev/null
@@ -0,0 +1,128 @@
+package net.mograsim.logic.model.model.wires;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+
+/**
+ * A {@link GUIComponent} with only one pin. Is used to create wires connecting more than two pins. <br>
+ * Example: There are three pins <code>P1</code>, <code>P2</code>, <code>P3</code> that need to be connected. Solution: Create a
+ * WireCrossPoint (<code>WCP</code>) and create the GUIWires <code>P1</code>-<code>WCP</code>, <code>P2</code>-<code>WCP</code>,
+ * <code>P3</code>-<code>WCP</code>.<br>
+ * Cross points are drawn as circles. The pin of cross points is in the center of this circle.
+ * 
+ * @author Daniel Kirschten
+ */
+public class WireCrossPoint extends GUIComponent
+{
+       private static final int CIRCLE_RADIUS = 1;
+       private static final int CIRCLE_DIAM = CIRCLE_RADIUS * 2;
+
+       /**
+        * The (single) pin of this cross point.
+        */
+       private final Pin pin;
+
+       /**
+        * A {@link LogicObserver} calling {@link #requestRedraw()}.
+        */
+       private final LogicObserver logicObs;
+       /**
+        * The {@link ReadEnd} currently bound to this cross point.
+        */
+       private ReadEnd end;
+
+       // creation and destruction
+
+       public WireCrossPoint(ViewModelModifiable model, int logicWidth)
+       {
+               this(model, logicWidth, null);
+       }
+
+       public WireCrossPoint(ViewModelModifiable model, int logicWidth, String name)
+       {
+               super(model, name);
+               logicObs = (i) -> requestRedraw();
+
+               setSize(CIRCLE_DIAM, CIRCLE_DIAM);
+               addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));
+       }
+
+       // pins
+
+       public Pin getPin()
+       {
+               return pin;
+       }
+
+       // "graphical" operations
+
+       /**
+        * Moves the center (and therefore the pin) of this {@link WireCrossPoint} to the given location.
+        * 
+        * @author Daniel Kirschten
+        */
+       public void moveCenterTo(double x, double y)
+       {
+               moveTo(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS);
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
+               if (wireColor != null)
+                       gc.setBackground(ColorManager.current().toColor(wireColor));
+               gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
+       }
+
+       // logic model binding
+
+       /**
+        * Binds this {@link WireCrossPoint} to the given {@link ReadEnd}: The color of this {@link WireCrossPoint} 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.<br>
+        * 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 WireCrossPoint} has a logic model binding or not.
+        */
+       public boolean hasLogicModelBinding()
+       {
+               return end != null;
+       }
+
+       // serializing
+
+       @Override
+       public JsonElement getParams()
+       {
+               return new JsonPrimitive(pin.logicWidth);
+       }
+
+       static
+       {
+               IndirectGUIComponentCreator.setComponentSupplier(WireCrossPoint.class.getCanonicalName(),
+                               (m, p, n) -> new WireCrossPoint(m, p.getAsInt(), n));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/LogicModelParameters.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/LogicModelParameters.java
new file mode 100644 (file)
index 0000000..1d83c5f
--- /dev/null
@@ -0,0 +1,7 @@
+package net.mograsim.logic.model.modeladapter;
+
+public class LogicModelParameters
+{
+       public int wireTravelTime;
+       public int gateProcessTime;
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java
new file mode 100644 (file)
index 0000000..16b52ee
--- /dev/null
@@ -0,0 +1,157 @@
+package net.mograsim.logic.model.modeladapter;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
+
+public class ViewLogicModelAdapter
+{
+       private final static Map<Class<? extends GUIComponent>, ComponentAdapter<? extends GUIComponent>> componentAdapters = new HashMap<>();
+
+       public static void addComponentAdapter(ComponentAdapter<? extends GUIComponent> componentAdapter)
+       {
+               componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter);
+       }
+
+       public static Timeline convert(ViewModel viewModel, LogicModelParameters params)
+       {
+               // TODO replace Timeline with LogicModel as soon as it exists
+               Timeline timeline = new Timeline(10);
+
+               convert(viewModel, params, timeline, Map.of());
+
+               return timeline;
+       }
+
+       private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map<Pin, Wire> externalWires)
+       {
+               Map<Pin, Wire> logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline);
+               Map<Pin, Wire> logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin);
+
+               for (GUIComponent guiComp : viewModel.getComponentsByName().values())
+               {
+                       if (guiComp instanceof SubmodelComponent)
+                       {
+                               SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp;
+                               Map<String, Pin> supermodelPins = guiCompCasted.getSupermodelPins();
+                               Map<Pin, Wire> externalWiresForSubmodel = supermodelPins.entrySet().stream()
+                                               .collect(Collectors.toMap(e -> guiCompCasted.getSubmodelPin(e.getKey()), e -> logicWiresPerPin.get(e.getValue())));
+                               convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel);
+                       } else if (guiComp instanceof WireCrossPoint)
+                       {
+                               WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp;
+                               guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd());
+                       } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces
+                               createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass()));
+               }
+       }
+
+       private static Set<Pin> getAllPins(ViewModel viewModel)
+       {
+               return viewModel.getComponentsByName().values().stream().flatMap(component -> component.getPins().values().stream())
+                               .collect(Collectors.toSet());
+       }
+
+       private static Map<Pin, Wire> convertWires(Set<Pin> allPins, List<GUIWire> wires, Map<Pin, Wire> externalWires,
+                       LogicModelParameters params, Timeline timeline)
+       {
+               Map<Pin, Set<Pin>> connectedPinGroups = getConnectedPinGroups(allPins, wires);
+               Map<Pin, Wire> logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups, externalWires);
+               setGUIWiresLogicModelBinding(wires, logicWiresPerPin);
+               return logicWiresPerPin;
+       }
+
+       private static Map<Pin, Wire> createLogicWires(LogicModelParameters params, Timeline timeline, Map<Pin, Set<Pin>> connectedPinGroups,
+                       Map<Pin, Wire> externalWires)
+       {
+               Map<Pin, Wire> logicWiresPerPin = new HashMap<>();
+               Map<Set<Pin>, Wire> logicWiresPerPinGroup = new HashMap<>();
+               for (Entry<Pin, Set<Pin>> e : connectedPinGroups.entrySet())
+                       logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), set ->
+                       {
+                               Wire externalWire = null;
+                               for (Pin p : set)
+                               {
+                                       Wire externalWireCandidate = externalWires.get(p);
+                                       if (externalWireCandidate != null)
+                                               if (externalWire == null)
+                                                       externalWire = externalWireCandidate;
+                                               else if (externalWire.length == externalWireCandidate.length)
+                                                       Wire.fuse(externalWire, externalWireCandidate);
+                                               else
+                                                       throw new IllegalArgumentException(
+                                                                       "Two pins to external wires with different logicWidths can't be connected directly");
+                               }
+                               return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire;
+                       }));
+               return logicWiresPerPin;
+       }
+
+       private static void setGUIWiresLogicModelBinding(List<GUIWire> wires, Map<Pin, Wire> logicWiresPerPin)
+       {
+               Map<Wire, ReadEnd> guiWireSharedReadEnd = logicWiresPerPin.values().stream().distinct()
+                               .collect(Collectors.toMap(Function.identity(), Wire::createReadOnlyEnd));
+               for (GUIWire guiWire : wires)
+                       guiWire.setLogicModelBinding(guiWireSharedReadEnd.get(logicWiresPerPin.get(guiWire.getPin1())));
+       }
+
+       private static Map<Pin, Set<Pin>> getConnectedPinGroups(Set<Pin> allPins, List<GUIWire> wires)
+       {
+               Map<Pin, Set<Pin>> connectedPinsPerPin = new HashMap<>();
+
+               for (Pin p : allPins)
+               {
+                       HashSet<Pin> connectedPins = new HashSet<>();
+                       connectedPins.add(p);
+                       connectedPinsPerPin.put(p, connectedPins);
+               }
+
+               wires.forEach(wire ->
+               {
+                       Pin pin1 = wire.getPin1();
+                       Pin pin2 = wire.getPin2();
+
+                       Set<Pin> pin1ConnectedPins = connectedPinsPerPin.get(pin1);
+                       Set<Pin> pin2ConnectedPins = connectedPinsPerPin.get(pin2);
+
+                       pin1ConnectedPins.addAll(pin2ConnectedPins);
+                       pin1ConnectedPins.add(pin1);
+                       pin1ConnectedPins.add(pin2);
+
+                       pin2ConnectedPins.forEach(pin -> connectedPinsPerPin.put(pin, pin1ConnectedPins));
+               });
+               return connectedPinsPerPin;
+       }
+
+       @SuppressWarnings("unchecked")
+       private static <G extends GUIComponent> void createAndLinkComponent(Timeline timeline, LogicModelParameters params,
+                       GUIComponent guiComponent, Map<Pin, Wire> logicWiresPerPin, ComponentAdapter<G> adapter)
+       {
+               if (adapter == null)
+                       throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass());
+               adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin);
+       }
+
+       private ViewLogicModelAdapter()
+       {
+               throw new UnsupportedOperationException("No ViewLogicModelConverter instances");
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/BitDisplayAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/BitDisplayAdapter.java
new file mode 100644 (file)
index 0000000..7e0a063
--- /dev/null
@@ -0,0 +1,29 @@
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class BitDisplayAdapter implements ComponentAdapter<GUIBitDisplay>
+{
+       @Override
+       public Class<GUIBitDisplay> getSupportedClass()
+       {
+               return GUIBitDisplay.class;
+       }
+
+       @Override
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent,
+                       Map<Pin, Wire> logicWiresPerPin)
+       {
+               ReadEnd end = logicWiresPerPin.get(guiComponent.getInputPin()).createReadOnlyEnd();
+               BitDisplay bitDisplay = new BitDisplay(timeline, end);
+               guiComponent.setLogicModelBinding(bitDisplay);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ComponentAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ComponentAdapter.java
new file mode 100644 (file)
index 0000000..b7780b3
--- /dev/null
@@ -0,0 +1,16 @@
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public interface ComponentAdapter<G extends GUIComponent>
+{
+       public Class<G> getSupportedClass();
+
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin);
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ManualSwitchAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/ManualSwitchAdapter.java
new file mode 100644 (file)
index 0000000..7ba8544
--- /dev/null
@@ -0,0 +1,29 @@
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class ManualSwitchAdapter implements ComponentAdapter<GUIManualSwitch>
+{
+       @Override
+       public Class<GUIManualSwitch> getSupportedClass()
+       {
+               return GUIManualSwitch.class;
+       }
+
+       @Override
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent,
+                       Map<Pin, Wire> logicWiresPerPin)
+       {
+               ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
+               ManualSwitch manualSwitch = new ManualSwitch(timeline, end);
+               guiComponent.setLogicModelBinding(manualSwitch, end);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/NoLogicAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/NoLogicAdapter.java
new file mode 100644 (file)
index 0000000..a084ba8
--- /dev/null
@@ -0,0 +1,36 @@
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+/**
+ * For GUIComponents that do not have any simulation logic behaviour
+ *
+ * @author Christian Femers
+ */
+public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>
+{
+       private final Class<T> guiComponentClass;
+
+       public NoLogicAdapter(Class<T> guiComponentClass)
+       {
+               this.guiComponentClass = guiComponentClass;
+       }
+
+       @Override
+       public Class<T> getSupportedClass()
+       {
+               return guiComponentClass;
+       }
+
+       @Override
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)
+       {
+               // do nothing
+       }
+}
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/SimpleGateAdapter.java
new file mode 100644 (file)
index 0000000..2a80046
--- /dev/null
@@ -0,0 +1,50 @@
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.Component;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
+import net.mograsim.logic.model.model.components.atomic.SimpleRectangularGUIGate;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
+{
+       private final Class<G> supportedClass;
+       private final ComponentConstructor constructor;
+
+       public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
+       {
+               this.supportedClass = supportedClass;
+               this.constructor = constructor;
+       }
+
+       @Override
+       public Class<G> getSupportedClass()
+       {
+               return supportedClass;
+       }
+
+       @Override
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
+       {
+               ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getPin("Y")).createReadWriteEnd();
+
+               // TODO can we do this prettier?
+               int inputPinCount = guiComponent.getPins().size() - 1;
+               ReadEnd[] ins = new ReadEnd[inputPinCount];
+               for (int i = 0; i < inputPinCount; i++)
+                       ins[i] = logicWiresPerPin.get(guiComponent.getPin(String.valueOf((char) ('A' + i)))).createReadOnlyEnd();
+
+               constructor.newComponent(timeline, params.gateProcessTime, out, ins);
+       }
+
+       public static interface ComponentConstructor
+       {
+               public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
+       }
+
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/CodeSnippetSupplier.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/CodeSnippetSupplier.java
new file mode 100644 (file)
index 0000000..f9f151b
--- /dev/null
@@ -0,0 +1,117 @@
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.outlinerenderers.DefaultOutlineRenderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.DefaultSymbolRenderer;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class CodeSnippetSupplier<S>
+{
+       // public static members
+       public static final CodeSnippetSupplier<Renderer> symbolRendererSupplier;
+       public static final CodeSnippetSupplier<Renderer> outlineRendererSupplier;
+       public static final CodeSnippetSupplier<HighLevelStateHandler> highLevelStateHandlerSupplier;
+
+       static
+       {
+               symbolRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+               outlineRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
+               highLevelStateHandlerSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultHighLevelStateHandler::new));
+       }
+
+       // per-instance members
+
+       private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
+       private final Map<String, SnippetSupplier<?, S>> snippetSuppliersForClassNames = new HashMap<>();
+       private final SnippetSupplier<?, S> defaultSnippetSupplier;
+
+       private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetSupplier)
+       {
+               this.defaultSnippetSupplier = defaultSnippetSupplier;
+       }
+
+       public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
+       {
+               standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
+       }
+
+       public void setSnippetSupplier(String id, SnippetSupplier<?, S> snippetSupplier)
+       {
+               snippetSuppliersForClassNames.put(id, snippetSupplier);
+       }
+
+       // TODO report errors
+       public SnippetSupplier<?, S> getSnippetSupplier(String id)
+       {
+               if (id != null)
+               {
+                       String snippetClassName;
+                       if (id.startsWith("class:"))
+                               snippetClassName = id.substring(6);
+                       else
+                               snippetClassName = standardSnippetIDClassNames.get(id);
+                       if (snippetClassName != null)
+                       {
+                               tryLoadSnippetClass(snippetClassName);
+                               SnippetSupplier<?, S> snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName);
+                               if (snippetSupplier != null)
+                                       return snippetSupplier;
+                       }
+                       System.err.println("Couldn't load snippet " + id + "; using default");
+               }
+               return defaultSnippetSupplier;
+       }
+
+       // static helpers
+
+       static
+       {
+               try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json"))
+               {
+                       if (s == null)
+                               throw new IOException("Resource not found");
+                       SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class);
+                       tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID);
+                       tmp.standardSymbolRendererSuppliers.forEach(symbolRendererSupplier::addStandardSnippetID);
+                       tmp.standardHighLevelStateHandlerSuppliers.forEach(highLevelStateHandlerSupplier::addStandardSnippetID);
+               }
+               catch (Exception e)
+               {
+                       System.err.println("Failed to initialize standard snippet ID mapping: ");
+                       e.printStackTrace();
+               }
+       }
+
+       private static class SnippetIDClassNames
+       {
+               public Map<String, String> standardOutlineRendererSuppliers;
+               public Map<String, String> standardSymbolRendererSuppliers;
+               public Map<String, String> standardHighLevelStateHandlerSuppliers;
+       }
+
+       private static void tryLoadSnippetClass(String snippetClassName)
+       {
+               tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n");
+       }
+
+       public static void tryInvokeStaticInitializer(String className, String errorMessageFormat)
+       {
+               try
+               {
+                       Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader());
+               }
+               catch (ClassNotFoundException e)
+               {
+                       System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage());
+               }
+       }
+
+}
\ No newline at end of file
diff --git 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
new file mode 100644 (file)
index 0000000..adf2433
--- /dev/null
@@ -0,0 +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
+       public Pin addSubmodelInterface(MovablePin supermodelPin)
+       {
+               return super.addSubmodelInterface(supermodelPin);
+       }
+
+       @Override
+       public double getSubmodelScale()
+       {
+               return super.getSubmodelScale();
+       }
+
+       @Override
+       public Map<String, MovablePin> getSubmodelMovablePins()
+       {
+               return super.getSubmodelMovablePins();
+       }
+
+       @Override
+       public void removeSubmodelInterface(String name)
+       {
+               super.removeSubmodelInterface(name);
+       }
+}
\ No newline at end of file
diff --git 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
new file mode 100644 (file)
index 0000000..1c6a484
--- /dev/null
@@ -0,0 +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<String, String> standardComponentIDs = new HashMap<>();
+
+       private static final Map<String, ComponentSupplier> componentSuppliers = new HashMap<>();
+
+       static
+       {
+               try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardComponentIDMapping.json"))
+               {
+                       if (s == null)
+                               throw new IOException("Resource not found");
+                       Map<String, String> 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<String> 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);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentDeserializer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentDeserializer.java
new file mode 100644 (file)
index 0000000..a5e8793
--- /dev/null
@@ -0,0 +1,102 @@
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.util.Map;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.InterfacePinParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
+
+/**
+ * Creates {@link SubmodelComponent}s from {@link SubmodelComponentParams}
+ */
+public final class SubmodelComponentDeserializer
+{
+       /**
+        * Like {@link #create(ViewModelModifiable, String, String)}, but using the default name.
+        */
+       public static SubmodelComponent create(ViewModelModifiable model, String path)
+       {
+               return create(model, path, null);
+       }
+
+       /**
+        * Creates a {@link SubmodelComponent} from the {@link SubmodelComponentParams} located at the given path as a JSON file. The returned
+        * SubmodelComponent is a {@link DeserializedSubmodelComponent}.
+        * 
+        * @param path The path of the file describing the {@link SubmodelComponentParams}, which define the new {@link SubmodelComponent}
+        * @return A new SubmodelComponent, as described in the file located at the given path
+        */
+       public static SubmodelComponent create(ViewModelModifiable model, String path, String name)
+       {
+               try
+               {
+                       SubmodelComponentParams params = SubmodelComponentParams.readJson(path);
+                       SubmodelComponent ret = create(model, params, name);
+                       return ret;
+               }
+               catch (IOException e)
+               {
+                       throw new RuntimeException("Failed to construct GUICustomComponent. Parameters were not found.", e);
+               }
+       }
+
+       /**
+        * Creates a {@link SubmodelComponent} from the specified {@link SubmodelComponentParams}. The returned SubmodelComponent is a
+        * {@link DeserializedSubmodelComponent}.
+        * 
+        * @param params The parameters describing the {@link SubmodelComponent}
+        * 
+        * @return A new SubmodelComponent, as described by the {@link SubmodelComponentParams}
+        */
+       public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params, String name)
+       {
+               DeserializedSubmodelComponent comp = createSubmodelComponent(model, params, name);
+               initSubmodel(comp, params.submodel);
+               return comp;
+       }
+
+       private static DeserializedSubmodelComponent createSubmodelComponent(ViewModelModifiable model, SubmodelComponentParams params,
+                       String name)
+       {
+               DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model, name);
+               comp.setSubmodelScale(params.submodel.innerScale);
+               comp.setOutlineRenderer(CodeSnippetSupplier.outlineRendererSupplier.getSnippetSupplier(params.outlineRendererSnippetID).create(comp,
+                               params.outlineRendererParams));
+               comp.setSymbolRenderer(CodeSnippetSupplier.symbolRendererSupplier.getSnippetSupplier(params.symbolRendererSnippetID).create(comp,
+                               params.symbolRendererParams));
+               // TODO high level states
+               comp.setSize(params.width, params.height);
+               for (InterfacePinParams iPinParams : params.interfacePins)
+                       comp.addSubmodelInterface(
+                                       new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y));
+               return comp;
+       }
+
+       @SuppressWarnings("unused") // GUIWire being created
+       private static void initSubmodel(DeserializedSubmodelComponent comp, SubmodelParameters params)
+       {
+               ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
+               Map<String, GUIComponent> componentsByName = submodelModifiable.getComponentsByName();
+               GUIComponent[] components = new GUIComponent[params.subComps.length];
+               for (int i = 0; i < components.length; i++)
+               {
+                       InnerComponentParams cParams = params.subComps[i];
+                       components[i] = IndirectGUIComponentCreator.createComponent(submodelModifiable, cParams.id, cParams.params, cParams.name);
+                       components[i].moveTo(cParams.pos.x, cParams.pos.y);
+               }
+
+               for (int i = 0; i < params.innerWires.length; i++)
+               {
+                       InnerWireParams innerWire = params.innerWires[i];
+                       new GUIWire(submodelModifiable, componentsByName.get(innerWire.pin1.compName).getPin(innerWire.pin1.pinName),
+                                       componentsByName.get(innerWire.pin2.compName).getPin(innerWire.pin2.pinName), innerWire.path);
+               }
+       }
+}
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java
new file mode 100644 (file)
index 0000000..afce226
--- /dev/null
@@ -0,0 +1,83 @@
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+
+import com.google.gson.JsonElement;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.util.JsonHandler;
+
+/**
+ * This class contains all the information necessary to create a new {@link SubmodelComponent}
+ */
+public class SubmodelComponentParams
+{
+       // basic stuff
+       public double width, height;
+       public InterfacePinParams[] interfacePins;
+       public SubmodelParameters submodel;
+
+       // functionality that needs to be expressed in Java code
+       public String outlineRendererSnippetID;
+       public JsonElement outlineRendererParams;
+
+       public String symbolRendererSnippetID;
+       public JsonElement symbolRendererParams;
+
+       public static class InterfacePinParams
+       {
+               public Point location;
+               public String name;
+               public int logicWidth;
+       }
+
+       public static class SubmodelParameters
+       {
+               public double innerScale;
+               public InnerComponentParams[] subComps;
+               public InnerWireParams[] innerWires;
+
+               public static class InnerComponentParams
+               {
+                       public Point pos;
+                       public String id;
+                       public String name;
+                       public JsonElement params;
+               }
+
+               public static class InnerWireParams
+               {
+                       public InnerPinParams pin1, pin2;
+                       public Point[] path;
+
+                       public static class InnerPinParams
+                       {
+                               public String compName;
+                               public String pinName;
+                       }
+               }
+       }
+
+       public static SubmodelComponentParams readJson(String path) throws IOException
+       {
+               return JsonHandler.readJson(path, SubmodelComponentParams.class);
+       }
+
+       /**
+        * Writes this {@link SubmodelComponentParams} object into a file in json format. The correct file extension is important! Check
+        * {@link SubmodelComponentParams}.fileExtension
+        */
+       public void writeJson(String path)
+       {
+               try
+               {
+                       JsonHandler.writeJson(this, path);
+               }
+               catch (IOException e)
+               {
+                       System.err.println("Failed to write SubComponentParams to file");
+                       e.printStackTrace();
+               }
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/HighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/HighLevelStateHandler.java
new file mode 100644 (file)
index 0000000..f20b664
--- /dev/null
@@ -0,0 +1,34 @@
+package net.mograsim.logic.model.serializing.snippets;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+public interface HighLevelStateHandler
+{
+       /**
+        * Sets the given high-level state to the given value. <br>
+        * A high level state ID consists of parts separated by dots ('.').<br>
+        * The last part (the part after the last dot) is called "atomic high level state ID". The parts before that part are called
+        * "subcomponent ID"s.<br>
+        * If there is no dot in a high level state ID, the whole high level state ID is called atomic.<br>
+        * Note that subcomponent IDs don't have to correspond to actual subcomponents. For example, a RAM component may supply subcomponent IDs
+        * "c0000", "c0001" ... "cFFFF" without actually having a subcomponent for each cell. It also is allowed to delegate an atomic high
+        * level state ID to a subcomponent.
+        * 
+        * @see #getHighLevelState(String)
+        * @see GUIComponent#setHighLevelState(String, Object)
+        * 
+        * @author Daniel Kirschten
+        */
+       public void setHighLevelState(String stateID, Object newState);
+
+       /**
+        * Gets the current value of the given high-level state. <br>
+        * See {@link #setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+        * 
+        * @see #setHighLevelState(String, Object)
+        * @see GUIComponent#getHighLevelState(String)
+        * 
+        * @author Daniel Kirschten
+        */
+       public Object getHighLevelState(String stateID);
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/Renderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/Renderer.java
new file mode 100644 (file)
index 0000000..140780b
--- /dev/null
@@ -0,0 +1,9 @@
+package net.mograsim.logic.model.serializing.snippets;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public interface Renderer
+{
+       public void render(GeneralGC gc, Rectangle visibleRegion);
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/SnippetSupplier.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/SnippetSupplier.java
new file mode 100644 (file)
index 0000000..a2b71b5
--- /dev/null
@@ -0,0 +1,38 @@
+package net.mograsim.logic.model.serializing.snippets;
+
+import java.util.function.BiFunction;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+
+public interface SnippetSupplier<P, S>
+{
+       public Class<P> getParamClass();
+
+       public S create(SubmodelComponent component, P params);
+
+       public default S create(SubmodelComponent component, JsonElement params)
+       {
+               return create(component, new Gson().fromJson(params, getParamClass()));
+       }
+
+       public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
+       {
+               return new SnippetSupplier<>()
+               {
+                       @Override
+                       public Class<P> getParamClass()
+                       {
+                               return paramClass;
+                       }
+
+                       @Override
+                       public S create(SubmodelComponent component, P params)
+                       {
+                               return supplier.apply(component, params);
+                       }
+               };
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/highlevelstatehandlers/DefaultHighLevelStateHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/highlevelstatehandlers/DefaultHighLevelStateHandler.java
new file mode 100644 (file)
index 0000000..eb08add
--- /dev/null
@@ -0,0 +1,33 @@
+package net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers;
+
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+
+public class DefaultHighLevelStateHandler implements HighLevelStateHandler
+{
+       @SuppressWarnings("unused") // we don't need the component; and params are always null
+       public DefaultHighLevelStateHandler(SubmodelComponent component, Void params)
+       {
+               // nothing to do here
+       }
+
+       @Override
+       public void setHighLevelState(String stateID, Object newState)
+       {
+               throw new IllegalArgumentException("No high level state with ID " + stateID);
+       }
+
+       @Override
+       public Object getHighLevelState(String stateID)
+       {
+               throw new IllegalArgumentException("No high level state with ID " + stateID);
+       }
+
+       static
+       {
+               CodeSnippetSupplier.highLevelStateHandlerSupplier.setSnippetSupplier(DefaultHighLevelStateHandler.class.getCanonicalName(),
+                               SnippetSupplier.create(Void.class, DefaultHighLevelStateHandler::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java
new file mode 100644 (file)
index 0000000..3152864
--- /dev/null
@@ -0,0 +1,37 @@
+package net.mograsim.logic.model.serializing.snippets.outlinerenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultOutlineRenderer implements Renderer
+{
+       private final GUIComponent component;
+
+       public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+       {
+               this.component = component;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               gc.drawRectangle(component.getBounds());
+       }
+
+       static
+       {
+               CodeSnippetSupplier.outlineRendererSupplier.setSnippetSupplier(DefaultOutlineRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java
new file mode 100644 (file)
index 0000000..9ccfa9c
--- /dev/null
@@ -0,0 +1,58 @@
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+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.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.
+ * 
+ * @author Daniel Kirschten
+ */
+public class CenteredTextSymbolRenderer implements Renderer
+{
+       private final GUIComponent component;
+       private final CenteredTextParams params;
+
+       public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params)
+       {
+               this.component = component;
+               this.params = params;
+
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Font oldFont = gc.getFont();
+               gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle()));
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               Point idSize = gc.textExtent(params.text);
+               Rectangle bounds = component.getBounds();
+               gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+               gc.setFont(oldFont);
+       }
+
+       public static class CenteredTextParams
+       {
+               public String text;
+               public double fontHeight;
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(CenteredTextSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java
new file mode 100644 (file)
index 0000000..e6beadf
--- /dev/null
@@ -0,0 +1,42 @@
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+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.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultSymbolRenderer implements Renderer
+{
+       private static final String id = "<Symbol\nunknown>";
+
+       private final GUIComponent component;
+
+       public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+       {
+               this.component = component;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               Point idSize = gc.textExtent(id);
+               Rectangle bounds = component.getBounds();
+               gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(DefaultSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java
new file mode 100644 (file)
index 0000000..30ab4bc
--- /dev/null
@@ -0,0 +1,82 @@
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+import java.util.Map.Entry;
+
+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.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
+ * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
+ * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
+ * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.
+ * 
+ * @author Daniel Kirschten
+ */
+public class SimpleRectangularLikeSymbolRenderer implements Renderer
+{
+       private final GUIComponent component;
+       private final SimpleRectangularLikeParams params;
+
+       public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params)
+       {
+               this.component = component;
+               this.params = params;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               double posX = component.getPosX();
+               double posY = component.getPosY();
+               double width = component.getWidth();
+               double height = component.getHeight();
+
+               Font oldFont = gc.getFont();
+               gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle()));
+               Point textExtent = gc.textExtent(params.centerText);
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
+               gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle()));
+               for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
+               {
+                       String pinName = pinEntry.getKey();
+                       Pin pin = pinEntry.getValue();
+                       double pinX = pin.getRelX();
+                       double pinY = posY + pin.getRelY();
+                       textExtent = gc.textExtent(pinName);
+                       gc.drawText(pinName,
+                                       posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin),
+                                       pinY - textExtent.y / 2, true);
+               }
+               gc.setFont(oldFont);
+       }
+
+       public static class SimpleRectangularLikeParams
+       {
+               public String centerText;
+               public double centerTextHeight;
+               public double horizontalComponentCenter;
+               public double pinLabelHeight;
+               public double pinLabelMargin;
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json
new file mode 100644 (file)
index 0000000..ad0194a
--- /dev/null
@@ -0,0 +1,36 @@
+mograsim version: 0.1.3
+{
+  "GUIAm2901": "file:components/am2901/GUIAm2901.json",
+  "GUIAm2901ALUFuncDecode": "file:components/am2901/GUIAm2901ALUFuncDecode.json",
+  "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
+  "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
+  "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
+  "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
+  "GUIAm2901QReg": "file:components/am2901/GUIAm2901QReg.json",
+  "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
+  "GUIAndGate": "class:net.mograsim.logic.model.model.components.atomic.GUIAndGate",
+  "GUINandGate": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+  "GUIOrGate": "class:net.mograsim.logic.model.model.components.atomic.GUIOrGate",
+  "GUI_rsLatch": "file:components/GUI_rsLatch.json",
+  "GUIand": "file:components/GUIand.json",
+  "GUIand41": "file:components/GUIand41.json",
+  "GUIandor414": "file:components/GUIandor414.json",
+  "GUIdemux2": "file:components/GUIdemux2.json",
+  "GUIdff": "file:components/GUIdff.json",
+  "GUIdlatch": "file:components/GUIdlatch.json",
+  "GUIdlatch4": "file:components/GUIdlatch4.json",
+  "GUIfulladder": "file:components/GUIfulladder.json",
+  "GUIhalfadder": "file:components/GUIhalfadder.json",
+  "GUImux1": "file:components/GUImux1.json",
+  "GUImux1_4": "file:components/GUImux1_4.json",
+  "GUInand3": "file:components/GUInand3.json",
+  "GUInot4": "file:components/GUInot4.json",
+  "GUIor4": "file:components/GUIor4.json",
+  "GUIor_4": "file:components/GUIor_4.json",
+  "GUIram2": "file:components/GUIram2.json",
+  "GUIram4": "file:components/GUIram4.json",
+  "GUIsel2_4": "file:components/GUIsel2_4.json",
+  "GUIsel3_4": "file:components/GUIsel3_4.json",
+  "GUIxor": "file:components/GUIxor.json",
+  "WireCrossPoint": "class:net.mograsim.logic.model.model.wires.WireCrossPoint"
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardSnippetIDMapping.json b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardSnippetIDMapping.json
new file mode 100644 (file)
index 0000000..db79c5f
--- /dev/null
@@ -0,0 +1,9 @@
+mograsim version: 0.1.3
+{
+  "standardOutlineRendererSuppliers": {},
+  "standardSymbolRendererSuppliers": {
+    "CenteredTextSymbolRenderer": "net.mograsim.logic.model.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
+    "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
+  },
+  "standardHighLevelStateHandlerSuppliers": {}
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/util/JsonHandler.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/util/JsonHandler.java
new file mode 100644 (file)
index 0000000..9cd9e8c
--- /dev/null
@@ -0,0 +1,56 @@
+package net.mograsim.logic.model.util;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.stream.Collectors;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class JsonHandler
+{
+       private static Gson parser = new GsonBuilder().setPrettyPrinting().create();
+
+       public static <T> T readJson(String path, Class<T> type) throws IOException
+       {
+               try (FileInputStream jsonStream = new FileInputStream(path))
+               {
+                       return readJson(jsonStream, type);
+               }
+       }
+
+       /**
+        * @param input The Stream is closed after being read
+        */
+       public static <T> T readJson(InputStream input, Class<T> type) throws IOException
+       {
+               try (InputStreamReader reader = new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader))
+               {
+                       return fromJson(bf.lines().collect(Collectors.joining("\n")), type);
+               }
+       }
+
+       public static <T> T fromJson(String src, Class<T> type)
+       {
+               // TODO actually parse and compare version
+               String rawJson = src.lines().dropWhile(s -> s.length() == 0 || s.charAt(0) != '{').collect(Collectors.joining());
+               return parser.fromJson(rawJson, type);
+       }
+
+       public static void writeJson(Object o, String path) throws IOException
+       {
+               try (FileWriter writer = new FileWriter(path))
+               {
+                       writer.write(toJson(o));
+               }
+       }
+
+       public static String toJson(Object o)
+       {
+               return String.format("mograsim version: %s\n%s", Version.jsonCompVersion.toString(), parser.toJson(o));
+       }
+}
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/util/ModellingTool.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/util/ModellingTool.java
new file mode 100644 (file)
index 0000000..f3b9424
--- /dev/null
@@ -0,0 +1,67 @@
+package net.mograsim.logic.model.util;
+
+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.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+
+public class ModellingTool
+{
+       private ViewModelModifiable model;
+
+       ModellingTool(ViewModelModifiable model)
+       {
+               this.model = model;
+       }
+
+       public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)
+       {
+               return connect(a.getPin(pinA), b.getPin(pinB));
+       }
+
+       public GUIWire connect(WireCrossPoint a, GUIComponent b, String pinB)
+       {
+               return connect(a.getPin(), b.getPin(pinB));
+       }
+
+       public GUIWire connect(Pin a, GUIComponent b, String pinB)
+       {
+               return connect(a, b.getPin(pinB));
+       }
+
+       public GUIWire connect(GUIComponent a, WireCrossPoint b, String pinA)
+       {
+               return connect(a.getPin(pinA), b.getPin());
+       }
+
+       public GUIWire connect(WireCrossPoint a, WireCrossPoint b)
+       {
+               return connect(a.getPin(), b.getPin());
+       }
+
+       public GUIWire connect(Pin a, WireCrossPoint b)
+       {
+               return connect(a, b.getPin());
+       }
+
+       public GUIWire connect(GUIComponent a, Pin b, String pinA)
+       {
+               return connect(a.getPin(pinA), b);
+       }
+
+       public GUIWire connect(WireCrossPoint a, Pin b)
+       {
+               return connect(a.getPin(), b);
+       }
+
+       public GUIWire connect(Pin a, Pin b)
+       {
+               return new GUIWire(model, a, b);
+       }
+
+       public static ModellingTool createFor(ViewModelModifiable model)
+       {
+               return new ModellingTool(model);
+       }
+}
diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/util/Version.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/util/Version.java
new file mode 100644 (file)
index 0000000..b0a7298
--- /dev/null
@@ -0,0 +1,69 @@
+package net.mograsim.logic.model.util;
+
+public final class Version
+{
+       public final static Version jsonCompVersion = new Version(0, 1, 3);
+       public final int major, minor, patch;
+
+       public Version(int major, int minor, int patch)
+       {
+               super();
+               this.major = major;
+               this.minor = minor;
+               this.patch = patch;
+       }
+
+       public int[] getVersionNumbers()
+       {
+               return new int[] { major, minor, patch };
+       }
+
+       @Override
+       public String toString()
+       {
+               return major + "." + minor + "." + patch;
+       }
+
+       @Override
+       public int hashCode()
+       {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + major;
+               result = prime * result + minor;
+               result = prime * result + patch;
+               return result;
+       }
+
+       @Override
+       public boolean equals(Object obj)
+       {
+               if (this == obj)
+                       return true;
+               if (!(obj instanceof Version))
+                       return false;
+               Version other = (Version) obj;
+               if (major != other.major)
+                       return false;
+               if (minor != other.minor)
+                       return false;
+               if (patch != other.patch)
+                       return false;
+               return true;
+       }
+
+       public boolean is(int major)
+       {
+               return major != this.major;
+       }
+
+       public boolean is(int major, int minor)
+       {
+               return is(major) && this.minor == minor;
+       }
+
+       public boolean is(int major, int minor, int patch)
+       {
+               return is(major, minor) && this.patch == patch;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/.classpath b/net.mograsim.logic.ui.am2900/.classpath
deleted file mode 100644 (file)
index da70a87..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
-               <attributes>
-                       <attribute name="module" value="true"/>
-               </attributes>
-       </classpathentry>
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" output="bin/src" path="src"/>
-       <classpathentry kind="src" output="bin/test" path="test">
-               <attributes>
-                       <attribute name="test" value="true"/>
-               </attributes>
-       </classpathentry>
-       <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/net.mograsim.logic.ui.am2900/.gitignore b/net.mograsim.logic.ui.am2900/.gitignore
deleted file mode 100644 (file)
index ae3c172..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/net.mograsim.logic.ui.am2900/.project b/net.mograsim.logic.ui.am2900/.project
deleted file mode 100644 (file)
index b6f5f40..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>net.mograsim.logic.ui.am2900</name>
-       <comment></comment>
-       <projects>
-               <project>net.mograsim.logic.ui</project>
-               <project>SWTZoomableCanvas</project>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.jdt.core.javabuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.ManifestBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.SchemaBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.jdt.core.javanature</nature>
-               <nature>org.eclipse.pde.PluginNature</nature>
-       </natures>
-</projectDescription>
diff --git a/net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index f8bd225..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-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.APILeak=warning
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
-org.eclipse.jdt.core.formatter.align_with_spaces=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
-org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=140
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.lineSplit=140
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.ui.am2900/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644 (file)
index 8f2c0a4..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_MoGraSim
-formatter_settings_version=16
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
-sp_cleanup.organize_imports=false
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_modifiers=false
-sp_cleanup.remove_redundant_semicolons=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/net.mograsim.logic.ui.am2900/FullAdder.json b/net.mograsim.logic.ui.am2900/FullAdder.json
deleted file mode 100644 (file)
index 40c51c7..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-mograsim version: 0.1.1
-{
-  "type": "SimpleRectangularSubmodelComponent",
-  "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
-    }
-  ],
-  "composition": {
-    "innerScale": 0.4,
-    "subComps": [
-      {
-        "pos": {
-          "x": 5.0,
-          "y": 40.0
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
-        "params": {}
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 7.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
-        "params": {}
-      },
-      {
-        "pos": {
-          "x": 57.5,
-          "y": 40.0
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
-        "params": {
-          "logicWidth": 1
-        }
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "_Z"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "_Z"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Z"
-        }
-      }
-    ]
-  },
-  "specialized": {
-    "input_count": 3,
-    "label": "GUIfulladder",
-    "logic_width": 1,
-    "output_count": 2
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/HalfAdder.json b/net.mograsim.logic.ui.am2900/HalfAdder.json
deleted file mode 100644 (file)
index 48c1980..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-mograsim version: 0.1.1
-{
-  "type": "SimpleRectangularSubmodelComponent",
-  "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
-    }
-  ],
-  "composition": {
-    "innerScale": 0.4,
-    "subComps": [
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 15.0
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 2.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 27.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 2.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 11.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 36.5
-        },
-        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
-        "params": {
-          "logicWidth": 1
-        }
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 24.0
-        },
-        "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
-        "params": {
-          "logicWidth": 1
-        }
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "_Z"
-        },
-        "path": [
-          {
-            "x": 80.0,
-            "y": 25.0
-          },
-          {
-            "x": 80.0,
-            "y": 37.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 62.5,
-            "y": 12.5
-          },
-          {
-            "x": 62.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 62.5,
-            "y": 37.5
-          },
-          {
-            "x": 62.5,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        },
-        "path": []
-      }
-    ]
-  },
-  "specialized": {
-    "input_count": 2,
-    "label": "GUIhalfadder",
-    "logic_width": 1,
-    "output_count": 2
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/META-INF/MANIFEST.MF b/net.mograsim.logic.ui.am2900/META-INF/MANIFEST.MF
deleted file mode 100644 (file)
index 627efe1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: net.mograsim.logic.ui.am2900;singleton:=true
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui.examples,
- net.mograsim.logic.ui.model.components.mi.nandbased,
- net.mograsim.logic.ui.model.components.mi.nandbased.am2901
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Require-Bundle: net.mograsim.logic.ui;bundle-version="0.1.0";visibility:=reexport
-Automatic-Module-Name: net.mograsim.logic.ui
-Bundle-Vendor: Mograsim Team
diff --git a/net.mograsim.logic.ui.am2900/OSGI-INF/l10n/bundle.properties b/net.mograsim.logic.ui.am2900/OSGI-INF/l10n/bundle.properties
deleted file mode 100644 (file)
index f1ecb43..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#Properties file for net.mograsim.logic.ui
-Bundle-Vendor = Mograsim Team
-Bundle-Name = Mograsim Am2900 logic
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/Test.json b/net.mograsim.logic.ui.am2900/Test.json
deleted file mode 100644 (file)
index 56085df..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-mograsim version: 0.1.1
-{
-  "type": "SimpleRectangularSubmodelComponent",
-  "width": 35.0,
-  "height": 10.0,
-  "interfacePins": [
-    {
-      "location": {
-        "x": 0.0,
-        "y": 5.0
-      },
-      "name": "Input pin #0",
-      "logicWidth": 1
-    }
-  ],
-  "composition": {
-    "innerScale": 0.4,
-    "subComps": [
-      {
-        "pos": {
-          "x": 0.0,
-          "y": 0.0
-        },
-        "type": "file:HalfAdder.json",
-        "params": {}
-      }
-    ],
-    "innerWires": []
-  },
-  "specialized": {
-    "input_count": 1,
-    "label": "Test",
-    "logic_width": 1,
-    "output_count": 0
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/build.properties b/net.mograsim.logic.ui.am2900/build.properties
deleted file mode 100644 (file)
index d6642e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/
diff --git a/net.mograsim.logic.ui.am2900/components/GUI_rsLatch.json b/net.mograsim.logic.ui.am2900/components/GUI_rsLatch.json
deleted file mode 100644 (file)
index 39ef290..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-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": 10.0,
-          "y": 7.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 12.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 16.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "_S"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "_R"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 37.5
-          },
-          {
-            "x": 35.0,
-            "y": 27.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 42.5
-          },
-          {
-            "x": 5.0,
-            "y": 42.5
-          },
-          {
-            "x": 5.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "_Q"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "_rsLatch",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIand.json b/net.mograsim.logic.ui.am2900/components/GUIand.json
deleted file mode 100644 (file)
index 9e801e1..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-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": 20.0,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIand",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIand41.json b/net.mograsim.logic.ui.am2900/components/GUIand41.json
deleted file mode 100644 (file)
index c3157e9..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-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": 30.0,
-          "y": 7.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 32.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 57.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 82.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 46.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 71.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 96.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 112.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIand41",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIandor414.json b/net.mograsim.logic.ui.am2900/components/GUIandor414.json
deleted file mode 100644 (file)
index 5021dba..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-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": 15.0,
-          "y": 137.5
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 37.5
-        },
-        "id": "GUIor_4"
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 112.5
-          },
-          {
-            "x": 10.0,
-            "y": 142.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 137.5
-          },
-          {
-            "x": 5.0,
-            "y": 152.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 187.5
-          },
-          {
-            "x": 5.0,
-            "y": 172.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 212.5
-          },
-          {
-            "x": 10.0,
-            "y": 182.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 12.5
-          },
-          {
-            "x": 10.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 37.5
-          },
-          {
-            "x": 5.0,
-            "y": 52.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C3"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C4"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 87.5
-          },
-          {
-            "x": 5.0,
-            "y": 72.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 1,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 1,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 1,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 2,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 42.5
-          },
-          {
-            "x": 75.0,
-            "y": 12.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": [
-          {
-            "x": 80.0,
-            "y": 52.5
-          },
-          {
-            "x": 80.0,
-            "y": 37.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "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
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIdemux2.json b/net.mograsim.logic.ui.am2900/components/GUIdemux2.json
deleted file mode 100644 (file)
index 13ff969..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-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": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 2.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 27.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 52.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 77.5
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 16.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 36.5,
-          "y": 61.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 41.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 66.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S0"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S1"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 62.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 67.5
-          },
-          {
-            "x": 32.5,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 37.5,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 37.5,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y00"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y01"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y10"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y11"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIdemux2",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIdff.json b/net.mograsim.logic.ui.am2900/components/GUIdff.json
deleted file mode 100644 (file)
index cc8ed5e..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-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"
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 40.0
-        },
-        "id": "GUInand3"
-      },
-      {
-        "pos": {
-          "x": 120.0,
-          "y": 60.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 120.0,
-          "y": 30.0
-        },
-        "id": "GUI_rsLatch"
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 19.0,
-          "y": 64.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 99.0,
-          "y": 34.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 99.0,
-          "y": 44.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "_R"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 55.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 145.0,
-            "y": 70.0
-          },
-          {
-            "x": 145.0,
-            "y": 85.0
-          },
-          {
-            "x": 20.0,
-            "y": 85.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "_S"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "_Q"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 100.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 35.0
-          },
-          {
-            "x": 30.0,
-            "y": 45.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "_S"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "_R"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 100.0,
-            "y": 65.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "_Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "_Q"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIdff",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIdlatch.json b/net.mograsim.logic.ui.am2900/components/GUIdlatch.json
deleted file mode 100644 (file)
index 4b39347..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-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": 10.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 7.5
-        },
-        "id": "GUI_rsLatch"
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "E"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 25.0
-          },
-          {
-            "x": 10.0,
-            "y": 25.0
-          },
-          {
-            "x": 10.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "_S"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "_R"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 37.5
-          },
-          {
-            "x": 40.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "_Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "_Q"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIdlatch",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIdlatch4.json b/net.mograsim.logic.ui.am2900/components/GUIdlatch4.json
deleted file mode 100644 (file)
index a1d560c..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-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": 30.0,
-          "y": 7.5
-        },
-        "id": "GUIdlatch"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 32.5
-        },
-        "id": "GUIdlatch"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 57.5
-        },
-        "id": "GUIdlatch"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 82.5
-        },
-        "id": "GUIdlatch"
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 46.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 71.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 96.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 112.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "E"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "E"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "E"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "E"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "D"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "D"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "D"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIdlatch4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIfulladder.json b/net.mograsim.logic.ui.am2900/components/GUIfulladder.json
deleted file mode 100644 (file)
index aef6aee..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-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": 5.0,
-          "y": 40.0
-        },
-        "id": "GUIhalfadder"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 7.5
-        },
-        "id": "GUIhalfadder"
-      },
-      {
-        "pos": {
-          "x": 57.5,
-          "y": 40.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "_Z"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "_Z"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Z"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIfulladder",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIhalfadder.json b/net.mograsim.logic.ui.am2900/components/GUIhalfadder.json
deleted file mode 100644 (file)
index 948192b..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-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": 10.0,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "_Z"
-        },
-        "path": [
-          {
-            "x": 80.0,
-            "y": 25.0
-          },
-          {
-            "x": 80.0,
-            "y": 37.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 62.5,
-            "y": 12.5
-          },
-          {
-            "x": 62.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 62.5,
-            "y": 37.5
-          },
-          {
-            "x": 62.5,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIhalfadder",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUImux1.json b/net.mograsim.logic.ui.am2900/components/GUImux1.json
deleted file mode 100644 (file)
index 4cc997c..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-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": 10.0,
-          "y": 7.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 22.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 47.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 60.0,
-          "y": 30.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 21.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S0"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 52.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUImux1",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUImux1_4.json b/net.mograsim.logic.ui.am2900/components/GUImux1_4.json
deleted file mode 100644 (file)
index b7a8e71..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-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": 7.5
-        },
-        "id": "GUImux1"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 42.5
-        },
-        "id": "GUImux1"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 77.5
-        },
-        "id": "GUImux1"
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 112.5
-        },
-        "id": "GUImux1"
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 46.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 81.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S0"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "S0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0_1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 37.5
-          },
-          {
-            "x": 5.0,
-            "y": 22.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1_1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 137.5
-          },
-          {
-            "x": 10.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0_2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 62.5
-          },
-          {
-            "x": 5.0,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1_2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 162.5
-          },
-          {
-            "x": 15.0,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "S0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0_3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 87.5
-          },
-          {
-            "x": 5.0,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1_3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 187.5
-          },
-          {
-            "x": 20.0,
-            "y": 102.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "S0"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 117.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0_4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 112.5
-          },
-          {
-            "x": 5.0,
-            "y": 127.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1_4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 212.5
-          },
-          {
-            "x": 25.0,
-            "y": 137.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUImux1_4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUInand3.json b/net.mograsim.logic.ui.am2900/components/GUInand3.json
deleted file mode 100644 (file)
index 559238d..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-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": 10.0,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 62.5,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 57.5,
-            "y": 25.0
-          },
-          {
-            "x": 57.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 62.5
-          },
-          {
-            "x": 60.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUInand3",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUInot4.json b/net.mograsim.logic.ui.am2900/components/GUInot4.json
deleted file mode 100644 (file)
index a6268de..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-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": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 52.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 30.0,
-          "y": 77.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 61.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 86.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUInot4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIor4.json b/net.mograsim.logic.ui.am2900/components/GUIor4.json
deleted file mode 100644 (file)
index 54933c4..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-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": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 65.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 115.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 165.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 40.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 140.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 110.0,
-          "y": 40.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 110.0,
-          "y": 140.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 140.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 74.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 124.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 174.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 104.0,
-          "y": 49.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 104.0,
-          "y": 149.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 70.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 120.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 170.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 80.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 130.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 45.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 55.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIor4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIor_4.json b/net.mograsim.logic.ui.am2900/components/GUIor_4.json
deleted file mode 100644 (file)
index 7db8660..0000000
+++ /dev/null
@@ -1,826 +0,0 @@
-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": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 52.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 77.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 102.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 127.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 152.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 177.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 52.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 77.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 61.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 86.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 111.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 136.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 161.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 186.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B4"
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 107.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 117.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 132.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 142.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 157.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 167.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 182.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 192.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 12.5
-          },
-          {
-            "x": 40.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 112.5
-          },
-          {
-            "x": 45.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 37.5
-          },
-          {
-            "x": 40.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 137.5
-          },
-          {
-            "x": 50.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 62.5
-          },
-          {
-            "x": 40.0,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 162.5
-          },
-          {
-            "x": 55.0,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 87.5
-          },
-          {
-            "x": 40.0,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 187.5
-          },
-          {
-            "x": 60.0,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIor_4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIram2.json b/net.mograsim.logic.ui.am2900/components/GUIram2.json
deleted file mode 100644 (file)
index f748b0b..0000000
+++ /dev/null
@@ -1,2782 +0,0 @@
-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": 55.0,
-          "y": 45.0
-        },
-        "id": "GUIdemux2"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 150.0
-        },
-        "id": "GUIdemux2"
-      },
-      {
-        "pos": {
-          "x": 130.0,
-          "y": 150.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 325.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 475.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 625.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 775.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 235.0,
-          "y": 375.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 235.0,
-          "y": 485.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 235.0,
-          "y": 635.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 235.0,
-          "y": 785.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 325.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 435.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 585.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 735.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 109.0,
-          "y": 154.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 104.0,
-          "y": 164.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 99.0,
-          "y": 174.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 94.0,
-          "y": 184.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 549.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 649.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 749.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 809.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 479.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 489.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 499.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 509.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 629.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 639.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 649.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 659.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 129.0,
-          "y": 329.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 124.0,
-          "y": 339.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 119.0,
-          "y": 349.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 114.0,
-          "y": 359.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 129.0,
-          "y": 479.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 124.0,
-          "y": 489.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 119.0,
-          "y": 499.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 114.0,
-          "y": 509.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 129.0,
-          "y": 629.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 124.0,
-          "y": 639.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 119.0,
-          "y": 649.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 114.0,
-          "y": 659.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 129.0,
-          "y": 779.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 124.0,
-          "y": 789.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 119.0,
-          "y": 799.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 114.0,
-          "y": 809.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A0"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "S0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "S1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 150.0
-          },
-          {
-            "x": 10.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B0"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 250.0
-          },
-          {
-            "x": 5.0,
-            "y": 155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 350.0
-          },
-          {
-            "x": 10.0,
-            "y": 165.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y00"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y01"
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y10"
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y11"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "WE"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 3,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 5,
-          "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": {
-          "compId": 3,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 6,
-          "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": {
-          "compId": 3,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 7,
-          "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": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 850.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D1"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 330.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D2"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 340.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D3"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 350.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D4"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 360.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D1"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 780.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D2"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 790.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D3"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 800.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y00"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 210.0,
-            "y": 50.0
-          },
-          {
-            "x": 210.0,
-            "y": 420.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y01"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 205.0,
-            "y": 60.0
-          },
-          {
-            "x": 205.0,
-            "y": 570.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y10"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 200.0,
-            "y": 70.0
-          },
-          {
-            "x": 200.0,
-            "y": 720.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y11"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 195.0,
-            "y": 80.0
-          },
-          {
-            "x": 195.0,
-            "y": 870.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 110.0,
-            "y": 370.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 520.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 100.0,
-            "y": 670.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 820.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 380.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 390.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 400.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 410.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 530.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 540.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 550.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 560.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 680.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 690.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 700.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 710.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 830.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 840.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 850.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 860.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 9,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 10,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 11,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QA1"
-        },
-        "path": [
-          {
-            "x": 300.0,
-            "y": 790.0
-          },
-          {
-            "x": 300.0,
-            "y": 50.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QA2"
-        },
-        "path": [
-          {
-            "x": 305.0,
-            "y": 800.0
-          },
-          {
-            "x": 305.0,
-            "y": 150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QA3"
-        },
-        "path": [
-          {
-            "x": 310.0,
-            "y": 810.0
-          },
-          {
-            "x": 310.0,
-            "y": 250.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QA4"
-        },
-        "path": [
-          {
-            "x": 315.0,
-            "y": 820.0
-          },
-          {
-            "x": 315.0,
-            "y": 350.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 13,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 14,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 15,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "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
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIram4.json b/net.mograsim.logic.ui.am2900/components/GUIram4.json
deleted file mode 100644 (file)
index 976f09c..0000000
+++ /dev/null
@@ -1,3154 +0,0 @@
-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": 55.0,
-          "y": 45.0
-        },
-        "id": "GUIdemux2"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 150.0
-        },
-        "id": "GUIdemux2"
-      },
-      {
-        "pos": {
-          "x": 235.0,
-          "y": 150.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 330.0
-        },
-        "id": "GUIram2"
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 480.0
-        },
-        "id": "GUIram2"
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 630.0
-        },
-        "id": "GUIram2"
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 780.0
-        },
-        "id": "GUIram2"
-      },
-      {
-        "pos": {
-          "x": 250.0,
-          "y": 375.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 250.0,
-          "y": 485.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 250.0,
-          "y": 635.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 250.0,
-          "y": 785.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 155.0,
-          "y": 325.0
-        },
-        "id": "GUIand41"
-      },
-      {
-        "pos": {
-          "x": 155.0,
-          "y": 435.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 155.0,
-          "y": 585.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 155.0,
-          "y": 735.0
-        },
-        "id": "GUIandor414"
-      },
-      {
-        "pos": {
-          "x": 229.0,
-          "y": 154.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 224.0,
-          "y": 164.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 219.0,
-          "y": 174.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 214.0,
-          "y": 184.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 59.0,
-          "y": 534.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 544.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 69.0,
-          "y": 554.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 564.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 59.0,
-          "y": 684.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 694.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 69.0,
-          "y": 704.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 714.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 59.0,
-          "y": 834.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 844.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 69.0,
-          "y": 854.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 864.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 484.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 494.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 504.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 54.0,
-          "y": 514.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 634.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 644.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 654.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 54.0,
-          "y": 664.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 334.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 349.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 649.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 54.0,
-          "y": 749.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A0"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "S0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "S1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 150.0
-          },
-          {
-            "x": 10.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B0"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 450.0
-          },
-          {
-            "x": 5.0,
-            "y": 155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 550.0
-          },
-          {
-            "x": 10.0,
-            "y": 165.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y00"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y01"
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y10"
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y11"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "WE"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 850.0
-          },
-          {
-            "x": 15.0,
-            "y": 195.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 5,
-          "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": {
-          "compId": 3,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 6,
-          "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": {
-          "compId": 3,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 7,
-          "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": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 345.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B0"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 355.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 365.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B0"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A0"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 785.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 795.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B0"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 805.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 815.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 250.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D1"
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 385.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D2"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 395.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D3"
-        },
-        "path": [
-          {
-            "x": 70.0,
-            "y": 405.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D4"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 415.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 950.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 1050.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 70.0,
-            "y": 1150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 1250.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y00"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 135.0,
-            "y": 50.0
-          },
-          {
-            "x": 135.0,
-            "y": 370.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y01"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 60.0
-          },
-          {
-            "x": 130.0,
-            "y": 520.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y10"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 70.0
-          },
-          {
-            "x": 125.0,
-            "y": 670.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y11"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 80.0
-          },
-          {
-            "x": 120.0,
-            "y": 820.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 230.0,
-            "y": 420.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 225.0,
-            "y": 570.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 220.0,
-            "y": 720.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 215.0,
-            "y": 870.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QB1"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 375.0
-          },
-          {
-            "x": 140.0,
-            "y": 380.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QB2"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 385.0
-          },
-          {
-            "x": 140.0,
-            "y": 390.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QB3"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 395.0
-          },
-          {
-            "x": 140.0,
-            "y": 400.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QB4"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 405.0
-          },
-          {
-            "x": 140.0,
-            "y": 410.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QB1"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 525.0
-          },
-          {
-            "x": 140.0,
-            "y": 530.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QB2"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 535.0
-          },
-          {
-            "x": 140.0,
-            "y": 540.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QB3"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 545.0
-          },
-          {
-            "x": 140.0,
-            "y": 550.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QB4"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 555.0
-          },
-          {
-            "x": 140.0,
-            "y": 560.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QB1"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 675.0
-          },
-          {
-            "x": 140.0,
-            "y": 680.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QB2"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 685.0
-          },
-          {
-            "x": 140.0,
-            "y": 690.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QB3"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 695.0
-          },
-          {
-            "x": 140.0,
-            "y": 700.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QB4"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 705.0
-          },
-          {
-            "x": 140.0,
-            "y": 710.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QB1"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 825.0
-          },
-          {
-            "x": 140.0,
-            "y": 830.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QB2"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 835.0
-          },
-          {
-            "x": 140.0,
-            "y": 840.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QB3"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 845.0
-          },
-          {
-            "x": 140.0,
-            "y": 850.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QB4"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 855.0
-          },
-          {
-            "x": 140.0,
-            "y": 860.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QA1"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 335.0
-          },
-          {
-            "x": 140.0,
-            "y": 330.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QA2"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 345.0
-          },
-          {
-            "x": 140.0,
-            "y": 340.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QA3"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 355.0
-          },
-          {
-            "x": 140.0,
-            "y": 350.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "QA4"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 365.0
-          },
-          {
-            "x": 140.0,
-            "y": 360.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QA1"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 485.0
-          },
-          {
-            "x": 140.0,
-            "y": 480.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QA2"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 495.0
-          },
-          {
-            "x": 140.0,
-            "y": 490.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QA3"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 505.0
-          },
-          {
-            "x": 140.0,
-            "y": 500.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "QA4"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 515.0
-          },
-          {
-            "x": 140.0,
-            "y": 510.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QA1"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 635.0
-          },
-          {
-            "x": 140.0,
-            "y": 630.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QA2"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 645.0
-          },
-          {
-            "x": 140.0,
-            "y": 640.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QA3"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 655.0
-          },
-          {
-            "x": 140.0,
-            "y": 650.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "QA4"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 665.0
-          },
-          {
-            "x": 140.0,
-            "y": 660.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QA1"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 785.0
-          },
-          {
-            "x": 140.0,
-            "y": 780.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QA2"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 795.0
-          },
-          {
-            "x": 140.0,
-            "y": 790.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QA3"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 805.0
-          },
-          {
-            "x": 140.0,
-            "y": 800.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "QA4"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 815.0
-          },
-          {
-            "x": 140.0,
-            "y": 810.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 8,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 9,
-          "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": {
-          "compId": 9,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 9,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 10,
-          "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": {
-          "compId": 10,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 10,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 11,
-          "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": {
-          "compId": 11,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QB1"
-        },
-        "path": [
-          {
-            "x": 330.0,
-            "y": 790.0
-          },
-          {
-            "x": 330.0,
-            "y": 450.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QB2"
-        },
-        "path": [
-          {
-            "x": 335.0,
-            "y": 800.0
-          },
-          {
-            "x": 335.0,
-            "y": 550.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QB3"
-        },
-        "path": [
-          {
-            "x": 340.0,
-            "y": 810.0
-          },
-          {
-            "x": 340.0,
-            "y": 650.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QB4"
-        },
-        "path": [
-          {
-            "x": 345.0,
-            "y": 820.0
-          },
-          {
-            "x": 345.0,
-            "y": 750.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 12,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 13,
-          "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": {
-          "compId": 13,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 13,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 14,
-          "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": {
-          "compId": 14,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 14,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 15,
-          "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": {
-          "compId": 15,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "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": {
-          "compId": 15,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "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
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIsel2_4.json b/net.mograsim.logic.ui.am2900/components/GUIsel2_4.json
deleted file mode 100644 (file)
index 9f7babe..0000000
+++ /dev/null
@@ -1,794 +0,0 @@
-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": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 52.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 102.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 152.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 77.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 127.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 20.0,
-          "y": 177.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 52.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 65.0,
-          "y": 77.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 16.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 66.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 116.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 41.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 91.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 141.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 62.5
-          },
-          {
-            "x": 15.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 17.5,
-            "y": 87.5
-          },
-          {
-            "x": 17.5,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 17.5,
-            "y": 112.5
-          },
-          {
-            "x": 17.5,
-            "y": 107.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 17.5,
-            "y": 137.5
-          },
-          {
-            "x": 17.5,
-            "y": 157.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 162.5
-          },
-          {
-            "x": 10.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 12.5,
-            "y": 187.5
-          },
-          {
-            "x": 12.5,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 212.5
-          },
-          {
-            "x": 15.0,
-            "y": 132.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B4"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 237.5
-          },
-          {
-            "x": 10.0,
-            "y": 182.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SA"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SB"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 167.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 192.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 42.5,
-            "y": 12.5
-          },
-          {
-            "x": 42.5,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 37.5
-          },
-          {
-            "x": 45.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 47.5,
-            "y": 62.5
-          },
-          {
-            "x": 47.5,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 87.5
-          },
-          {
-            "x": 50.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 52.5,
-            "y": 112.5
-          },
-          {
-            "x": 52.5,
-            "y": 57.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 137.5
-          },
-          {
-            "x": 55.0,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 57.5,
-            "y": 162.5
-          },
-          {
-            "x": 57.5,
-            "y": 82.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 187.5
-          },
-          {
-            "x": 60.0,
-            "y": 92.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIsel2_4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIsel3_4.json b/net.mograsim.logic.ui.am2900/components/GUIsel3_4.json
deleted file mode 100644 (file)
index f999b22..0000000
+++ /dev/null
@@ -1,865 +0,0 @@
-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": 35.0,
-          "y": 250.0
-        },
-        "id": "GUIsel2_4"
-      },
-      {
-        "pos": {
-          "x": 75.0,
-          "y": 250.0
-        },
-        "id": "GUInot4"
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 570.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 620.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 670.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 720.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 152.5,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 152.5,
-          "y": 65.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 152.5,
-          "y": 115.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 152.5,
-          "y": 165.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 584.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 634.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 684.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SA"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "SA"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 25.0
-          },
-          {
-            "x": 25.0,
-            "y": 255.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SB"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "SB"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 75.0
-          },
-          {
-            "x": 20.0,
-            "y": 265.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 175.0
-          },
-          {
-            "x": 15.0,
-            "y": 275.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 225.0
-          },
-          {
-            "x": 10.0,
-            "y": 285.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 275.0
-          },
-          {
-            "x": 5.0,
-            "y": 295.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 325.0
-          },
-          {
-            "x": 5.0,
-            "y": 305.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 375.0
-          },
-          {
-            "x": 10.0,
-            "y": 315.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B2"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 425.0
-          },
-          {
-            "x": 15.0,
-            "y": 325.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 475.0
-          },
-          {
-            "x": 20.0,
-            "y": 335.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B4"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B4"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 525.0
-          },
-          {
-            "x": 25.0,
-            "y": 345.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SC"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 125.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 125.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 125.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 735.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C1"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C2"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C3"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C4"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 255.0
-          },
-          {
-            "x": 115.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 265.0
-          },
-          {
-            "x": 120.0,
-            "y": 70.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 275.0
-          },
-          {
-            "x": 125.0,
-            "y": 120.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 285.0
-          },
-          {
-            "x": 130.0,
-            "y": 170.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 135.0,
-            "y": 580.0
-          },
-          {
-            "x": 135.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 630.0
-          },
-          {
-            "x": 140.0,
-            "y": 80.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 145.0,
-            "y": 680.0
-          },
-          {
-            "x": 145.0,
-            "y": 130.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 150.0,
-            "y": 730.0
-          },
-          {
-            "x": 150.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIsel3_4",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/GUIxor.json b/net.mograsim.logic.ui.am2900/components/GUIxor.json
deleted file mode 100644 (file)
index 8f589d5..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-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": 7.5,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 2.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 35.0,
-          "y": 27.5
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 62.5,
-          "y": 15.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 11.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        }
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 32.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 42.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIxor",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901.json
deleted file mode 100644 (file)
index af06681..0000000
+++ /dev/null
@@ -1,3191 +0,0 @@
-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": 15.0,
-          "y": 45.0
-        },
-        "id": "GUIAm2901DestDecode"
-      },
-      {
-        "pos": {
-          "x": 275.0,
-          "y": 135.0
-        },
-        "id": "GUImux1_4"
-      },
-      {
-        "pos": {
-          "x": 190.0,
-          "y": 65.0
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 160.0,
-          "y": 75.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 240.0,
-          "y": 2110.0
-        },
-        "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode"
-      },
-      {
-        "pos": {
-          "x": 275.0,
-          "y": 445.0
-        },
-        "id": "GUIor4"
-      },
-      {
-        "pos": {
-          "x": 320.0,
-          "y": 440.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 95.0,
-          "y": 2220.0
-        },
-        "id": "GUIram4"
-      },
-      {
-        "pos": {
-          "x": 160.0,
-          "y": 2220.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 160.0,
-          "y": 2275.0
-        },
-        "id": "GUIdlatch4"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 2310.0
-        },
-        "id": "GUIsel3_4"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 2510.0
-        },
-        "id": "GUIsel3_4"
-      },
-      {
-        "pos": {
-          "x": 90.0,
-          "y": 2490.0
-        },
-        "id": "GUIAm2901QReg"
-      },
-      {
-        "pos": {
-          "x": 154.0,
-          "y": 949.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 154.0,
-          "y": 89.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 154.0,
-          "y": 2264.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 154.0,
-          "y": 2319.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 2314.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 2324.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 2334.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 219.0,
-          "y": 2224.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 224.0,
-          "y": 2234.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 229.0,
-          "y": 2244.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 234.0,
-          "y": 2254.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 129.0,
-          "y": 2494.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 134.0,
-          "y": 2504.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 139.0,
-          "y": 2514.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 144.0,
-          "y": 2524.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 219.0,
-          "y": 2494.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 234.0,
-          "y": 2524.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 2624.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 2634.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 279.0,
-          "y": 2114.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 294.0,
-          "y": 2144.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 329.0,
-          "y": 949.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 254.0,
-          "y": 2089.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 259.0,
-          "y": 2094.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 264.0,
-          "y": 2099.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 269.0,
-          "y": 2104.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 254.0,
-          "y": 449.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 259.0,
-          "y": 459.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 264.0,
-          "y": 469.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 269.0,
-          "y": 479.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 2354.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 2364.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 19.0,
-          "y": 2374.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 2394.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 19.0,
-          "y": 2404.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 2414.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 2384.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 2424.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 19.0,
-          "y": 2434.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 2444.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 314.0,
-          "y": 449.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I8"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I8"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I7"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I7"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 150.0
-          },
-          {
-            "x": 5.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I6"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I6"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 250.0
-          },
-          {
-            "x": 10.0,
-            "y": 70.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I5"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I5"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 350.0
-          },
-          {
-            "x": 130.0,
-            "y": 2115.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I4"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 450.0
-          },
-          {
-            "x": 125.0,
-            "y": 2125.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I3"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 550.0
-          },
-          {
-            "x": 120.0,
-            "y": 2135.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I2"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I2"
-        },
-        "path": [
-          {
-            "x": 115.0,
-            "y": 650.0
-          },
-          {
-            "x": 115.0,
-            "y": 2145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 110.0,
-            "y": 750.0
-          },
-          {
-            "x": 110.0,
-            "y": 2155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 850.0
-          },
-          {
-            "x": 105.0,
-            "y": 2165.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 155.0,
-            "y": 80.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "C"
-        },
-        "path": [
-          {
-            "x": 155.0,
-            "y": 2485.0
-          },
-          {
-            "x": 80.0,
-            "y": 2485.0
-          },
-          {
-            "x": 80.0,
-            "y": 2495.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "LSH"
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 90.0
-          },
-          {
-            "x": 55.0,
-            "y": 125.0
-          },
-          {
-            "x": 40.0,
-            "y": 125.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "NSH"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 50.0
-          },
-          {
-            "x": 60.0,
-            "y": 120.0
-          },
-          {
-            "x": 35.0,
-            "y": 120.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "RSH"
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 60.0
-          },
-          {
-            "x": 65.0,
-            "y": 115.0
-          },
-          {
-            "x": 30.0,
-            "y": 115.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "SA"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "SB"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "SC"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "SA"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 2515.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "SB"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 2525.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "SC"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 2535.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A0"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A0"
-        },
-        "path": [
-          {
-            "x": 80.0,
-            "y": 1550.0
-          },
-          {
-            "x": 80.0,
-            "y": 2225.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 1650.0
-          },
-          {
-            "x": 75.0,
-            "y": 2235.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 70.0,
-            "y": 1750.0
-          },
-          {
-            "x": 70.0,
-            "y": 2245.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 1850.0
-          },
-          {
-            "x": 65.0,
-            "y": 2255.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B0"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B0"
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 1950.0
-          },
-          {
-            "x": 60.0,
-            "y": 2265.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 2050.0
-          },
-          {
-            "x": 55.0,
-            "y": 2275.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B2"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 2150.0
-          },
-          {
-            "x": 50.0,
-            "y": 2285.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 2250.0
-          },
-          {
-            "x": 45.0,
-            "y": 2295.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QA1"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QA2"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QA3"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QA4"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QB1"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "D1"
-        },
-        "path": [
-          {
-            "x": 150.0,
-            "y": 2265.0
-          },
-          {
-            "x": 150.0,
-            "y": 2280.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QB2"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "D2"
-        },
-        "path": [
-          {
-            "x": 145.0,
-            "y": 2275.0
-          },
-          {
-            "x": 145.0,
-            "y": 2290.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QB3"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "D3"
-        },
-        "path": [
-          {
-            "x": 140.0,
-            "y": 2285.0
-          },
-          {
-            "x": 140.0,
-            "y": 2300.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "QB4"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "D4"
-        },
-        "path": [
-          {
-            "x": 135.0,
-            "y": 2295.0
-          },
-          {
-            "x": 135.0,
-            "y": 2310.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Cn"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Cn"
-        },
-        "path": [
-          {
-            "x": 100.0,
-            "y": 1050.0
-          },
-          {
-            "x": 100.0,
-            "y": 2175.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D1"
-        },
-        "path": [
-          {
-            "x": 180.0,
-            "y": 1150.0
-          },
-          {
-            "x": 180.0,
-            "y": 2185.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D2"
-        },
-        "path": [
-          {
-            "x": 175.0,
-            "y": 1250.0
-          },
-          {
-            "x": 175.0,
-            "y": 2195.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D3"
-        },
-        "path": [
-          {
-            "x": 170.0,
-            "y": 1350.0
-          },
-          {
-            "x": 170.0,
-            "y": 2205.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D4"
-        },
-        "path": [
-          {
-            "x": 165.0,
-            "y": 1450.0
-          },
-          {
-            "x": 165.0,
-            "y": 2215.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I0_1"
-        },
-        "path": [
-          {
-            "x": 220.0,
-            "y": 150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I0_2"
-        },
-        "path": [
-          {
-            "x": 225.0,
-            "y": 160.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I0_3"
-        },
-        "path": [
-          {
-            "x": 230.0,
-            "y": 170.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I0_4"
-        },
-        "path": [
-          {
-            "x": 235.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 200.0,
-            "y": 2280.0
-          },
-          {
-            "x": 200.0,
-            "y": 2265.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B2"
-        },
-        "path": [
-          {
-            "x": 205.0,
-            "y": 2290.0
-          },
-          {
-            "x": 205.0,
-            "y": 2275.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 210.0,
-            "y": 2300.0
-          },
-          {
-            "x": 210.0,
-            "y": 2285.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B4"
-        },
-        "path": [
-          {
-            "x": 215.0,
-            "y": 2310.0
-          },
-          {
-            "x": 215.0,
-            "y": 2295.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "OQn"
-        },
-        "path": [
-          {
-            "x": 335.0,
-            "y": 2495.0
-          },
-          {
-            "x": 335.0,
-            "y": 1050.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "OQn+3"
-        },
-        "path": [
-          {
-            "x": 340.0,
-            "y": 2525.0
-          },
-          {
-            "x": 340.0,
-            "y": 1150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 31,
-          "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": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 32,
-          "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": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "C1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "C2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "C3"
-        },
-        "path": [
-          {
-            "x": 145.0,
-            "y": 2680.0
-          },
-          {
-            "x": 40.0,
-            "y": 2680.0
-          },
-          {
-            "x": 40.0,
-            "y": 2645.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "IQn+3"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "C4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 2650.0
-          },
-          {
-            "x": 5.0,
-            "y": 2655.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "IQn"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 2550.0
-          },
-          {
-            "x": 5.0,
-            "y": 2545.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "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": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Q1"
-        },
-        "path": [
-          {
-            "x": 220.0,
-            "y": 2305.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Q2"
-        },
-        "path": [
-          {
-            "x": 225.0,
-            "y": 2505.0
-          },
-          {
-            "x": 225.0,
-            "y": 2315.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Q3"
-        },
-        "path": [
-          {
-            "x": 230.0,
-            "y": 2515.0
-          },
-          {
-            "x": 230.0,
-            "y": 2325.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Q4"
-        },
-        "path": [
-          {
-            "x": 235.0,
-            "y": 2335.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 2565.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 32,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 2575.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Cn+4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Cn+4"
-        },
-        "path": [
-          {
-            "x": 315.0,
-            "y": 2155.0
-          },
-          {
-            "x": 315.0,
-            "y": 550.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "OVR"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "OVR"
-        },
-        "path": [
-          {
-            "x": 320.0,
-            "y": 2165.0
-          },
-          {
-            "x": 320.0,
-            "y": 650.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "F1"
-        },
-        "pin2": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "F4"
-        },
-        "pin2": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "ORAMn"
-        },
-        "path": [
-          {
-            "x": 325.0,
-            "y": 2115.0
-          },
-          {
-            "x": 325.0,
-            "y": 850.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 330.0,
-            "y": 2145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "ORAMn+3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 35,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F3"
-        },
-        "path": [
-          {
-            "x": 330.0,
-            "y": 750.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 33,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 280.0,
-            "y": 2090.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "F2"
-        },
-        "pin2": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 285.0,
-            "y": 2125.0
-          },
-          {
-            "x": 285.0,
-            "y": 2095.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "F3"
-        },
-        "pin2": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 290.0,
-            "y": 2135.0
-          },
-          {
-            "x": 290.0,
-            "y": 2100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 34,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 295.0,
-            "y": 2105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 40,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I1_1"
-        },
-        "path": [
-          {
-            "x": 255.0,
-            "y": 190.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 41,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I1_2"
-        },
-        "path": [
-          {
-            "x": 260.0,
-            "y": 200.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 42,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I1_3"
-        },
-        "path": [
-          {
-            "x": 265.0,
-            "y": 210.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 43,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "I1_4"
-        },
-        "path": [
-          {
-            "x": 270.0,
-            "y": 220.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 36,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 2090.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 37,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 2095.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 38,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 2100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "IRAMn"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 2350.0
-          },
-          {
-            "x": 5.0,
-            "y": 2345.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 45,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 46,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 48,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 39,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 49,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 2105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 44,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 50,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 50,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 48,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 49,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 47,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 51,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 48,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 52,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 49,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 53,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 51,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "C1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 52,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "C2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 53,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "C3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "IRAMn+3"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "C4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 2450.0
-          },
-          {
-            "x": 5.0,
-            "y": 2455.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 50,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 2585.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 51,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B2"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 2595.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 52,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 2605.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 53,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B4"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 2615.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "D1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "D2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "D3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "D4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "RAMWE"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 8,
-          "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": {
-          "compId": 1,
-          "pinName": "QWE"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "WE"
-        },
-        "path": [
-          {
-            "x": 85.0,
-            "y": 100.0
-          },
-          {
-            "x": 85.0,
-            "y": 2505.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "YF"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S0"
-        },
-        "path": [
-          {
-            "x": 70.0,
-            "y": 80.0
-          },
-          {
-            "x": 70.0,
-            "y": 140.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y1"
-        },
-        "path": [
-          {
-            "x": 335.0,
-            "y": 140.0
-          },
-          {
-            "x": 335.0,
-            "y": 50.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y3"
-        },
-        "path": [
-          {
-            "x": 335.0,
-            "y": 160.0
-          },
-          {
-            "x": 335.0,
-            "y": 250.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Y4"
-        },
-        "path": [
-          {
-            "x": 325.0,
-            "y": 170.0
-          },
-          {
-            "x": 325.0,
-            "y": 350.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 54,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 54,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 315.0,
-            "y": 445.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 54,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 315.0,
-            "y": 455.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F\u003d0"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUFuncDecode.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUFuncDecode.json
deleted file mode 100644 (file)
index dfa954a..0000000
+++ /dev/null
@@ -1,663 +0,0 @@
-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": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 10.0
-        },
-        "id": "GUInand3"
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 45.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 55.0,
-          "y": 70.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 100.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 100.0,
-          "y": 135.0
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 44.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 54.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 64.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 84.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 99.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 74.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 34.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I5"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 45.0
-          },
-          {
-            "x": 45.0,
-            "y": 50.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "FN"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I4"
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 40.0
-          },
-          {
-            "x": 45.0,
-            "y": 40.0
-          },
-          {
-            "x": 45.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "SN"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 105.0
-          },
-          {
-            "x": 135.0,
-            "y": 105.0
-          },
-          {
-            "x": 135.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "RN"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 220.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "CinE"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 5.0
-          },
-          {
-            "x": 115.0,
-            "y": 5.0
-          },
-          {
-            "x": 115.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "L"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "SBE"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901ALUFuncDecode",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclDecode.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclDecode.json
deleted file mode 100644 (file)
index 9d6395c..0000000
+++ /dev/null
@@ -1,1427 +0,0 @@
-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": 20.0,
-          "y": 2.5
-        },
-        "id": "GUIAm2901ALUFuncDecode"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 80.0
-        },
-        "id": "GUIAm2901ALUOneBit"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 180.0
-        },
-        "id": "GUIAm2901ALUOneBit"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 280.0
-        },
-        "id": "GUIAm2901ALUOneBit"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 380.0
-        },
-        "id": "GUIAm2901ALUOneBit"
-      },
-      {
-        "pos": {
-          "x": 95.0,
-          "y": 400.0
-        },
-        "id": "GUIxor"
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 94.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 194.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 294.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 26.5,
-          "y": 104.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 26.5,
-          "y": 204.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 26.5,
-          "y": 304.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 124.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 224.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 29.0,
-          "y": 324.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 144.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 244.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 344.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 154.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 254.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 354.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 36.5,
-          "y": 164.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 36.5,
-          "y": 264.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 36.5,
-          "y": 364.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 84.0,
-          "y": 374.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 84.0,
-          "y": 384.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I5"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I5"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 20.0
-          },
-          {
-            "x": 5.0,
-            "y": 7.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I4"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I4"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 60.0
-          },
-          {
-            "x": 10.0,
-            "y": 17.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I3"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 100.0
-          },
-          {
-            "x": 15.0,
-            "y": 27.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "SBE"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 62.5,
-            "y": 37.5
-          },
-          {
-            "x": 62.5,
-            "y": 70.0
-          },
-          {
-            "x": 25.0,
-            "y": 70.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "CoutE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "CoutE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "CoutE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "CoutE"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 395.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "CinE"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 70.0,
-            "y": 7.5
-          },
-          {
-            "x": 70.0,
-            "y": 77.5
-          },
-          {
-            "x": 27.5,
-            "y": 77.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "CinE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "CinE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "CinE"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "CinE"
-        },
-        "path": [
-          {
-            "x": 27.5,
-            "y": 405.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "RN"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 57.5,
-            "y": 57.5
-          },
-          {
-            "x": 57.5,
-            "y": 65.0
-          },
-          {
-            "x": 30.0,
-            "y": 65.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "RN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "RN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "RN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "RN"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 425.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "SN"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 27.5
-          },
-          {
-            "x": 65.0,
-            "y": 72.5
-          },
-          {
-            "x": 32.5,
-            "y": 72.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "SN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "SN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "SN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "SN"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 445.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "FN"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 60.0,
-            "y": 47.5
-          },
-          {
-            "x": 60.0,
-            "y": 67.5
-          },
-          {
-            "x": 35.0,
-            "y": 67.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "FN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "FN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "FN"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "FN"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 455.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "L"
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 67.5,
-            "y": 17.5
-          },
-          {
-            "x": 67.5,
-            "y": 75.0
-          },
-          {
-            "x": 37.5,
-            "y": 75.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "L"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "L"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "L"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "L"
-        },
-        "path": [
-          {
-            "x": 37.5,
-            "y": 465.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "R1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "R"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 180.0
-          },
-          {
-            "x": 10.0,
-            "y": 115.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "R2"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "R"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 220.0
-          },
-          {
-            "x": 10.0,
-            "y": 215.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "R3"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "R"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 260.0
-          },
-          {
-            "x": 10.0,
-            "y": 315.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "R4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "R"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 300.0
-          },
-          {
-            "x": 20.0,
-            "y": 415.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "S"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 340.0
-          },
-          {
-            "x": 15.0,
-            "y": 135.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S2"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "S"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 380.0
-          },
-          {
-            "x": 5.0,
-            "y": 235.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S3"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "S"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 420.0
-          },
-          {
-            "x": 10.0,
-            "y": 335.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "S"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 460.0
-          },
-          {
-            "x": 10.0,
-            "y": 435.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Cn"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "Cin"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 140.0
-          },
-          {
-            "x": 5.0,
-            "y": 85.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Cout"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 3,
-          "pinName": "Cout"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 4,
-          "pinName": "Cout"
-        },
-        "pin2": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 85.0,
-            "y": 285.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "Cin"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 375.0
-          },
-          {
-            "x": 40.0,
-            "y": 385.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Cout"
-        },
-        "pin2": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "F"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F1"
-        },
-        "path": [
-          {
-            "x": 90.0,
-            "y": 95.0
-          },
-          {
-            "x": 90.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "F"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F2"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 195.0
-          },
-          {
-            "x": 95.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "F"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F3"
-        },
-        "path": [
-          {
-            "x": 100.0,
-            "y": 295.0
-          },
-          {
-            "x": 100.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "F"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F4"
-        },
-        "path": [
-          {
-            "x": 105.0,
-            "y": 395.0
-          },
-          {
-            "x": 105.0,
-            "y": 140.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 90.0,
-            "y": 375.0
-          },
-          {
-            "x": 90.0,
-            "y": 405.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 85.0,
-            "y": 415.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Cn+4"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 385.0
-          },
-          {
-            "x": 130.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "OVR"
-        }
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901ALUInclDecode",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json
deleted file mode 100644 (file)
index fb6e911..0000000
+++ /dev/null
@@ -1,1305 +0,0 @@
-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": 15.0,
-          "y": 165.0
-        },
-        "id": "GUIAm2901SourceDecode"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 365.0
-        },
-        "id": "GUIsel2_4"
-      },
-      {
-        "pos": {
-          "x": 45.0,
-          "y": 575.0
-        },
-        "id": "GUIsel3_4"
-      },
-      {
-        "pos": {
-          "x": 60.0,
-          "y": 15.0
-        },
-        "id": "GUIAm2901ALUInclDecode"
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 459.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 14.0,
-          "y": 499.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 19.0,
-          "y": 539.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 24.0,
-          "y": 579.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I5"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "I5"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I4"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "I4"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 60.0
-          },
-          {
-            "x": 5.0,
-            "y": 30.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "I3"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 100.0
-          },
-          {
-            "x": 15.0,
-            "y": 40.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I2"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I2"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 140.0
-          },
-          {
-            "x": 5.0,
-            "y": 170.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "I0"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 220.0
-          },
-          {
-            "x": 5.0,
-            "y": 190.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Cn"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "Cn"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 260.0
-          },
-          {
-            "x": 10.0,
-            "y": 50.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 300.0
-          },
-          {
-            "x": 15.0,
-            "y": 390.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 340.0
-          },
-          {
-            "x": 10.0,
-            "y": 400.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 380.0
-          },
-          {
-            "x": 5.0,
-            "y": 410.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A4"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A1"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A2"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A3"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "A4"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 430.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B2"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 440.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 450.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B4"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 460.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A1"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 610.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A2"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 620.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A3"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 630.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A4"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 640.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B1"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B1"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 620.0
-          },
-          {
-            "x": 5.0,
-            "y": 650.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B2"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B3"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 700.0
-          },
-          {
-            "x": 5.0,
-            "y": 670.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "B4"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B4"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 740.0
-          },
-          {
-            "x": 10.0,
-            "y": 680.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Q1"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C1"
-        },
-        "path": [
-          {
-            "x": 15.0,
-            "y": 780.0
-          },
-          {
-            "x": 15.0,
-            "y": 690.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C2"
-        },
-        "path": [
-          {
-            "x": 20.0,
-            "y": 820.0
-          },
-          {
-            "x": 20.0,
-            "y": 700.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Q3"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C3"
-        },
-        "path": [
-          {
-            "x": 25.0,
-            "y": 860.0
-          },
-          {
-            "x": 25.0,
-            "y": 710.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Q4"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C4"
-        },
-        "path": [
-          {
-            "x": 30.0,
-            "y": 900.0
-          },
-          {
-            "x": 30.0,
-            "y": 720.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "SQ"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 1,
-          "pinName": "RA"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 1,
-          "pinName": "SB"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 1,
-          "pinName": "SA"
-        },
-        "pin2": {
-          "compId": 3,
-          "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": {
-          "compId": 1,
-          "pinName": "RD"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 2,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 2,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 2,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 2,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 3,
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compId": 4,
-          "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": {
-          "compId": 4,
-          "pinName": "F1"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "F2"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F2"
-        },
-        "path": [
-          {
-            "x": 135.0,
-            "y": 30.0
-          },
-          {
-            "x": 135.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "F3"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F3"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 40.0
-          },
-          {
-            "x": 130.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "F4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F4"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 50.0
-          },
-          {
-            "x": 125.0,
-            "y": 140.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Cn+4"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Cn+4"
-        },
-        "path": [
-          {
-            "x": 120.0,
-            "y": 60.0
-          },
-          {
-            "x": 120.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "OVR"
-        },
-        "pin2": {
-          "compId": 0,
-          "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
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUOneBit.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901ALUOneBit.json
deleted file mode 100644 (file)
index ac53c55..0000000
+++ /dev/null
@@ -1,511 +0,0 @@
-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": 10.0,
-          "y": 20.0
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 190.0
-        },
-        "id": "GUIxor"
-      },
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 290.0
-        },
-        "id": "GUIxor"
-      },
-      {
-        "pos": {
-          "x": 60.0,
-          "y": 20.0
-        },
-        "id": "GUIfulladder"
-      },
-      {
-        "pos": {
-          "x": 60.0,
-          "y": 55.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 20.0
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 90.0,
-          "y": 70.0
-        },
-        "id": "GUImux1"
-      },
-      {
-        "pos": {
-          "x": 135.0,
-          "y": 70.0
-        },
-        "id": "GUIxor"
-      },
-      {
-        "pos": {
-          "x": 49.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 54.0,
-          "y": 69.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "Cin"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "CoutE"
-        },
-        "pin2": {
-          "compId": 6,
-          "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": {
-          "compId": 0,
-          "pinName": "CinE"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 125.0
-          },
-          {
-            "x": 7.5,
-            "y": 35.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "R"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "RN"
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "S"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "SN"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "FN"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 375.0
-          },
-          {
-            "x": 130.0,
-            "y": 85.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "L"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "S0"
-        },
-        "path": [
-          {
-            "x": 87.5,
-            "y": 425.0
-          },
-          {
-            "x": 87.5,
-            "y": 75.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 195.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 50.0,
-            "y": 35.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 295.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "C"
-        },
-        "path": [
-          {
-            "x": 55.0,
-            "y": 45.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "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": {
-          "compId": 4,
-          "pinName": "Z"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "I1"
-        },
-        "path": [
-          {
-            "x": 82.5,
-            "y": 65.0
-          },
-          {
-            "x": 82.5,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Cout"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "F"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901ALUOneBit",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901DestDecode.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901DestDecode.json
deleted file mode 100644 (file)
index 613b9b9..0000000
+++ /dev/null
@@ -1,1006 +0,0 @@
-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": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 15.0,
-          "y": 150.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 130.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 80.0,
-          "y": 145.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 110.0,
-          "y": 105.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 115.0,
-          "y": 210.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 14.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 24.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 64.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 9.0,
-          "y": 104.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 154.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 44.0,
-          "y": 54.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 39.0,
-          "y": 134.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 99.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 104.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 74.0,
-          "y": 159.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 109.0,
-          "y": 214.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I8"
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I7"
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 55.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I6"
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 165.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 5.0
-          },
-          {
-            "x": 40.0,
-            "y": 5.0
-          },
-          {
-            "x": 40.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 65.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "NSH"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 5.0
-          },
-          {
-            "x": 135.0,
-            "y": 5.0
-          },
-          {
-            "x": 135.0,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 45.0,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 10.0,
-            "y": 115.0
-          },
-          {
-            "x": 45.0,
-            "y": 115.0
-          },
-          {
-            "x": 45.0,
-            "y": 105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 40.0,
-            "y": 145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "RAMWE"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 60.0
-          },
-          {
-            "x": 125.0,
-            "y": 100.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "LSH"
-        },
-        "path": [
-          {
-            "x": 125.0,
-            "y": 140.0
-          },
-          {
-            "x": 125.0,
-            "y": 180.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 150.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "RSH"
-        },
-        "path": [
-          {
-            "x": 130.0,
-            "y": 20.0
-          },
-          {
-            "x": 130.0,
-            "y": 60.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 75.0,
-            "y": 170.0
-          },
-          {
-            "x": 105.0,
-            "y": 170.0
-          },
-          {
-            "x": 105.0,
-            "y": 120.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 110.0,
-            "y": 155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 110.0,
-            "y": 225.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "YF"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "QWE"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901DestDecode",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901QReg.json
deleted file mode 100644 (file)
index 7188972..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-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": 5.0,
-          "y": 15.0
-        },
-        "id": "GUIand"
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 7.5
-        },
-        "id": "GUIdff"
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 32.5
-        },
-        "id": "GUIdff"
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 57.5
-        },
-        "id": "GUIdff"
-      },
-      {
-        "pos": {
-          "x": 50.0,
-          "y": 82.5
-        },
-        "id": "GUIdff"
-      },
-      {
-        "pos": {
-          "x": 41.5,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 41.5,
-          "y": 36.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 41.5,
-          "y": 61.5
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "C"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "WE"
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "C"
-        },
-        "path": [
-          {
-            "x": 42.5,
-            "y": 12.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "C"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "C"
-        },
-        "path": [
-          {
-            "x": 42.5,
-            "y": 87.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compId": 2,
-          "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": {
-          "compId": 0,
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "D"
-        },
-        "path": [
-          {
-            "x": 22.5,
-            "y": 87.5
-          },
-          {
-            "x": 22.5,
-            "y": 47.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "D"
-        },
-        "path": [
-          {
-            "x": 27.5,
-            "y": 112.5
-          },
-          {
-            "x": 27.5,
-            "y": 72.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "D"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 137.5
-          },
-          {
-            "x": 32.5,
-            "y": 97.5
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q1"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q2"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q3"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "Q4"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901QReg",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901SourceDecode.json b/net.mograsim.logic.ui.am2900/components/am2901/GUIAm2901SourceDecode.json
deleted file mode 100644 (file)
index 75b5f70..0000000
+++ /dev/null
@@ -1,1045 +0,0 @@
-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": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 10.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 130.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 40.0,
-          "y": 170.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 70.0,
-          "y": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 70.0,
-          "y": 50.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 70.0,
-          "y": 90.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 70.0,
-          "y": 130.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 70.0,
-          "y": 170.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 100.0,
-          "y": 10.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 100.0,
-          "y": 170.0
-        },
-        "id": "GUINandGate",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 4.0,
-          "y": 144.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 99.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 6.5,
-          "y": 104.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 31.5,
-          "y": 54.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 64.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 34.0,
-          "y": 134.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 36.5,
-          "y": 99.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 59.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 99.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 64.0,
-          "y": 139.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 94.0,
-          "y": 19.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      },
-      {
-        "pos": {
-          "x": 94.0,
-          "y": 179.0
-        },
-        "id": "WireCrossPoint",
-        "params": 1
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I2"
-        },
-        "pin2": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 5.0
-          },
-          {
-            "x": 35.0,
-            "y": 5.0
-          },
-          {
-            "x": 35.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 17,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 1,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 16,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 18,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 5.0,
-            "y": 195.0
-          },
-          {
-            "x": 65.0,
-            "y": 195.0
-          },
-          {
-            "x": 65.0,
-            "y": 185.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I1"
-        },
-        "pin2": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 55.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 19,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 2,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 65.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 0,
-          "pinName": "I0"
-        },
-        "pin2": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 20,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 3,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 21,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 7.5,
-            "y": 112.5
-          },
-          {
-            "x": 32.5,
-            "y": 112.5
-          },
-          {
-            "x": 32.5,
-            "y": 105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 1,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 20.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 22,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 6,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 32.5,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 2,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 4,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 23,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 5,
-          "pinName": "B"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 24,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 7,
-          "pinName": "A"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 25,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 35.0,
-            "y": 175.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 3,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 37.5,
-            "y": 35.0
-          },
-          {
-            "x": 65.0,
-            "y": 35.0
-          },
-          {
-            "x": 65.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 26,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 8,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 37.5,
-            "y": 185.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 4,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 9,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 5,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 55.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 27,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 10,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 65.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 6,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 28,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 11,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 7,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 135.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 29,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 12,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 65.0,
-            "y": 145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 8,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 13,
-          "pinName": "A"
-        }
-      },
-      {
-        "pin1": {
-          "compId": 9,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 15.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 30,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 14,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 25.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 10,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "RA"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 11,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "SB"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 12,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "SA"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 13,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "A"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 175.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 31,
-          "pinName": ""
-        },
-        "pin2": {
-          "compId": 15,
-          "pinName": "B"
-        },
-        "path": [
-          {
-            "x": 95.0,
-            "y": 185.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compId": 14,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "SQ"
-        },
-        "path": []
-      },
-      {
-        "pin1": {
-          "compId": 15,
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compId": 0,
-          "pinName": "RD"
-        },
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "Am2901SourceDecode",
-    "horizontalComponentCenter": 17.5,
-    "centerTextHeight": 5.0,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/ComponenetSerializer.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/ComponenetSerializer.java
deleted file mode 100644 (file)
index 4c7b5d9..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-package net.mograsim.logic.ui.examples;
-
-import java.io.IOException;
-import java.util.function.Function;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUI_rsLatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand41;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIandor414;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdemux2;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInand3;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInot4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram2;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel2_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUFuncDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUInclDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUInclSourceDecodeInclFunctionDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUOneBit;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901DestDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901QReg;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901SourceDecode;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class ComponenetSerializer
-{
-       public static void main(String[] args) throws IOException
-       {
-               // we know we only use components where this works
-               Function<GUIComponent, String> getIdentifier = c -> c.getClass().getSimpleName();
-
-               ViewModelModifiable model = new ViewModelModifiable();
-               SubmodelComponent[] components = { new GUIAm2901(model), new GUIAm2901ALUFuncDecode(model), new GUIAm2901ALUInclDecode(model),
-                               new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(model), new GUIAm2901ALUOneBit(model), new GUIAm2901DestDecode(model),
-                               new GUIAm2901QReg(model), new GUIAm2901SourceDecode(model), new GUI_rsLatch(model), new GUIand(model), new GUIand41(model),
-                               new GUIandor414(model), new GUIdemux2(model), new GUIdff(model), new GUIdlatch(model), new GUIdlatch4(model),
-                               new GUIfulladder(model), new GUIhalfadder(model), new GUImux1(model), new GUImux1_4(model), new GUInand3(model),
-                               new GUInot4(model), new GUIor4(model), new GUIor_4(model), new GUIram2(model), new GUIram4(model), new GUIsel2_4(model),
-                               new GUIsel3_4(model), new GUIxor(model) };
-
-               for (SubmodelComponent comp : components)
-               {
-                       SubmodelComponentParams params = comp.calculateParams(getIdentifier);
-                       JsonHandler.writeJson(params, "components/"
-                                       + comp.getClass().getName().substring("net.mograsim.logic.ui.model.components.mi.nandbased.".length()).replace('.', '/')
-                                       + ".json");
-               }
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/JsonExample.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/JsonExample.java
deleted file mode 100644 (file)
index c0ebad6..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-package net.mograsim.logic.ui.examples;
-
-import java.io.IOException;
-
-import com.google.gson.JsonNull;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUI_rsLatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class JsonExample
-{
-       public static void main(String[] args)
-       {
-               SimpleLogicUIStandalone.executeVisualisation(JsonExample::basicTest);
-       }
-
-       public static void mappingTest(ViewModelModifiable model)
-       {
-               IndirectGUIComponentCreator.createComponent(model, "Am2901", JsonNull.INSTANCE);
-       }
-
-       private static class TestComponent extends SimpleRectangularSubmodelComponent
-       {
-               protected TestComponent(ViewModelModifiable model)
-               {
-                       super(model, 1, "Test");
-                       setSubmodelScale(.4);
-                       setInputPins("Input pin #0");
-                       SubmodelComponentDeserializer.create(submodelModifiable, "HalfAdder.json");
-               }
-       }
-
-       @SuppressWarnings("unused") // GUIWires being created
-       private static void basicTest(ViewModelModifiable viewModel)
-       {
-               GUI_rsLatch comp = new GUI_rsLatch(viewModel);
-               comp.moveTo(30, 0);
-               SubmodelComponentParams params = comp.calculateParams();
-               String jsonString = JsonHandler.toJson(params);
-               System.out.println(jsonString);
-               SubmodelComponentParams paramsD = JsonHandler.fromJson(jsonString, SubmodelComponentParams.class);
-               SubmodelComponent componentD = SubmodelComponentDeserializer.create(viewModel, paramsD);
-               componentD.moveTo(30, 50);
-               double h = 0;
-               for (String s : comp.getInputPinNames())
-               {
-                       GUIManualSwitch sw = new GUIManualSwitch(viewModel);
-                       sw.moveTo(0, h);
-                       new GUIWire(viewModel, sw.getOutputPin(), comp.getPin(s));
-                       sw = new GUIManualSwitch(viewModel);
-                       sw.moveTo(0, h + 50);
-                       new GUIWire(viewModel, sw.getOutputPin(), componentD.getPin(s));
-                       h += 20;
-               }
-               h = 0;
-               for (String s : comp.getOutputPinNames())
-               {
-                       GUIBitDisplay bd = new GUIBitDisplay(viewModel);
-                       bd.moveTo(80, h);
-                       new GUIWire(viewModel, bd.getInputPin(), comp.getPin(s));
-                       bd = new GUIBitDisplay(viewModel);
-                       bd.moveTo(80, h + 50);
-                       new GUIWire(viewModel, bd.getInputPin(), componentD.getPin(s));
-                       h += 20;
-               }
-       }
-
-       // Execute only after HalfAdder.json has been created
-       public static void refJsonFromJsonTest(ViewModelModifiable model)
-       {
-               TestComponent t = new TestComponent(model);
-               t.calculateParams().writeJson("Test.json");
-               SubmodelComponent c = SubmodelComponentDeserializer.create(model, "Test.json");
-               c.moveTo(0, 50);
-       }
-
-       public static void createHalfAdderExample(ViewModelModifiable model)
-       {
-               GUIhalfadder tmp = new GUIhalfadder(model);
-               tmp.moveTo(1000, 50);
-               SubmodelComponentParams p = tmp.calculateParams();
-               try
-               {
-                       p.writeJson("HalfAdder.json");
-                       p = SubmodelComponentParams.readJson("HalfAdder.json");
-               }
-               catch (IOException e)
-               {
-                       e.printStackTrace();
-               }
-
-               SubmodelComponentDeserializer.create(model, p);
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       public static void createFromJsonExample(ViewModelModifiable model)
-       {
-               SimpleRectangularSubmodelComponent tmp = new GUIfulladder(model);
-               SubmodelComponentParams pC = tmp.calculateParams();
-               tmp.moveTo(1000, 100);
-               try
-               {
-                       pC.writeJson("FullAdder.json");
-                       pC = SubmodelComponentParams.readJson("FullAdder.json");
-               }
-               catch (IOException e)
-               {
-                       e.printStackTrace();
-               }
-
-               SimpleRectangularSubmodelComponent adder = (SimpleRectangularSubmodelComponent) SubmodelComponentDeserializer.create(model,
-                               "FullAdder.json");
-
-               GUIManualSwitch swA = new GUIManualSwitch(model);
-               swA.moveTo(0, 0);
-               GUIManualSwitch swB = new GUIManualSwitch(model);
-               swB.moveTo(0, 25);
-               GUIManualSwitch swC = new GUIManualSwitch(model);
-               swC.moveTo(0, 50);
-
-               adder.moveTo(30, 10);
-               GUIBitDisplay bdY = new GUIBitDisplay(model);
-               bdY.moveTo(90, 12.5);
-               GUIBitDisplay bdZ = new GUIBitDisplay(model);
-               bdZ.moveTo(90, 30);
-
-               new GUIWire(model, swA.getOutputPin(), adder.getPin("A"));
-               new GUIWire(model, swB.getOutputPin(), adder.getPin("B"));
-               new GUIWire(model, swC.getOutputPin(), adder.getPin("C"));
-
-               new GUIWire(model, adder.getPin("Y"), bdY.getInputPin());
-               new GUIWire(model, adder.getPin("Z"), bdZ.getInputPin());
-
-               SubmodelComponent adder2 = SubmodelComponentDeserializer.create(model, pC);
-
-               swA = new GUIManualSwitch(model);
-               swA.moveTo(0, 70);
-               swB = new GUIManualSwitch(model);
-               swB.moveTo(0, 85);
-               swC = new GUIManualSwitch(model);
-               swC.moveTo(0, 100);
-
-               adder2.moveTo(30, 80);
-               bdY = new GUIBitDisplay(model);
-               bdY.moveTo(90, 70);
-               bdZ = new GUIBitDisplay(model);
-               bdZ.moveTo(90, 85);
-
-               new GUIWire(model, swA.getOutputPin(), adder2.getPin("A"));
-               new GUIWire(model, swB.getOutputPin(), adder2.getPin("B"));
-               new GUIWire(model, swC.getOutputPin(), adder2.getPin("C"));
-
-               new GUIWire(model, adder2.getPin("Y"), bdY.getInputPin());
-               new GUIWire(model, adder2.getPin("Z"), bdZ.getInputPin());
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/SubmodelComponentTestbench.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/examples/SubmodelComponentTestbench.java
deleted file mode 100644 (file)
index 5f10c72..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.mograsim.logic.ui.examples;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-
-public class SubmodelComponentTestbench
-{
-       public static void main(String[] args)
-       {
-               SimpleLogicUIStandalone.executeVisualisation(SubmodelComponentTestbench::createTestbench);
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       public static void createTestbench(ViewModelModifiable model)
-       {
-               SubmodelComponent comp = SubmodelComponentDeserializer.create(model, "components/am2901/GUIAm2901.json");
-
-               // guess which pins are outputs and which are inputs
-               List<String> inputPinNames = new ArrayList<>();
-               List<String> outputPinNames = new ArrayList<>();
-               for (Pin p : comp.getPins().values())
-                       if (p.getRelX() == 0)
-                               inputPinNames.add(p.name);
-                       else
-                               outputPinNames.add(p.name);
-
-               comp.moveTo(100, 0);
-               for (int i = 0; i < inputPinNames.size(); i++)
-               {
-                       GUIManualSwitch sw = new GUIManualSwitch(model);
-                       sw.moveTo(0, 20 * i);
-                       new GUIWire(model, comp.getPin(inputPinNames.get(i)), sw.getOutputPin());
-               }
-               for (int i = 0; i < outputPinNames.size(); i++)
-               {
-                       GUIBitDisplay bd = new GUIBitDisplay(model);
-                       bd.moveTo(200, 20 * i);
-                       new GUIWire(model, comp.getPin(outputPinNames.get(i)), bd.getInputPin());
-               }
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java
deleted file mode 100644 (file)
index b190ffa..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUI_rsLatch extends SimpleRectangularSubmodelComponent
-{
-       private GUIWire wireQ, wire_Q;
-
-       public GUI_rsLatch(ViewModelModifiable model)
-       {
-               super(model, 1, "_rsLatch");
-               setSubmodelScale(.4);
-               setInputPins("_S", "_R");
-               setOutputPins("Q", "_Q");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin _S = getSubmodelPin("_S");
-               Pin _R = getSubmodelPin("_R");
-               Pin Q = getSubmodelPin("Q");
-               Pin _Q = getSubmodelPin("_Q");
-
-               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-
-               nand1.moveTo(10, 7.5);
-               nand2.moveTo(40, 12.5);
-               cp1.moveCenterTo(35, 17.5);
-               cp2.moveCenterTo(65, 37.5);
-
-               new GUIWire(submodelModifiable, _S, nand1.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, _R, nand2.getPin("B"), new Point(35, 37.5), new Point(35, 27.5));
-               new GUIWire(submodelModifiable, nand1.getPin("Y"), cp1, new Point[0]);
-               new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(65, 22.5));
-               new GUIWire(submodelModifiable, cp1, nand2.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cp2, nand1.getPin("B"), new Point(65, 42.5), new Point(5, 42.5), new Point(5, 22.5));
-               wireQ = new GUIWire(submodelModifiable, cp1, Q, new Point(35, 17.5), new Point(35, 7.5), new Point(65, 7.5), new Point(65, 12.5));
-               wire_Q = new GUIWire(submodelModifiable, cp2, _Q, new Point[0]);
-
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       if (wireQ != null)
-                       {
-                               // TODO force this to happen without any Timeline updates in the meantime.
-                               // Maybe make it a requirement of setHighLevelState that the Timeline is "halted" during a call?
-                               Bit newStateCasted = (Bit) newState;
-                               BitVector newStateVector = BitVector.of(newStateCasted);
-                               if (wireQ.hasLogicModelBinding())
-                                       wireQ.forceWireValues(newStateVector);
-                               // We set both wires because then both outputs go to their correct state at the same time, and to avoid problems when not
-                               // both
-                               // inputs are 1
-                               if (wire_Q.hasLogicModelBinding())
-                                       wire_Q.forceWireValues(newStateVector.not());
-                       }
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       if (wireQ.hasLogicModelBinding())
-                               return wireQ.getWireValues().getBit(0);
-                       return null;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUI_rsLatch.class.getCanonicalName(), (m, p) -> new GUI_rsLatch(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand.java
deleted file mode 100644 (file)
index b21474e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIand extends SimpleRectangularSubmodelComponent
-{
-       public GUIand(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIand");
-               setSubmodelScale(.4);
-               setInputPins("A", "B");
-               setOutputPins("Y");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A = getSubmodelPin("A");
-               Pin B = getSubmodelPin("B");
-               Pin Y = getSubmodelPin("Y");
-
-               GUINandGate nand = new GUINandGate(submodelModifiable, 1);
-               GUINandGate not = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-
-               nand.moveTo(20, 15);
-               not.moveTo(50, 15);
-               cp1.moveCenterTo(45, 25);
-
-               new GUIWire(submodelModifiable, A, nand.getPin("A"));
-               new GUIWire(submodelModifiable, B, nand.getPin("B"));
-               new GUIWire(submodelModifiable, nand.getPin("Y"), cp1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, not.getPin("A"), new Point(45, 20));
-               new GUIWire(submodelModifiable, cp1, not.getPin("B"), new Point(45, 30));
-               new GUIWire(submodelModifiable, not.getPin("Y"), Y);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIand.class.getCanonicalName(), (m, p) -> new GUIand(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand41.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand41.java
deleted file mode 100644 (file)
index fc1a5bd..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIand41 extends SimpleRectangularSubmodelComponent
-{
-       public GUIand41(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIand41");
-               setSubmodelScale(.4);
-               setInputPins("A1", "A2", "A3", "A4", "B");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B = getSubmodelPin("B");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUIand and1 = new GUIand(submodelModifiable);
-               GUIand and2 = new GUIand(submodelModifiable);
-               GUIand and3 = new GUIand(submodelModifiable);
-               GUIand and4 = new GUIand(submodelModifiable);
-
-               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
-
-               and1.moveTo(30, 7.5);
-               and2.moveTo(30, 32.5);
-               and3.moveTo(30, 57.5);
-               and4.moveTo(30, 82.5);
-               cpB2.moveCenterTo(25, 47.5);
-               cpB3.moveCenterTo(25, 72.5);
-               cpB4.moveCenterTo(25, 97.5);
-
-               new GUIWire(submodelModifiable, A1, and1.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, A2, and2.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, A3, and3.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, A4, and4.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, B, cpB4, new Point(25, 112.5));
-               new GUIWire(submodelModifiable, cpB4, and4.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB4, cpB3, new Point[0]);
-               new GUIWire(submodelModifiable, cpB3, and3.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB3, cpB2, new Point[0]);
-               new GUIWire(submodelModifiable, cpB2, and2.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB2, and1.getPin("B"), new Point(25, 22.5));
-               new GUIWire(submodelModifiable, and1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, and2.getPin("Y"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, and3.getPin("Y"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, and4.getPin("Y"), Y4, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIand41.class.getCanonicalName(), (m, p) -> new GUIand41(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIandor414.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIandor414.java
deleted file mode 100644 (file)
index c514d4c..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIandor414 extends SimpleRectangularSubmodelComponent
-{
-       public GUIandor414(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIandor414");
-               setSubmodelScale(.4);
-               setInputPins("C1", "C2", "C3", "C4", "A1", "A2", "A3", "A4", "B");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin C1 = getSubmodelPin("C1");
-               Pin C2 = getSubmodelPin("C2");
-               Pin C3 = getSubmodelPin("C3");
-               Pin C4 = getSubmodelPin("C4");
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B = getSubmodelPin("B");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUIand41 and = new GUIand41(submodelModifiable);
-               GUIor_4 or = new GUIor_4(submodelModifiable);
-
-               and.moveTo(15, 137.5);
-               or.moveTo(35, 37.5);
-
-               new GUIWire(submodelModifiable, A1, and.getPin("A1"), new Point(10, 112.5), new Point(10, 142.5));
-               new GUIWire(submodelModifiable, A2, and.getPin("A2"), new Point(5, 137.5), new Point(5, 152.5));
-               new GUIWire(submodelModifiable, A3, and.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, A4, and.getPin("A4"), new Point(5, 187.5), new Point(5, 172.5));
-               new GUIWire(submodelModifiable, B, and.getPin("B"), new Point(10, 212.5), new Point(10, 182.5));
-               new GUIWire(submodelModifiable, C1, or.getPin("A1"), new Point(10, 12.5), new Point(10, 42.5));
-               new GUIWire(submodelModifiable, C2, or.getPin("A2"), new Point(5, 37.5), new Point(5, 52.5));
-               new GUIWire(submodelModifiable, C3, or.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, C4, or.getPin("A4"), new Point(5, 87.5), new Point(5, 72.5));
-               new GUIWire(submodelModifiable, and.getPin("Y1"), or.getPin("B1"), new Point(70, 142.5), new Point(70, 120), new Point(30, 120),
-                               new Point(30, 82.5));
-               new GUIWire(submodelModifiable, and.getPin("Y2"), or.getPin("B2"), new Point(65, 152.5), new Point(65, 125), new Point(25, 125),
-                               new Point(25, 92.5));
-               new GUIWire(submodelModifiable, and.getPin("Y3"), or.getPin("B3"), new Point(60, 162.5), new Point(60, 130), new Point(20, 130),
-                               new Point(20, 102.5));
-               new GUIWire(submodelModifiable, and.getPin("Y4"), or.getPin("B4"), new Point(55, 172.5), new Point(55, 135), new Point(15, 135),
-                               new Point(15, 112.5));
-               new GUIWire(submodelModifiable, or.getPin("Y1"), Y1, new Point(75, 42.5), new Point(75, 12.5));
-               new GUIWire(submodelModifiable, or.getPin("Y2"), Y2, new Point(80, 52.5), new Point(80, 37.5));
-               new GUIWire(submodelModifiable, or.getPin("Y3"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, or.getPin("Y4"), Y4, new Point(80, 72.5), new Point(80, 87.5));
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIandor414.class.getCanonicalName(), (m, p) -> new GUIandor414(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdemux2.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdemux2.java
deleted file mode 100644 (file)
index 1f1940b..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdemux2 extends SimpleRectangularSubmodelComponent
-{
-       public GUIdemux2(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIdemux2");
-               setSubmodelScale(.4);
-               setInputPins("S0", "S1");
-               setOutputPins("Y00", "Y01", "Y10", "Y11");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin S0 = getSubmodelPin("S0");
-               Pin S1 = getSubmodelPin("S1");
-               Pin Y00 = getSubmodelPin("Y00");
-               Pin Y01 = getSubmodelPin("Y01");
-               Pin Y10 = getSubmodelPin("Y10");
-               Pin Y11 = getSubmodelPin("Y11");
-
-               GUINandGate notS0 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notS1 = new GUINandGate(submodelModifiable, 1);
-               GUIand andY00 = new GUIand(submodelModifiable);
-               GUIand andY01 = new GUIand(submodelModifiable);
-               GUIand andY10 = new GUIand(submodelModifiable);
-               GUIand andY11 = new GUIand(submodelModifiable);
-
-               WireCrossPoint cpS01 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpS02 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpS03 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpS11 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpS12 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpS13 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotS0 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotS1 = new WireCrossPoint(submodelModifiable, 1);
-
-               notS0.moveTo(10, 2.5);
-               notS1.moveTo(10, 27.5);
-               andY00.moveTo(40, 2.5);
-               andY01.moveTo(40, 27.5);
-               andY10.moveTo(40, 52.5);
-               andY11.moveTo(40, 77.5);
-               cpS01.moveCenterTo(7.5, 12.5);
-               cpS11.moveCenterTo(5, 37.5);
-               cpS02.moveCenterTo(7.5, 17.5);
-               cpS12.moveCenterTo(5, 42.5);
-               cpS03.moveCenterTo(37.5, 62.5);
-               cpS13.moveCenterTo(32.5, 67.5);
-               cpNotS0.moveCenterTo(32.5, 12.5);
-               cpNotS1.moveCenterTo(35, 37.5);
-
-               new GUIWire(submodelModifiable, S0, cpS01, new Point[0]);
-               new GUIWire(submodelModifiable, S1, cpS11, new Point[0]);
-               new GUIWire(submodelModifiable, cpS01, notS0.getPin("A"), new Point(7.5, 7.5));
-               new GUIWire(submodelModifiable, cpS11, notS1.getPin("A"), new Point(5, 32.5));
-               new GUIWire(submodelModifiable, cpS01, cpS02, new Point[0]);
-               new GUIWire(submodelModifiable, cpS11, cpS12, new Point[0]);
-               new GUIWire(submodelModifiable, cpS02, notS0.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpS12, notS1.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpS02, cpS03, new Point(7.5, 62.5));
-               new GUIWire(submodelModifiable, cpS12, cpS13, new Point(5, 67.5), new Point(32.5, 67.5));
-               new GUIWire(submodelModifiable, notS0.getPin("Y"), cpNotS0, new Point[0]);
-               new GUIWire(submodelModifiable, notS1.getPin("Y"), cpNotS1, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotS0, andY00.getPin("A"), new Point(32.5, 7.5));
-               new GUIWire(submodelModifiable, cpNotS1, andY00.getPin("B"), new Point(35, 17.5));
-               new GUIWire(submodelModifiable, cpS03, andY01.getPin("A"), new Point(37.5, 32.5));
-               new GUIWire(submodelModifiable, cpNotS1, andY01.getPin("B"), new Point(35, 42.5));
-               new GUIWire(submodelModifiable, cpNotS0, andY10.getPin("A"), new Point(32.5, 57.5));
-               new GUIWire(submodelModifiable, cpS13, andY10.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpS03, andY11.getPin("A"), new Point(37.5, 82.5));
-               new GUIWire(submodelModifiable, cpS13, andY11.getPin("B"), new Point(32.5, 92.5));
-               new GUIWire(submodelModifiable, andY00.getPin("Y"), Y00);
-               new GUIWire(submodelModifiable, andY01.getPin("Y"), Y01);
-               new GUIWire(submodelModifiable, andY10.getPin("Y"), Y10);
-               new GUIWire(submodelModifiable, andY11.getPin("Y"), Y11);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIdemux2.class.getCanonicalName(), (m, p) -> new GUIdemux2(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdff.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdff.java
deleted file mode 100644 (file)
index 440f4d1..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdff extends SimpleRectangularSubmodelComponent
-{
-       private GUI_rsLatch _rsLatch;
-
-       public GUIdff(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIdff");
-               setSubmodelScale(.2);
-               setInputPins("C", "D");
-               setOutputPins("Q", "_Q");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin C = getSubmodelPin("C");
-               Pin D = getSubmodelPin("D");
-               Pin Q = getSubmodelPin("Q");
-               Pin _Q = getSubmodelPin("_Q");
-
-               GUI_rsLatch _rsLatch1 = new GUI_rsLatch(submodelModifiable);
-               GUInand3 nand3 = new GUInand3(submodelModifiable);
-               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
-               GUI_rsLatch _rsLatch2 = this._rsLatch = new GUI_rsLatch(submodelModifiable);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
-               _rsLatch1.moveTo(40, 10);
-               nand3.moveTo(40, 40);
-               nand2.moveTo(120, 60);
-               _rsLatch2.moveTo(120, 30);
-               cp1.moveCenterTo(10, 25);
-               cp2.moveCenterTo(20, 65);
-               cp3.moveCenterTo(100, 35);
-               cp4.moveCenterTo(100, 45);
-
-               new GUIWire(submodelModifiable, C, cp1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, _rsLatch1.getPin("_R"), new Point[0]);
-               new GUIWire(submodelModifiable, cp1, nand3.getPin("B"), new Point(10, 55));
-               new GUIWire(submodelModifiable, D, nand2.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(145, 70), new Point(145, 85), new Point(20, 85));
-               new GUIWire(submodelModifiable, cp2, _rsLatch1.getPin("_S"), new Point(20, 15));
-               new GUIWire(submodelModifiable, cp2, nand3.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, _rsLatch1.getPin("_Q"), cp3, new Point(100, 25));
-               new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(30, 35), new Point(30, 45));
-               new GUIWire(submodelModifiable, cp3, _rsLatch2.getPin("_S"), new Point[0]);
-               new GUIWire(submodelModifiable, nand3.getPin("Y"), cp4, new Point[0]);
-               new GUIWire(submodelModifiable, cp4, _rsLatch2.getPin("_R"), new Point[0]);
-               new GUIWire(submodelModifiable, cp4, nand2.getPin("A"), new Point(100, 65));
-               new GUIWire(submodelModifiable, _rsLatch2.getPin("Q"), Q);
-               new GUIWire(submodelModifiable, _rsLatch2.getPin("_Q"), _Q);
-
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       _rsLatch.setHighLevelState("q", newState);
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       return _rsLatch.getHighLevelState("q");
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIdff.class.getCanonicalName(), (m, p) -> new GUIdff(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch.java
deleted file mode 100644 (file)
index ff15892..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdlatch extends SimpleRectangularSubmodelComponent
-{
-       private GUI_rsLatch _rsLatch;
-
-       public GUIdlatch(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIdlatch");
-               setSubmodelScale(.4);
-               setInputPins("D", "E");
-               setOutputPins("Q", "_Q");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin D = getSubmodelPin("D");
-               Pin E = getSubmodelPin("E");
-               Pin Q = getSubmodelPin("Q");
-               Pin _Q = getSubmodelPin("_Q");
-
-               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
-               _rsLatch = new GUI_rsLatch(submodelModifiable);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-
-               nand1.moveTo(10, 2.5);
-               nand2.moveTo(15, 27.5);
-               _rsLatch.moveTo(45, 7.5);
-               cp1.moveCenterTo(5, 37.5);
-               cp2.moveCenterTo(35, 12.5);
-
-               new GUIWire(submodelModifiable, D, nand1.getPin("A"));
-               new GUIWire(submodelModifiable, E, cp1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(5, 17.5));
-               new GUIWire(submodelModifiable, cp1, nand2.getPin("B"), new Point(5, 42.5));
-               new GUIWire(submodelModifiable, nand1.getPin("Y"), cp2, new Point[0]);
-               new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(35, 25), new Point(10, 25), new Point(10, 32.5));
-               new GUIWire(submodelModifiable, cp2, _rsLatch.getPin("_S"), new Point[0]);
-               new GUIWire(submodelModifiable, nand2.getPin("Y"), _rsLatch.getPin("_R"), new Point(40, 37.5), new Point(40, 22.5));
-               new GUIWire(submodelModifiable, _rsLatch.getPin("Q"), Q, new Point[0]);
-               new GUIWire(submodelModifiable, _rsLatch.getPin("_Q"), _Q);
-
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       _rsLatch.setHighLevelState("q", newState);
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       return _rsLatch.getHighLevelState("q");
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIdlatch.class.getCanonicalName(), (m, p) -> new GUIdlatch(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch4.java
deleted file mode 100644 (file)
index 10ee84d..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdlatch4 extends SimpleRectangularSubmodelComponent
-{
-       private GUIdlatch dlatch1;
-       private GUIdlatch dlatch2;
-       private GUIdlatch dlatch3;
-       private GUIdlatch dlatch4;
-
-       public GUIdlatch4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIdlatch4");
-               setSubmodelScale(.4);
-               setInputPins("D1", "D2", "D3", "D4", "C");
-               setOutputPins("Q1", "Q2", "Q3", "Q4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin D1 = getSubmodelPin("D1");
-               Pin D2 = getSubmodelPin("D2");
-               Pin D3 = getSubmodelPin("D3");
-               Pin D4 = getSubmodelPin("D4");
-               Pin C = getSubmodelPin("C");
-               Pin Q1 = getSubmodelPin("Q1");
-               Pin Q2 = getSubmodelPin("Q2");
-               Pin Q3 = getSubmodelPin("Q3");
-               Pin Q4 = getSubmodelPin("Q4");
-
-               dlatch1 = new GUIdlatch(submodelModifiable);
-               dlatch2 = new GUIdlatch(submodelModifiable);
-               dlatch3 = new GUIdlatch(submodelModifiable);
-               dlatch4 = new GUIdlatch(submodelModifiable);
-
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
-               dlatch1.moveTo(30, 7.5);
-               dlatch2.moveTo(30, 32.5);
-               dlatch3.moveTo(30, 57.5);
-               dlatch4.moveTo(30, 82.5);
-               cp2.moveCenterTo(15, 47.5);
-               cp3.moveCenterTo(15, 72.5);
-               cp4.moveCenterTo(15, 97.5);
-
-               new GUIWire(submodelModifiable, C, cp4, new Point(15, 112.5));
-               new GUIWire(submodelModifiable, cp4, dlatch4.getPin("E"), new Point[0]);
-               new GUIWire(submodelModifiable, cp4, cp3, new Point[0]);
-               new GUIWire(submodelModifiable, cp3, dlatch3.getPin("E"), new Point[0]);
-               new GUIWire(submodelModifiable, cp3, cp2, new Point[0]);
-               new GUIWire(submodelModifiable, cp2, dlatch2.getPin("E"), new Point[0]);
-               new GUIWire(submodelModifiable, cp2, dlatch1.getPin("E"), new Point(15, 22.5));
-               new GUIWire(submodelModifiable, D1, dlatch1.getPin("D"), new Point[0]);
-               new GUIWire(submodelModifiable, D2, dlatch2.getPin("D"), new Point[0]);
-               new GUIWire(submodelModifiable, D3, dlatch3.getPin("D"), new Point[0]);
-               new GUIWire(submodelModifiable, D4, dlatch4.getPin("D"), new Point[0]);
-               new GUIWire(submodelModifiable, dlatch1.getPin("Q"), Q1, new Point[0]);
-               new GUIWire(submodelModifiable, dlatch2.getPin("Q"), Q2, new Point[0]);
-               new GUIWire(submodelModifiable, dlatch3.getPin("Q"), Q3, new Point[0]);
-               new GUIWire(submodelModifiable, dlatch4.getPin("Q"), Q4, new Point[0]);
-
-               addAtomicHighLevelStateID("q1");
-               addAtomicHighLevelStateID("q2");
-               addAtomicHighLevelStateID("q3");
-               addAtomicHighLevelStateID("q4");
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q1":
-                       dlatch1.setHighLevelState("q", newState);
-                       break;
-               case "q2":
-                       dlatch2.setHighLevelState("q", newState);
-                       break;
-               case "q3":
-                       dlatch3.setHighLevelState("q", newState);
-                       break;
-               case "q4":
-                       dlatch4.setHighLevelState("q", newState);
-                       break;
-               case "q":
-                       BitVector newStateCasted = (BitVector) newState;
-                       setHighLevelState("q1", newStateCasted.getBit(0));
-                       setHighLevelState("q2", newStateCasted.getBit(1));
-                       setHighLevelState("q3", newStateCasted.getBit(2));
-                       setHighLevelState("q4", newStateCasted.getBit(3));
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q1":
-                       return dlatch1.getHighLevelState("q");
-               case "q2":
-                       return dlatch2.getHighLevelState("q");
-               case "q3":
-                       return dlatch3.getHighLevelState("q");
-               case "q4":
-                       return dlatch4.getHighLevelState("q");
-               case "q":
-                       Bit q1 = (Bit) getHighLevelState("q1");
-                       Bit q2 = (Bit) getHighLevelState("q2");
-                       Bit q3 = (Bit) getHighLevelState("q3");
-                       Bit q4 = (Bit) getHighLevelState("q4");
-                       return BitVector.of(q1, q2, q3, q4);
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIdlatch4.class.getCanonicalName(), (m, p) -> new GUIdlatch4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIfulladder.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIfulladder.java
deleted file mode 100644 (file)
index 7ec7771..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIfulladder extends SimpleRectangularSubmodelComponent
-{
-       public GUIfulladder(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIfulladder");
-               setSubmodelScale(.4);
-               setInputPins("A", "B", "C");
-               setOutputPins("Y", "Z");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A = getSubmodelPin("A");
-               Pin B = getSubmodelPin("B");
-               Pin C = getSubmodelPin("C");
-               Pin Y = getSubmodelPin("Y");
-               Pin Z = getSubmodelPin("Z");
-
-               GUIhalfadder halfBC = new GUIhalfadder(submodelModifiable);
-               GUIhalfadder halfAY = new GUIhalfadder(submodelModifiable);
-               GUINandGate nandZ = new GUINandGate(submodelModifiable, 1);
-
-               halfAY.moveTo(45, 7.5);
-               halfBC.moveTo(5, 40);
-               nandZ.moveTo(57.5, 40);
-
-               new GUIWire(submodelModifiable, A, halfAY.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, B, halfBC.getPin("A"));
-               new GUIWire(submodelModifiable, C, halfBC.getPin("B"));
-               new GUIWire(submodelModifiable, halfBC.getPin("Y"), halfAY.getPin("B"));
-               new GUIWire(submodelModifiable, halfBC.getPin("_Z"), nandZ.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, halfAY.getPin("Y"), Y, new Point[0]);
-               new GUIWire(submodelModifiable, halfAY.getPin("_Z"), nandZ.getPin("A"), new Point(82.5, 22.5), new Point(82.5, 35),
-                               new Point(52.5, 35), new Point(52.5, 45));
-               new GUIWire(submodelModifiable, nandZ.getPin("Y"), Z);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIfulladder.class.getCanonicalName(), (m, p) -> new GUIfulladder(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIhalfadder.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIhalfadder.java
deleted file mode 100644 (file)
index 7a80a95..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIhalfadder extends SimpleRectangularSubmodelComponent
-{
-       public GUIhalfadder(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIhalfadder");
-               setSubmodelScale(.4);
-               setInputPins("A", "B");
-               setOutputPins("Y", "_Z");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A = getSubmodelPin("A");
-               Pin B = getSubmodelPin("B");
-               Pin Y = getSubmodelPin("Y");
-               Pin _Z = getSubmodelPin("_Z");
-
-               GUINandGate nand_Z = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp_Z = new WireCrossPoint(submodelModifiable, 1);
-
-               nand_Z.moveTo(10, 15);
-               nandYA.moveTo(40, 2.5);
-               nandYB.moveTo(40, 27.5);
-               nandY.moveTo(65, 2.5);
-               cpA.moveCenterTo(5, 12.5);
-               cpB.moveCenterTo(5, 37.5);
-               cp_Z.moveCenterTo(35, 25);
-
-               new GUIWire(submodelModifiable, A, cpA, new Point[0]);
-               new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
-               new GUIWire(submodelModifiable, cpA, nand_Z.getPin("A"), new Point(5, 20));
-               new GUIWire(submodelModifiable, B, cpB, new Point[0]);
-               new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
-               new GUIWire(submodelModifiable, cpB, nand_Z.getPin("B"), new Point(5, 30));
-               new GUIWire(submodelModifiable, nand_Z.getPin("Y"), cp_Z, new Point[0]);
-               new GUIWire(submodelModifiable, cp_Z, _Z, new Point(80, 25), new Point(80, 37.5));
-               new GUIWire(submodelModifiable, cp_Z, nandYA.getPin("B"), new Point(35, 17.5));
-               new GUIWire(submodelModifiable, cp_Z, nandYB.getPin("A"), new Point(35, 32.5));
-               new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"), new Point(62.5, 12.5), new Point(62.5, 7.5));
-               new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"), new Point(62.5, 37.5), new Point(62.5, 17.5));
-               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIhalfadder.class.getCanonicalName(), (m, p) -> new GUIhalfadder(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1.java
deleted file mode 100644 (file)
index 291f628..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUImux1 extends SimpleRectangularSubmodelComponent
-{
-       public GUImux1(ViewModelModifiable model)
-       {
-               super(model, 1, "GUImux1");
-               setSubmodelScale(.4);
-               setInputPins("S0", "I0", "I1");
-               setOutputPins("Y");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused")
-       private void initSubmodelComponents()
-       {
-               Pin S0 = getSubmodelPin("S0");
-               Pin I0 = getSubmodelPin("I0");
-               Pin I1 = getSubmodelPin("I1");
-               Pin Y = getSubmodelPin("Y");
-
-               GUINandGate nandS0 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandI0 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandI1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cp0 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-
-               nandS0.moveTo(10, 7.5);
-               nandI0.moveTo(35, 22.5);
-               nandI1.moveTo(35, 47.5);
-               nandY.moveTo(60, 30);
-               cp0.moveCenterTo(5, 12.5);
-               cp1.moveCenterTo(5, 22.5);
-
-               new GUIWire(submodelModifiable, S0, cp0, new Point[0]);
-               new GUIWire(submodelModifiable, cp0, nandS0.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cp0, cp1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, nandS0.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nandS0.getPin("Y"), nandI0.getPin("A"));
-               new GUIWire(submodelModifiable, I0, nandI0.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cp1, nandI1.getPin("A"), new Point(5, 52.5));
-               new GUIWire(submodelModifiable, I1, nandI1.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nandI0.getPin("Y"), nandY.getPin("A"));
-               new GUIWire(submodelModifiable, nandI1.getPin("Y"), nandY.getPin("B"));
-               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUImux1.class.getCanonicalName(), (m, p) -> new GUImux1(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1_4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1_4.java
deleted file mode 100644 (file)
index ff0353b..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUImux1_4 extends SimpleRectangularSubmodelComponent
-{
-       public GUImux1_4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUImux1_4");
-               setSubmodelScale(.4);
-               setInputPins("S0", "I0_1", "I0_2", "I0_3", "I0_4", "I1_1", "I1_2", "I1_3", "I1_4");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused")
-       private void initSubmodelComponents()
-       {
-               Pin S0 = getSubmodelPin("S0");
-               Pin I0_1 = getSubmodelPin("I0_1");
-               Pin I0_2 = getSubmodelPin("I0_2");
-               Pin I0_3 = getSubmodelPin("I0_3");
-               Pin I0_4 = getSubmodelPin("I0_4");
-               Pin I1_1 = getSubmodelPin("I1_1");
-               Pin I1_2 = getSubmodelPin("I1_2");
-               Pin I1_3 = getSubmodelPin("I1_3");
-               Pin I1_4 = getSubmodelPin("I1_4");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUImux1 mux1 = new GUImux1(submodelModifiable);
-               GUImux1 mux2 = new GUImux1(submodelModifiable);
-               GUImux1 mux3 = new GUImux1(submodelModifiable);
-               GUImux1 mux4 = new GUImux1(submodelModifiable);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
-
-               mux1.moveTo(30, 7.5);
-               mux2.moveTo(30, 42.5);
-               mux3.moveTo(30, 77.5);
-               mux4.moveTo(30, 112.5);
-               cp1.moveCenterTo(25, 12.5);
-               cp2.moveCenterTo(25, 47.5);
-               cp3.moveCenterTo(25, 82.5);
-
-               new GUIWire(submodelModifiable, S0, cp1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, mux1.getPin("S0"), new Point[0]);
-               new GUIWire(submodelModifiable, I0_1, mux1.getPin("I0"), new Point(5, 37.5), new Point(5, 22.5));
-               new GUIWire(submodelModifiable, I1_1, mux1.getPin("I1"), new Point(10, 137.5), new Point(10, 32.5));
-               new GUIWire(submodelModifiable, mux1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, cp2, new Point[0]);
-               new GUIWire(submodelModifiable, cp2, mux2.getPin("S0"), new Point[0]);
-               new GUIWire(submodelModifiable, I0_2, mux2.getPin("I0"), new Point(5, 62.5), new Point(5, 57.5));
-               new GUIWire(submodelModifiable, I1_2, mux2.getPin("I1"), new Point(15, 162.5), new Point(15, 67.5));
-               new GUIWire(submodelModifiable, mux2.getPin("Y"), Y2);
-               new GUIWire(submodelModifiable, cp2, cp3, new Point[0]);
-               new GUIWire(submodelModifiable, cp3, mux3.getPin("S0"), new Point[0]);
-               new GUIWire(submodelModifiable, I0_3, mux3.getPin("I0"), new Point(5, 87.5), new Point(5, 92.5));
-               new GUIWire(submodelModifiable, I1_3, mux3.getPin("I1"), new Point(20, 187.5), new Point(20, 102.5));
-               new GUIWire(submodelModifiable, mux3.getPin("Y"), Y3);
-               new GUIWire(submodelModifiable, cp3, mux4.getPin("S0"), new Point(25, 117.5));
-               new GUIWire(submodelModifiable, I0_4, mux4.getPin("I0"), new Point(5, 112.5), new Point(5, 127.5));
-               new GUIWire(submodelModifiable, I1_4, mux4.getPin("I1"), new Point(25, 212.5), new Point(25, 137.5));
-               new GUIWire(submodelModifiable, mux4.getPin("Y"), Y4);
-
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUImux1_4.class.getCanonicalName(), (m, p) -> new GUImux1_4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java
deleted file mode 100644 (file)
index 39d29e2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUInand3 extends SimpleRectangularSubmodelComponent
-{
-       public GUInand3(ViewModelModifiable model)
-       {
-               super(model, 1, "GUInand3");
-               setSubmodelScale(.4);
-               setInputPins("A", "B", "C");
-               setOutputPins("Y");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A = getSubmodelPin("A");
-               Pin B = getSubmodelPin("B");
-               Pin C = getSubmodelPin("C");
-               Pin Y = getSubmodelPin("Y");
-
-               GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
-               GUINandGate andAB = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandABC = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpNandAB = new WireCrossPoint(submodelModifiable, 1);
-
-               nandAB.moveTo(10, 15);
-               andAB.moveTo(35, 15);
-               nandABC.moveTo(62.5, 2.5);
-               cpNandAB.moveCenterTo(32.5, 25);
-
-               new GUIWire(submodelModifiable, A, nandAB.getPin("A"));
-               new GUIWire(submodelModifiable, B, nandAB.getPin("B"));
-               new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpNandAB, new Point[0]);
-               new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("A"), new Point(32.5, 20));
-               new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("B"), new Point(32.5, 30));
-               new GUIWire(submodelModifiable, andAB.getPin("Y"), nandABC.getPin("A"), new Point(57.5, 25), new Point(57.5, 7.5));
-               new GUIWire(submodelModifiable, C, nandABC.getPin("B"), new Point(60, 62.5), new Point(60, 17.5));
-               new GUIWire(submodelModifiable, nandABC.getPin("Y"), Y, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUInand3.class.getCanonicalName(), (m, p) -> new GUInand3(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInot4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInot4.java
deleted file mode 100644 (file)
index 13d2b1f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUInot4 extends SimpleRectangularSubmodelComponent
-{
-       public GUInot4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUInot4");
-               setSubmodelScale(.4);
-               setInputPins("A1", "A2", "A3", "A4");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand4 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
-               nand1.moveTo(30, 2.5);
-               nand2.moveTo(30, 27.5);
-               nand3.moveTo(30, 52.5);
-               nand4.moveTo(30, 77.5);
-               cp1.moveCenterTo(15, 12.5);
-               cp2.moveCenterTo(15, 37.5);
-               cp3.moveCenterTo(15, 62.5);
-               cp4.moveCenterTo(15, 87.5);
-
-               new GUIWire(submodelModifiable, A1, cp1, new Point[0]);
-               new GUIWire(submodelModifiable, A2, cp2, new Point[0]);
-               new GUIWire(submodelModifiable, A3, cp3, new Point[0]);
-               new GUIWire(submodelModifiable, A4, cp4, new Point[0]);
-               new GUIWire(submodelModifiable, cp1, nand1.getPin("A"), new Point(15, 7.5));
-               new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(15, 32.5));
-               new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(15, 57.5));
-               new GUIWire(submodelModifiable, cp4, nand4.getPin("A"), new Point(15, 82.5));
-               new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(15, 17.5));
-               new GUIWire(submodelModifiable, cp2, nand2.getPin("B"), new Point(15, 42.5));
-               new GUIWire(submodelModifiable, cp3, nand3.getPin("B"), new Point(15, 67.5));
-               new GUIWire(submodelModifiable, cp4, nand4.getPin("B"), new Point(15, 92.5));
-               new GUIWire(submodelModifiable, nand1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, nand2.getPin("Y"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, nand3.getPin("Y"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, nand4.getPin("Y"), Y4, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUInot4.class.getCanonicalName(), (m, p) -> new GUInot4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor4.java
deleted file mode 100644 (file)
index 9f7dde4..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIor4 extends SimpleRectangularSubmodelComponent
-{
-       public GUIor4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIor4");
-               setSubmodelScale(.2);
-               setInputPins("A1", "A2", "A3", "A4");
-               setOutputPins("Y");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin Y = getSubmodelPin("Y");
-
-               GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate or12 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate or34 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nor12 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nor34 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate or1234 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpOr12 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpOr34 = new WireCrossPoint(submodelModifiable, 1);
-
-               nandA1.moveTo(20, 15);
-               nandA2.moveTo(20, 65);
-               nandA3.moveTo(20, 115);
-               nandA4.moveTo(20, 165);
-               or12.moveTo(50, 40);
-               or34.moveTo(50, 140);
-               nor12.moveTo(110, 40);
-               nor34.moveTo(110, 140);
-               or1234.moveTo(140, 90);
-               cpA1.moveCenterTo(15, 25);
-               cpA2.moveCenterTo(15, 75);
-               cpA3.moveCenterTo(15, 125);
-               cpA4.moveCenterTo(15, 175);
-               cpOr12.moveCenterTo(105, 50);
-               cpOr34.moveCenterTo(105, 150);
-
-               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
-               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
-               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
-               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
-               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("A"), new Point(15, 20));
-               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("A"), new Point(15, 70));
-               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("A"), new Point(15, 120));
-               new GUIWire(submodelModifiable, cpA4, nandA4.getPin("A"), new Point(15, 170));
-               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"), new Point(15, 30));
-               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"), new Point(15, 80));
-               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"), new Point(15, 130));
-               new GUIWire(submodelModifiable, cpA4, nandA4.getPin("B"), new Point(15, 180));
-               new GUIWire(submodelModifiable, nandA1.getPin("Y"), or12.getPin("A"));
-               new GUIWire(submodelModifiable, nandA2.getPin("Y"), or12.getPin("B"));
-               new GUIWire(submodelModifiable, nandA3.getPin("Y"), or34.getPin("A"));
-               new GUIWire(submodelModifiable, nandA4.getPin("Y"), or34.getPin("B"));
-               new GUIWire(submodelModifiable, or12.getPin("Y"), cpOr12, new Point[0]);
-               new GUIWire(submodelModifiable, or34.getPin("Y"), cpOr34, new Point[0]);
-               new GUIWire(submodelModifiable, cpOr12, nor12.getPin("A"), new Point(105, 45));
-               new GUIWire(submodelModifiable, cpOr12, nor12.getPin("B"), new Point(105, 55));
-               new GUIWire(submodelModifiable, cpOr34, nor34.getPin("A"), new Point(105, 145));
-               new GUIWire(submodelModifiable, cpOr34, nor34.getPin("B"), new Point(105, 155));
-               new GUIWire(submodelModifiable, nor12.getPin("Y"), or1234.getPin("A"));
-               new GUIWire(submodelModifiable, nor34.getPin("Y"), or1234.getPin("B"));
-               new GUIWire(submodelModifiable, or1234.getPin("Y"), Y);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIor4.class.getCanonicalName(), (m, p) -> new GUIor4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor_4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor_4.java
deleted file mode 100644 (file)
index ba10373..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIor_4 extends SimpleRectangularSubmodelComponent
-{
-       public GUIor_4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIor_4");
-               setSubmodelScale(.4);
-               setInputPins("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B1 = getSubmodelPin("B1");
-               Pin B2 = getSubmodelPin("B2");
-               Pin B3 = getSubmodelPin("B3");
-               Pin B4 = getSubmodelPin("B4");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUINandGate notA1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notA2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notA3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notA4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notB1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notB2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notB3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notB4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
-
-               notA1.moveTo(15, 2.5);
-               notA2.moveTo(15, 27.5);
-               notA3.moveTo(15, 52.5);
-               notA4.moveTo(15, 77.5);
-               notB1.moveTo(15, 102.5);
-               notB2.moveTo(15, 127.5);
-               notB3.moveTo(15, 152.5);
-               notB4.moveTo(15, 177.5);
-               nandY1.moveTo(65, 2.5);
-               nandY2.moveTo(65, 27.5);
-               nandY3.moveTo(65, 52.5);
-               nandY4.moveTo(65, 77.5);
-               cpA1.moveCenterTo(7.5, 12.5);
-               cpA2.moveCenterTo(7.5, 37.5);
-               cpA3.moveCenterTo(7.5, 62.5);
-               cpA4.moveCenterTo(7.5, 87.5);
-               cpB1.moveCenterTo(7.5, 112.5);
-               cpB2.moveCenterTo(7.5, 137.5);
-               cpB3.moveCenterTo(7.5, 162.5);
-               cpB4.moveCenterTo(7.5, 187.5);
-
-               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
-               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
-               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
-               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
-               new GUIWire(submodelModifiable, B1, cpB1, new Point[0]);
-               new GUIWire(submodelModifiable, B2, cpB2, new Point[0]);
-               new GUIWire(submodelModifiable, B3, cpB3, new Point[0]);
-               new GUIWire(submodelModifiable, B4, cpB4, new Point[0]);
-               new GUIWire(submodelModifiable, cpA1, notA1.getPin("A"), new Point(7.5, 7.5));
-               new GUIWire(submodelModifiable, cpA1, notA1.getPin("B"), new Point(7.5, 17.5));
-               new GUIWire(submodelModifiable, cpA2, notA2.getPin("A"), new Point(7.5, 32.5));
-               new GUIWire(submodelModifiable, cpA2, notA2.getPin("B"), new Point(7.5, 42.5));
-               new GUIWire(submodelModifiable, cpA3, notA3.getPin("A"), new Point(7.5, 57.5));
-               new GUIWire(submodelModifiable, cpA3, notA3.getPin("B"), new Point(7.5, 67.5));
-               new GUIWire(submodelModifiable, cpA4, notA4.getPin("A"), new Point(7.5, 82.5));
-               new GUIWire(submodelModifiable, cpA4, notA4.getPin("B"), new Point(7.5, 92.5));
-               new GUIWire(submodelModifiable, cpB1, notB1.getPin("A"), new Point(7.5, 107.5));
-               new GUIWire(submodelModifiable, cpB1, notB1.getPin("B"), new Point(7.5, 117.5));
-               new GUIWire(submodelModifiable, cpB2, notB2.getPin("A"), new Point(7.5, 132.5));
-               new GUIWire(submodelModifiable, cpB2, notB2.getPin("B"), new Point(7.5, 142.5));
-               new GUIWire(submodelModifiable, cpB3, notB3.getPin("A"), new Point(7.5, 157.5));
-               new GUIWire(submodelModifiable, cpB3, notB3.getPin("B"), new Point(7.5, 167.5));
-               new GUIWire(submodelModifiable, cpB4, notB4.getPin("A"), new Point(7.5, 182.5));
-               new GUIWire(submodelModifiable, cpB4, notB4.getPin("B"), new Point(7.5, 192.5));
-               new GUIWire(submodelModifiable, notA1.getPin("Y"), nandY1.getPin("A"), new Point(40, 12.5), new Point(40, 7.5));
-               new GUIWire(submodelModifiable, notB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 112.5), new Point(45, 17.5));
-               new GUIWire(submodelModifiable, notA2.getPin("Y"), nandY2.getPin("A"), new Point(40, 37.5), new Point(40, 32.5));
-               new GUIWire(submodelModifiable, notB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 137.5), new Point(50, 42.5));
-               new GUIWire(submodelModifiable, notA3.getPin("Y"), nandY3.getPin("A"), new Point(40, 62.5), new Point(40, 57.5));
-               new GUIWire(submodelModifiable, notB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 162.5), new Point(55, 67.5));
-               new GUIWire(submodelModifiable, notA4.getPin("Y"), nandY4.getPin("A"), new Point(40, 87.5), new Point(40, 82.5));
-               new GUIWire(submodelModifiable, notB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
-               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIor_4.class.getCanonicalName(), (m, p) -> new GUIor_4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram2.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram2.java
deleted file mode 100644 (file)
index f0bbf49..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIram2 extends SimpleRectangularSubmodelComponent
-{
-       private GUIdlatch4 cell00;
-       private GUIdlatch4 cell01;
-       private GUIdlatch4 cell10;
-       private GUIdlatch4 cell11;
-
-       public GUIram2(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIram2");
-               setSubmodelScale(.1);
-               setInputPins("A0", "A1", "B0", "B1", "WE", "D1", "D2", "D3", "D4");
-               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               //@formatter:off
-               Pin  A0 = getSubmodelPin("A0");
-               Pin  A1 = getSubmodelPin("A1");
-               Pin  B0 = getSubmodelPin("B0");
-               Pin  B1 = getSubmodelPin("B1");
-               Pin  WE = getSubmodelPin("WE");
-               Pin  D1 = getSubmodelPin("D1");
-               Pin  D2 = getSubmodelPin("D2");
-               Pin  D3 = getSubmodelPin("D3");
-               Pin  D4 = getSubmodelPin("D4");
-               Pin QA1 = getSubmodelPin("QA1");
-               Pin QA2 = getSubmodelPin("QA2");
-               Pin QA3 = getSubmodelPin("QA3");
-               Pin QA4 = getSubmodelPin("QA4");
-               Pin QB1 = getSubmodelPin("QB1");
-               Pin QB2 = getSubmodelPin("QB2");
-               Pin QB3 = getSubmodelPin("QB3");
-               Pin QB4 = getSubmodelPin("QB4");
-
-               GUIdemux2   demuxA   = new GUIdemux2  (submodelModifiable);
-               GUIdemux2   demuxB   = new GUIdemux2  (submodelModifiable);
-               GUIand41    weAndB   = new GUIand41   (submodelModifiable);
-               cell00   = new GUIdlatch4 (submodelModifiable);
-               cell01   = new GUIdlatch4 (submodelModifiable);
-               cell10   = new GUIdlatch4 (submodelModifiable);
-               cell11   = new GUIdlatch4 (submodelModifiable);
-               GUIand41    andA00   = new GUIand41   (submodelModifiable);
-               GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
-               GUIand41    andB00   = new GUIand41   (submodelModifiable);
-               GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
-
-               WireCrossPoint cpB00  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB01  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB10  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB11  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD1in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD2in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD3in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD4in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD101 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD201 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD301 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD401 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD110 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD210 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD310 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD410 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ100 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ200 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ300 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ400 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ101 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ201 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ301 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ401 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ110 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ210 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ310 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ410 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ111 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ211 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ311 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ411 = new WireCrossPoint(submodelModifiable, 1);
-
-               demuxA  .moveTo( 55,  45);
-               demuxB  .moveTo( 55, 150);
-               weAndB  .moveTo(130, 150);
-               cell00  .moveTo( 55, 325);
-               cell01  .moveTo( 55, 475);
-               cell10  .moveTo( 55, 625);
-               cell11  .moveTo( 55, 775);
-               andA00  .moveTo(235, 375);
-               andorA01.moveTo(235, 485);
-               andorA10.moveTo(235, 635);
-               andorA11.moveTo(235, 785);
-               andB00  .moveTo(135, 325);
-               andorB01.moveTo(135, 435);
-               andorB10.moveTo(135, 585);
-               andorB11.moveTo(135, 735);
-               cpB00 .moveCenterTo(110, 155);
-               cpB01 .moveCenterTo(105, 165);
-               cpB10 .moveCenterTo(100, 175);
-               cpB11 .moveCenterTo( 95, 185);
-               cpD1in.moveCenterTo( 35, 550);
-               cpD2in.moveCenterTo( 40, 650);
-               cpD3in.moveCenterTo( 45, 750);
-               cpD4in.moveCenterTo( 50, 810);
-               cpD101.moveCenterTo( 35, 480);
-               cpD201.moveCenterTo( 40, 490);
-               cpD301.moveCenterTo( 45, 500);
-               cpD401.moveCenterTo( 50, 510);
-               cpD110.moveCenterTo( 35, 630);
-               cpD210.moveCenterTo( 40, 640);
-               cpD310.moveCenterTo( 45, 650);
-               cpD410.moveCenterTo( 50, 660);
-               cpQ100.moveCenterTo(130, 330);
-               cpQ200.moveCenterTo(125, 340);
-               cpQ300.moveCenterTo(120, 350);
-               cpQ400.moveCenterTo(115, 360);
-               cpQ101.moveCenterTo(130, 480);
-               cpQ201.moveCenterTo(125, 490);
-               cpQ301.moveCenterTo(120, 500);
-               cpQ401.moveCenterTo(115, 510);
-               cpQ110.moveCenterTo(130, 630);
-               cpQ210.moveCenterTo(125, 640);
-               cpQ310.moveCenterTo(120, 650);
-               cpQ410.moveCenterTo(115, 660);
-               cpQ111.moveCenterTo(130, 780);
-               cpQ211.moveCenterTo(125, 790);
-               cpQ311.moveCenterTo(120, 800);
-               cpQ411.moveCenterTo(115, 810);
-
-               new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
-               new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10,  60));
-               new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 250), new Point( 5, 155));
-               new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 350), new Point(10, 165));
-               new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
-               new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(5, 450), new Point(5, 300), new Point(125, 300), new Point(125, 195));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("C"), new Point(185, 155), new Point(185, 250), new Point(30, 250), new Point(30, 370));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("C"), new Point(180, 165), new Point(180, 245), new Point(25, 245), new Point(25, 520));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("C"), new Point(175, 175), new Point(175, 240), new Point(20, 240), new Point(20, 670));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("C"), new Point(170, 185), new Point(170, 235), new Point(15, 235), new Point(15, 820));
-               new GUIWire(submodelModifiable, D1, cpD1in                 , new Point[0]);
-               new GUIWire(submodelModifiable, D2, cpD2in                 , new Point[0]);
-               new GUIWire(submodelModifiable, D3, cpD3in                 , new Point[0]);
-               new GUIWire(submodelModifiable, D4, cpD4in                 , new Point(50, 850));
-               new GUIWire(submodelModifiable, cpD101, cell00.getPin("D1"), new Point(35, 330));
-               new GUIWire(submodelModifiable, cpD201, cell00.getPin("D2"), new Point(40, 340));
-               new GUIWire(submodelModifiable, cpD301, cell00.getPin("D3"), new Point(45, 350));
-               new GUIWire(submodelModifiable, cpD401, cell00.getPin("D4"), new Point(50, 360));
-               new GUIWire(submodelModifiable, cpD101, cell01.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD201, cell01.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD301, cell01.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD401, cell01.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD101, cpD1in             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD1in, cpD110             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD201, cpD210             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD301, cpD310             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD401, cpD410             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD110, cell10.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD210, cell10.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD310, cell10.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD410, cell10.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD210, cpD2in             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD310, cpD3in             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD410, cpD4in             , new Point[0]);
-               new GUIWire(submodelModifiable, cpD110, cell11.getPin("D1"), new Point(35, 780));
-               new GUIWire(submodelModifiable, cpD2in, cell11.getPin("D2"), new Point(40, 790));
-               new GUIWire(submodelModifiable, cpD3in, cell11.getPin("D3"), new Point(45, 800));
-               new GUIWire(submodelModifiable, cpD4in, cell11.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, cell00.getPin("Q1"), cpQ100, new Point[0]);
-               new GUIWire(submodelModifiable, cell00.getPin("Q2"), cpQ200, new Point[0]);
-               new GUIWire(submodelModifiable, cell00.getPin("Q3"), cpQ300, new Point[0]);
-               new GUIWire(submodelModifiable, cell00.getPin("Q4"), cpQ400, new Point[0]);
-               new GUIWire(submodelModifiable, cell01.getPin("Q1"), cpQ101, new Point[0]);
-               new GUIWire(submodelModifiable, cell01.getPin("Q2"), cpQ201, new Point[0]);
-               new GUIWire(submodelModifiable, cell01.getPin("Q3"), cpQ301, new Point[0]);
-               new GUIWire(submodelModifiable, cell01.getPin("Q4"), cpQ401, new Point[0]);
-               new GUIWire(submodelModifiable, cell10.getPin("Q1"), cpQ110, new Point[0]);
-               new GUIWire(submodelModifiable, cell10.getPin("Q2"), cpQ210, new Point[0]);
-               new GUIWire(submodelModifiable, cell10.getPin("Q3"), cpQ310, new Point[0]);
-               new GUIWire(submodelModifiable, cell10.getPin("Q4"), cpQ410, new Point[0]);
-               new GUIWire(submodelModifiable, cell11.getPin("Q1"), cpQ111, new Point[0]);
-               new GUIWire(submodelModifiable, cell11.getPin("Q2"), cpQ211, new Point[0]);
-               new GUIWire(submodelModifiable, cell11.getPin("Q3"), cpQ311, new Point[0]);
-               new GUIWire(submodelModifiable, cell11.getPin("Q4"), cpQ411, new Point[0]);
-               new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00  .getPin("B"), new Point(210, 50), new Point(210, 420));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(205, 60), new Point(205, 570));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(200, 70), new Point(200, 720));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(195, 80), new Point(195, 870));
-               new GUIWire(submodelModifiable, cpB00 , andB00  .getPin("B"), new Point(110, 370));
-               new GUIWire(submodelModifiable, cpB01 , andorB01.getPin("B"), new Point(105, 520));
-               new GUIWire(submodelModifiable, cpB10 , andorB10.getPin("B"), new Point(100, 670));
-               new GUIWire(submodelModifiable, cpB11 , andorB11.getPin("B"), new Point(95, 820));
-               new GUIWire(submodelModifiable, cpQ100, andA00  .getPin("A1"), new Point(130, 380));
-               new GUIWire(submodelModifiable, cpQ200, andA00  .getPin("A2"), new Point(125, 390));
-               new GUIWire(submodelModifiable, cpQ300, andA00  .getPin("A3"), new Point(120, 400));
-               new GUIWire(submodelModifiable, cpQ400, andA00  .getPin("A4"), new Point(115, 410));
-               new GUIWire(submodelModifiable, cpQ101, andorA01.getPin("A1"), new Point(130, 530));
-               new GUIWire(submodelModifiable, cpQ201, andorA01.getPin("A2"), new Point(125, 540));
-               new GUIWire(submodelModifiable, cpQ301, andorA01.getPin("A3"), new Point(120, 550));
-               new GUIWire(submodelModifiable, cpQ401, andorA01.getPin("A4"), new Point(115, 560));
-               new GUIWire(submodelModifiable, cpQ110, andorA10.getPin("A1"), new Point(130, 680));
-               new GUIWire(submodelModifiable, cpQ210, andorA10.getPin("A2"), new Point(125, 690));
-               new GUIWire(submodelModifiable, cpQ310, andorA10.getPin("A3"), new Point(120, 700));
-               new GUIWire(submodelModifiable, cpQ410, andorA10.getPin("A4"), new Point(115, 710));
-               new GUIWire(submodelModifiable, cpQ111, andorA11.getPin("A1"), new Point(130, 830));
-               new GUIWire(submodelModifiable, cpQ211, andorA11.getPin("A2"), new Point(125, 840));
-               new GUIWire(submodelModifiable, cpQ311, andorA11.getPin("A3"), new Point(120, 850));
-               new GUIWire(submodelModifiable, cpQ411, andorA11.getPin("A4"), new Point(115, 860));
-               new GUIWire(submodelModifiable, cpQ100, andB00  .getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ200, andB00  .getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ300, andB00  .getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ400, andB00  .getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ101, andorB01.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ201, andorB01.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ301, andorB01.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ401, andorB01.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ110, andorB10.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ210, andorB10.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ310, andorB10.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ410, andorB10.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ111, andorB11.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ211, andorB11.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ311, andorB11.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ411, andorB11.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, andA00  .getPin("Y1"), andorA01.getPin("C1"), new Point(290, 380), new Point(290, 445), new Point(230, 445), new Point(230, 490));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y2"), andorA01.getPin("C2"), new Point(285, 390), new Point(285, 440), new Point(225, 440), new Point(225, 500));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y3"), andorA01.getPin("C3"), new Point(280, 400), new Point(280, 435), new Point(220, 435), new Point(220, 510));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y4"), andorA01.getPin("C4"), new Point(275, 410), new Point(275, 430), new Point(215, 430), new Point(215, 520));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(290, 490), new Point(290, 595), new Point(230, 595), new Point(230, 640));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(285, 500), new Point(285, 590), new Point(225, 590), new Point(225, 650));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(280, 510), new Point(280, 585), new Point(220, 585), new Point(220, 660));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(275, 520), new Point(275, 580), new Point(215, 580), new Point(215, 670));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(290, 640), new Point(290, 745), new Point(230, 745), new Point(230, 790));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(285, 650), new Point(285, 740), new Point(225, 740), new Point(225, 800));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(280, 660), new Point(280, 735), new Point(220, 735), new Point(220, 810));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(275, 670), new Point(275, 730), new Point(215, 730), new Point(215, 820));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1                           , new Point(300, 790), new Point(300,  50));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2                           , new Point(305, 800), new Point(305, 150));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3                           , new Point(310, 810), new Point(310, 250));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4                           , new Point(315, 820), new Point(315, 350));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y1"), andorB01.getPin("C1"), new Point(190, 330), new Point(190, 430), new Point(130, 430), new Point(130, 440));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y2"), andorB01.getPin("C2"), new Point(185, 340), new Point(185, 425), new Point(125, 425), new Point(125, 450));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y3"), andorB01.getPin("C3"), new Point(180, 350), new Point(180, 420), new Point(120, 420), new Point(120, 460));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y4"), andorB01.getPin("C4"), new Point(175, 360), new Point(175, 415), new Point(115, 415), new Point(115, 470));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(190, 440), new Point(190, 580), new Point(130, 580), new Point(130, 590));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(185, 450), new Point(185, 575), new Point(125, 575), new Point(125, 600));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(180, 460), new Point(180, 570), new Point(120, 570), new Point(120, 610));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(175, 470), new Point(175, 565), new Point(115, 565), new Point(115, 620));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(190, 590), new Point(190, 730), new Point(130, 730), new Point(130, 740));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(185, 600), new Point(185, 725), new Point(125, 725), new Point(125, 750));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(180, 610), new Point(180, 720), new Point(120, 720), new Point(120, 760));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(175, 620), new Point(175, 715), new Point(115, 715), new Point(115, 770));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1                           , new Point(190, 740), new Point(190, 880), new Point(325, 880), new Point(325, 450));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2                           , new Point(185, 750), new Point(185, 885), new Point(330, 885), new Point(330, 550));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3                           , new Point(180, 760), new Point(180, 890), new Point(335, 890), new Point(335, 650));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4                           , new Point(175, 770), new Point(175, 895), new Point(340, 895), new Point(340, 750));
-               //@formatter:on
-
-               addHighLevelStateSubcomponentID("c00", cell00);
-               addHighLevelStateSubcomponentID("c01", cell01);
-               addHighLevelStateSubcomponentID("c10", cell10);
-               addHighLevelStateSubcomponentID("c11", cell11);
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       BitVector newStateCasted = (BitVector) newState;
-                       setHighLevelState("c00.q", newStateCasted.subVector(0, 4));
-                       setHighLevelState("c01.q", newStateCasted.subVector(4, 8));
-                       setHighLevelState("c10.q", newStateCasted.subVector(8, 12));
-                       setHighLevelState("c11.q", newStateCasted.subVector(12, 16));
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       BitVector q00 = (BitVector) getHighLevelState("c00.q");
-                       BitVector q01 = (BitVector) getHighLevelState("c01.q");
-                       BitVector q10 = (BitVector) getHighLevelState("c10.q");
-                       BitVector q11 = (BitVector) getHighLevelState("c11.q");
-                       return q00.concat(q01).concat(q10).concat(q11);
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIram2.class.getCanonicalName(), (m, p) -> new GUIram2(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram4.java
deleted file mode 100644 (file)
index 35d3df5..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIram4 extends SimpleRectangularSubmodelComponent
-{
-       public GUIram4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIram4");
-               setSubmodelScale(.1);
-               setInputPins("A0", "A1", "A2", "A3", "B0", "B1", "B2", "B3", "WE", "D1", "D2", "D3", "D4");
-               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               //@formatter:off
-               Pin  A0 = getSubmodelPin("A0");
-               Pin  A1 = getSubmodelPin("A1");
-               Pin  A2 = getSubmodelPin("A2");
-               Pin  A3 = getSubmodelPin("A3");
-               Pin  B0 = getSubmodelPin("B0");
-               Pin  B1 = getSubmodelPin("B1");
-               Pin  B2 = getSubmodelPin("B2");
-               Pin  B3 = getSubmodelPin("B3");
-               Pin  WE = getSubmodelPin("WE");
-               Pin  D1 = getSubmodelPin("D1");
-               Pin  D2 = getSubmodelPin("D2");
-               Pin  D3 = getSubmodelPin("D3");
-               Pin  D4 = getSubmodelPin("D4");
-               Pin QA1 =getSubmodelPin("QA1");
-               Pin QA2 =getSubmodelPin("QA2");
-               Pin QA3 =getSubmodelPin("QA3");
-               Pin QA4 =getSubmodelPin("QA4");
-               Pin QB1 =getSubmodelPin("QB1");
-               Pin QB2 =getSubmodelPin("QB2");
-               Pin QB3 =getSubmodelPin("QB3");
-               Pin QB4 =getSubmodelPin("QB4");
-
-               GUIdemux2   demuxA   = new GUIdemux2  (submodelModifiable);
-               GUIdemux2   demuxB   = new GUIdemux2  (submodelModifiable);
-               GUIand41    weAndB   = new GUIand41   (submodelModifiable);
-               GUIram2     cell00   = new GUIram2    (submodelModifiable);
-               GUIram2     cell01   = new GUIram2    (submodelModifiable);
-               GUIram2     cell10   = new GUIram2    (submodelModifiable);
-               GUIram2     cell11   = new GUIram2    (submodelModifiable);
-               GUIand41    andB00   = new GUIand41   (submodelModifiable);
-               GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
-               GUIand41    andA00   = new GUIand41   (submodelModifiable);
-               GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
-               GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
-
-               WireCrossPoint cpB00  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB01  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB10  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB11  = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_101 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_201 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_301 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_401 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_110 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_210 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_310 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_410 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_111 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_211 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_311 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpD_411 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB101 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB201 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB301 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB401 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB110 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB210 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB310 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB410 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB1in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB2in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB3in = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB4in = new WireCrossPoint(submodelModifiable, 1);
-
-               demuxA  .moveTo( 55,  45);
-               demuxB  .moveTo( 55, 150);
-               weAndB  .moveTo(235, 150);
-               cell00  .moveTo( 80, 330);
-               cell01  .moveTo( 80, 480);
-               cell10  .moveTo( 80, 630);
-               cell11  .moveTo( 80, 780);
-               andB00  .moveTo(250, 375);
-               andorB01.moveTo(250, 485);
-               andorB10.moveTo(250, 635);
-               andorB11.moveTo(250, 785);
-               andA00  .moveTo(155, 325);
-               andorA01.moveTo(155, 435);
-               andorA10.moveTo(155, 585);
-               andorA11.moveTo(155, 735);
-               cpB00 .moveCenterTo(230, 155);
-               cpB01 .moveCenterTo(225, 165);
-               cpB10 .moveCenterTo(220, 175);
-               cpB11 .moveCenterTo(215, 185);
-               cpD_101.moveCenterTo( 60, 535);
-               cpD_201.moveCenterTo( 65, 545);
-               cpD_301.moveCenterTo( 70, 555);
-               cpD_401.moveCenterTo( 75, 565);
-               cpD_110.moveCenterTo( 60, 685);
-               cpD_210.moveCenterTo( 65, 695);
-               cpD_310.moveCenterTo( 70, 705);
-               cpD_410.moveCenterTo( 75, 715);
-               cpD_111.moveCenterTo( 60, 835);
-               cpD_211.moveCenterTo( 65, 845);
-               cpD_311.moveCenterTo( 70, 855);
-               cpD_411.moveCenterTo( 75, 865);
-               cpAB101.moveCenterTo( 40, 485);
-               cpAB201.moveCenterTo( 45, 495);
-               cpAB301.moveCenterTo( 50, 505);
-               cpAB401.moveCenterTo( 55, 515);
-               cpAB110.moveCenterTo( 40, 635);
-               cpAB210.moveCenterTo( 45, 645);
-               cpAB310.moveCenterTo( 50, 655);
-               cpAB410.moveCenterTo( 55, 665);
-               cpAB1in.moveCenterTo( 40, 335);
-               cpAB2in.moveCenterTo( 45, 350);
-               cpAB3in.moveCenterTo( 50, 650);
-               cpAB4in.moveCenterTo( 55, 750);
-
-               new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
-               new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10,  60));
-               new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 450), new Point( 5, 155));
-               new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 550), new Point(10, 165));
-               new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
-               new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
-               new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(15, 850), new Point(15, 195));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("WE"), new Point(290, 155), new Point(290, 230), new Point(35, 230), new Point(35, 375));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("WE"), new Point(285, 165), new Point(285, 225), new Point(30, 225), new Point(30, 525));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("WE"), new Point(280, 175), new Point(280, 220), new Point(25, 220), new Point(25, 675));
-               new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("WE"), new Point(275, 185), new Point(275, 215), new Point(20, 215), new Point(20, 825));
-               new GUIWire(submodelModifiable, cpAB101, cpAB1in            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB1in, cell00.getPin("A0"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB201, cpAB2in            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB2in, cell00.getPin("A1"), new Point(45, 345));
-               new GUIWire(submodelModifiable, cpAB301, cell00.getPin("B0"), new Point(50, 355));
-               new GUIWire(submodelModifiable, cpAB401, cell00.getPin("B1"), new Point(55, 365));
-               new GUIWire(submodelModifiable, cpAB101, cell01.getPin("A0"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB201, cell01.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB301, cell01.getPin("B0"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB401, cell01.getPin("B1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB101, cpAB110            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB201, cpAB210            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB301, cpAB3in            , new Point[0]);
-               new GUIWire(submodelModifiable, B2     , cpAB3in            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB3in, cpAB310            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB401, cpAB410            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB110, cell10.getPin("A0"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB210, cell10.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB310, cell10.getPin("B0"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB410, cell10.getPin("B1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpAB110, cell11.getPin("A0"), new Point(40, 785));
-               new GUIWire(submodelModifiable, cpAB210, cell11.getPin("A1"), new Point(45, 795));
-               new GUIWire(submodelModifiable, cpAB310, cell11.getPin("B0"), new Point(50, 805));
-               new GUIWire(submodelModifiable, cpAB410, cpAB4in            , new Point[0]);
-               new GUIWire(submodelModifiable, cpAB4in, cell11.getPin("B1"), new Point(55, 815));
-               new GUIWire(submodelModifiable, A2, cpAB1in                 , new Point(40, 250));
-               new GUIWire(submodelModifiable, A3, cpAB2in                 , new Point[0]);
-               new GUIWire(submodelModifiable, B3, cpAB4in                 , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_101, cell00.getPin("D1"), new Point(60, 385));
-               new GUIWire(submodelModifiable, cpD_201, cell00.getPin("D2"), new Point(65, 395));
-               new GUIWire(submodelModifiable, cpD_301, cell00.getPin("D3"), new Point(70, 405));
-               new GUIWire(submodelModifiable, cpD_401, cell00.getPin("D4"), new Point(75, 415));
-               new GUIWire(submodelModifiable, cpD_101, cell01.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_201, cell01.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_301, cell01.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_401, cell01.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_101, cpD_110            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_201, cpD_210            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_301, cpD_310            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_401, cpD_410            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_110, cell10.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_210, cell10.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_310, cell10.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_410, cell10.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_110, cpD_111            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_210, cpD_211            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_310, cpD_311            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_410, cpD_411            , new Point[0]);
-               new GUIWire(submodelModifiable, cpD_111, cell11.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_211, cell11.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_311, cell11.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpD_411, cell11.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, D1, cpD_111                 , new Point(60,  950));
-               new GUIWire(submodelModifiable, D2, cpD_211                 , new Point(65, 1050));
-               new GUIWire(submodelModifiable, D3, cpD_311                 , new Point(70, 1150));
-               new GUIWire(submodelModifiable, D4, cpD_411                 , new Point(75, 1250));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00  .getPin("B"), new Point(135, 50), new Point(135, 370));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(130, 60), new Point(130, 520));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(125, 70), new Point(125, 670));
-               new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(120, 80), new Point(120, 820));
-               new GUIWire(submodelModifiable, cpB00, andB00  .getPin("B"), new Point(230, 420));
-               new GUIWire(submodelModifiable, cpB01, andorB01.getPin("B"), new Point(225, 570));
-               new GUIWire(submodelModifiable, cpB10, andorB10.getPin("B"), new Point(220, 720));
-               new GUIWire(submodelModifiable, cpB11, andorB11.getPin("B"), new Point(215, 870));
-               new GUIWire(submodelModifiable, cell00.getPin("QB1"), andB00  .getPin("A1"), new Point(140, 375), new Point(140, 380));
-               new GUIWire(submodelModifiable, cell00.getPin("QB2"), andB00  .getPin("A2"), new Point(140, 385), new Point(140, 390));
-               new GUIWire(submodelModifiable, cell00.getPin("QB3"), andB00  .getPin("A3"), new Point(140, 395), new Point(140, 400));
-               new GUIWire(submodelModifiable, cell00.getPin("QB4"), andB00  .getPin("A4"), new Point(140, 405), new Point(140, 410));
-               new GUIWire(submodelModifiable, cell01.getPin("QB1"), andorB01.getPin("A1"), new Point(140, 525), new Point(140, 530));
-               new GUIWire(submodelModifiable, cell01.getPin("QB2"), andorB01.getPin("A2"), new Point(140, 535), new Point(140, 540));
-               new GUIWire(submodelModifiable, cell01.getPin("QB3"), andorB01.getPin("A3"), new Point(140, 545), new Point(140, 550));
-               new GUIWire(submodelModifiable, cell01.getPin("QB4"), andorB01.getPin("A4"), new Point(140, 555), new Point(140, 560));
-               new GUIWire(submodelModifiable, cell10.getPin("QB1"), andorB10.getPin("A1"), new Point(140, 675), new Point(140, 680));
-               new GUIWire(submodelModifiable, cell10.getPin("QB2"), andorB10.getPin("A2"), new Point(140, 685), new Point(140, 690));
-               new GUIWire(submodelModifiable, cell10.getPin("QB3"), andorB10.getPin("A3"), new Point(140, 695), new Point(140, 700));
-               new GUIWire(submodelModifiable, cell10.getPin("QB4"), andorB10.getPin("A4"), new Point(140, 705), new Point(140, 710));
-               new GUIWire(submodelModifiable, cell11.getPin("QB1"), andorB11.getPin("A1"), new Point(140, 825), new Point(140, 830));
-               new GUIWire(submodelModifiable, cell11.getPin("QB2"), andorB11.getPin("A2"), new Point(140, 835), new Point(140, 840));
-               new GUIWire(submodelModifiable, cell11.getPin("QB3"), andorB11.getPin("A3"), new Point(140, 845), new Point(140, 850));
-               new GUIWire(submodelModifiable, cell11.getPin("QB4"), andorB11.getPin("A4"), new Point(140, 855), new Point(140, 860));
-               new GUIWire(submodelModifiable, cell00.getPin("QA1"), andA00  .getPin("A1"), new Point(140, 335), new Point(140, 330));
-               new GUIWire(submodelModifiable, cell00.getPin("QA2"), andA00  .getPin("A2"), new Point(140, 345), new Point(140, 340));
-               new GUIWire(submodelModifiable, cell00.getPin("QA3"), andA00  .getPin("A3"), new Point(140, 355), new Point(140, 350));
-               new GUIWire(submodelModifiable, cell00.getPin("QA4"), andA00  .getPin("A4"), new Point(140, 365), new Point(140, 360));
-               new GUIWire(submodelModifiable, cell01.getPin("QA1"), andorA01.getPin("A1"), new Point(140, 485), new Point(140, 480));
-               new GUIWire(submodelModifiable, cell01.getPin("QA2"), andorA01.getPin("A2"), new Point(140, 495), new Point(140, 490));
-               new GUIWire(submodelModifiable, cell01.getPin("QA3"), andorA01.getPin("A3"), new Point(140, 505), new Point(140, 500));
-               new GUIWire(submodelModifiable, cell01.getPin("QA4"), andorA01.getPin("A4"), new Point(140, 515), new Point(140, 510));
-               new GUIWire(submodelModifiable, cell10.getPin("QA1"), andorA10.getPin("A1"), new Point(140, 635), new Point(140, 630));
-               new GUIWire(submodelModifiable, cell10.getPin("QA2"), andorA10.getPin("A2"), new Point(140, 645), new Point(140, 640));
-               new GUIWire(submodelModifiable, cell10.getPin("QA3"), andorA10.getPin("A3"), new Point(140, 655), new Point(140, 650));
-               new GUIWire(submodelModifiable, cell10.getPin("QA4"), andorA10.getPin("A4"), new Point(140, 665), new Point(140, 660));
-               new GUIWire(submodelModifiable, cell11.getPin("QA1"), andorA11.getPin("A1"), new Point(140, 785), new Point(140, 780));
-               new GUIWire(submodelModifiable, cell11.getPin("QA2"), andorA11.getPin("A2"), new Point(140, 795), new Point(140, 790));
-               new GUIWire(submodelModifiable, cell11.getPin("QA3"), andorA11.getPin("A3"), new Point(140, 805), new Point(140, 800));
-               new GUIWire(submodelModifiable, cell11.getPin("QA4"), andorA11.getPin("A4"), new Point(140, 815), new Point(140, 810));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y1"), andorB01.getPin("C1"), new Point(305, 380), new Point(305, 445), new Point(245, 445), new Point(245, 490));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y2"), andorB01.getPin("C2"), new Point(300, 390), new Point(300, 440), new Point(240, 440), new Point(240, 500));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y3"), andorB01.getPin("C3"), new Point(295, 400), new Point(295, 435), new Point(235, 435), new Point(235, 510));
-               new GUIWire(submodelModifiable, andB00  .getPin("Y4"), andorB01.getPin("C4"), new Point(290, 410), new Point(290, 430), new Point(230, 430), new Point(230, 520));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(305, 490), new Point(305, 595), new Point(245, 595), new Point(245, 640));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(300, 500), new Point(300, 590), new Point(240, 590), new Point(240, 650));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(295, 510), new Point(295, 585), new Point(235, 585), new Point(235, 660));
-               new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(290, 520), new Point(290, 580), new Point(230, 580), new Point(230, 670));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(305, 640), new Point(305, 745), new Point(245, 745), new Point(245, 790));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(300, 650), new Point(300, 740), new Point(240, 740), new Point(240, 800));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(295, 660), new Point(295, 735), new Point(235, 735), new Point(235, 810));
-               new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(290, 670), new Point(290, 730), new Point(230, 730), new Point(230, 820));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1                           , new Point(330, 790), new Point(330, 450));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2                           , new Point(335, 800), new Point(335, 550));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3                           , new Point(340, 810), new Point(340, 650));
-               new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4                           , new Point(345, 820), new Point(345, 750));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y1"), andorA01.getPin("C1"), new Point(210, 330), new Point(210, 430), new Point(150, 430), new Point(150, 440));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y2"), andorA01.getPin("C2"), new Point(205, 340), new Point(205, 425), new Point(145, 425), new Point(145, 450));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y3"), andorA01.getPin("C3"), new Point(200, 350), new Point(200, 420), new Point(140, 420), new Point(140, 460));
-               new GUIWire(submodelModifiable, andA00  .getPin("Y4"), andorA01.getPin("C4"), new Point(195, 360), new Point(195, 415), new Point(135, 415), new Point(135, 470));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(210, 440), new Point(210, 580), new Point(150, 580), new Point(150, 590));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(205, 450), new Point(205, 575), new Point(145, 575), new Point(145, 600));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(200, 460), new Point(200, 570), new Point(140, 570), new Point(140, 610));
-               new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(195, 470), new Point(195, 565), new Point(135, 565), new Point(135, 620));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(210, 590), new Point(210, 730), new Point(150, 730), new Point(150, 740));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(205, 600), new Point(205, 725), new Point(145, 725), new Point(145, 750));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(200, 610), new Point(200, 720), new Point(140, 720), new Point(140, 760));
-               new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(195, 620), new Point(195, 715), new Point(135, 715), new Point(135, 770));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1                           , new Point(210, 740), new Point(210, 880), new Point(310, 880), new Point(310,  50));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2                           , new Point(205, 750), new Point(205, 885), new Point(315, 885), new Point(315, 150));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3                           , new Point(200, 760), new Point(200, 890), new Point(320, 890), new Point(320, 250));
-               new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4                           , new Point(195, 770), new Point(195, 895), new Point(325, 895), new Point(325, 350));
-               //@formatter:on
-
-               addHighLevelStateSubcomponentID("c00", cell00);
-               addHighLevelStateSubcomponentID("c01", cell01);
-               addHighLevelStateSubcomponentID("c10", cell10);
-               addHighLevelStateSubcomponentID("c11", cell11);
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       BitVector newStateCasted = (BitVector) newState;
-                       setHighLevelState("c00.q", newStateCasted.subVector(0, 16));
-                       setHighLevelState("c01.q", newStateCasted.subVector(16, 32));
-                       setHighLevelState("c10.q", newStateCasted.subVector(32, 48));
-                       setHighLevelState("c11.q", newStateCasted.subVector(48, 64));
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
-       {
-               if (checkSubcomponentID(subcomponentID))
-                       setHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID), newState);
-               else
-                       super.setSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID, newState);
-
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q":
-                       BitVector q00 = (BitVector) getHighLevelState("c00.q");
-                       BitVector q01 = (BitVector) getHighLevelState("c01.q");
-                       BitVector q10 = (BitVector) getHighLevelState("c10.q");
-                       BitVector q11 = (BitVector) getHighLevelState("c11.q");
-                       return q00.concat(q01).concat(q10).concat(q11);
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
-       {
-               if (checkSubcomponentID(subcomponentID))
-                       return getHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID));
-               return super.getSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID);
-       }
-
-       private static String translateDirectCellAccess(String subcomponentID, String subcomponentHighLevelStateID)
-       {
-               return 'c' + subcomponentID.substring(3, 5) + "." + subcomponentID.substring(0, 3) + '.' + subcomponentHighLevelStateID;
-       }
-
-       private static boolean checkSubcomponentID(String subcomponentID)
-       {
-               if (subcomponentID.length() != 5 || subcomponentID.charAt(0) != 'c')
-                       return false;
-               char addr3 = subcomponentID.charAt(1);
-               char addr2 = subcomponentID.charAt(2);
-               char addr1 = subcomponentID.charAt(3);
-               char addr0 = subcomponentID.charAt(4);
-               return (addr3 == '0' || addr3 == '1') || (addr2 == '0' || addr2 == '1') || (addr1 == '0' || addr1 == '1')
-                               || (addr0 == '0' || addr0 == '1');
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIram4.class.getCanonicalName(), (m, p) -> new GUIram4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel2_4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel2_4.java
deleted file mode 100644 (file)
index fadfd38..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIsel2_4 extends SimpleRectangularSubmodelComponent
-{
-       public GUIsel2_4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIsel2_4");
-               setSubmodelScale(.4);
-               setInputPins("SA", "SB", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin SA = getSubmodelPin("SA");
-               Pin SB = getSubmodelPin("SB");
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B1 = getSubmodelPin("B1");
-               Pin B2 = getSubmodelPin("B2");
-               Pin B3 = getSubmodelPin("B3");
-               Pin B4 = getSubmodelPin("B4");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandB1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandB2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandB3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandB4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
-
-               nandA1.moveTo(20, 2.5);
-               nandB1.moveTo(20, 27.5);
-               nandA2.moveTo(20, 52.5);
-               nandB2.moveTo(20, 77.5);
-               nandA3.moveTo(20, 102.5);
-               nandB3.moveTo(20, 127.5);
-               nandA4.moveTo(20, 152.5);
-               nandB4.moveTo(20, 177.5);
-               nandY1.moveTo(65, 2.5);
-               nandY2.moveTo(65, 27.5);
-               nandY3.moveTo(65, 52.5);
-               nandY4.moveTo(65, 77.5);
-               cpA1.moveCenterTo(7.5, 17.5);
-               cpB1.moveCenterTo(5, 42.5);
-               cpA2.moveCenterTo(7.5, 67.5);
-               cpB2.moveCenterTo(5, 92.5);
-               cpA3.moveCenterTo(7.5, 117.5);
-               cpB3.moveCenterTo(5, 142.5);
-
-               new GUIWire(submodelModifiable, A1, nandA1.getPin("A"), new Point(15, 62.5), new Point(15, 7.5));
-               new GUIWire(submodelModifiable, A2, nandA2.getPin("A"), new Point(17.5, 87.5), new Point(17.5, 57.5));
-               new GUIWire(submodelModifiable, A3, nandA3.getPin("A"), new Point(17.5, 112.5), new Point(17.5, 107.5));
-               new GUIWire(submodelModifiable, A4, nandA4.getPin("A"), new Point(17.5, 137.5), new Point(17.5, 157.5));
-               new GUIWire(submodelModifiable, B1, nandB1.getPin("A"), new Point(10, 162.5), new Point(10, 32.5));
-               new GUIWire(submodelModifiable, B2, nandB2.getPin("A"), new Point(12.5, 187.5), new Point(12.5, 82.5));
-               new GUIWire(submodelModifiable, B3, nandB3.getPin("A"), new Point(15, 212.5), new Point(15, 132.5));
-               new GUIWire(submodelModifiable, B4, nandB4.getPin("A"), new Point(10, 237.5), new Point(10, 182.5));
-               new GUIWire(submodelModifiable, SA, cpA1);
-               new GUIWire(submodelModifiable, SB, cpB1);
-               new GUIWire(submodelModifiable, cpA1, cpA2);
-               new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"));
-               new GUIWire(submodelModifiable, cpA2, cpA3);
-               new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"));
-               new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"));
-               new GUIWire(submodelModifiable, cpA3, nandA4.getPin("B"), new Point(7.5, 167.5));
-               new GUIWire(submodelModifiable, cpB1, cpB2);
-               new GUIWire(submodelModifiable, cpB1, nandB1.getPin("B"));
-               new GUIWire(submodelModifiable, cpB2, cpB3);
-               new GUIWire(submodelModifiable, cpB2, nandB2.getPin("B"));
-               new GUIWire(submodelModifiable, cpB3, nandB3.getPin("B"));
-               new GUIWire(submodelModifiable, cpB3, nandB4.getPin("B"), new Point(5, 192.5));
-               new GUIWire(submodelModifiable, nandA1.getPin("Y"), nandY1.getPin("A"), new Point(42.5, 12.5), new Point(42.5, 7.5));
-               new GUIWire(submodelModifiable, nandB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 37.5), new Point(45, 17.5));
-               new GUIWire(submodelModifiable, nandA2.getPin("Y"), nandY2.getPin("A"), new Point(47.5, 62.5), new Point(47.5, 32.5));
-               new GUIWire(submodelModifiable, nandB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 87.5), new Point(50, 42.5));
-               new GUIWire(submodelModifiable, nandA3.getPin("Y"), nandY3.getPin("A"), new Point(52.5, 112.5), new Point(52.5, 57.5));
-               new GUIWire(submodelModifiable, nandB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 137.5), new Point(55, 67.5));
-               new GUIWire(submodelModifiable, nandA4.getPin("Y"), nandY4.getPin("A"), new Point(57.5, 162.5), new Point(57.5, 82.5));
-               new GUIWire(submodelModifiable, nandB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
-               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIsel2_4.class.getCanonicalName(), (m, p) -> new GUIsel2_4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel3_4.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel3_4.java
deleted file mode 100644 (file)
index 83440ee..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIsel3_4 extends SimpleRectangularSubmodelComponent
-{
-       public GUIsel3_4(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIsel3_4");
-               setSubmodelScale(.2);
-               setInputPins("SA", "SB", "SC", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4");
-               setOutputPins("Y1", "Y2", "Y3", "Y4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin SA = getSubmodelPin("SA");
-               Pin SB = getSubmodelPin("SB");
-               Pin SC = getSubmodelPin("SC");
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B1 = getSubmodelPin("B1");
-               Pin B2 = getSubmodelPin("B2");
-               Pin B3 = getSubmodelPin("B3");
-               Pin B4 = getSubmodelPin("B4");
-               Pin C1 = getSubmodelPin("C1");
-               Pin C2 = getSubmodelPin("C2");
-               Pin C3 = getSubmodelPin("C3");
-               Pin C4 = getSubmodelPin("C4");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-
-               GUIsel2_4 sel2_4 = new GUIsel2_4(submodelModifiable);
-               GUInot4 not4 = new GUInot4(submodelModifiable);
-               GUINandGate nandC1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandC2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandC3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandC4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpSC1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSC2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSC3 = new WireCrossPoint(submodelModifiable, 1);
-
-               sel2_4.moveTo(35, 250);
-               not4.moveTo(75, 250);
-               nandC1.moveTo(50, 570);
-               nandC2.moveTo(50, 620);
-               nandC3.moveTo(50, 670);
-               nandC4.moveTo(50, 720);
-               nandY1.moveTo(152.5, 15);
-               nandY2.moveTo(152.5, 65);
-               nandY3.moveTo(152.5, 115);
-               nandY4.moveTo(152.5, 165);
-               cpSC1.moveCenterTo(30, 585);
-               cpSC2.moveCenterTo(30, 635);
-               cpSC3.moveCenterTo(30, 685);
-
-               new GUIWire(submodelModifiable, SA, sel2_4.getPin("SA"), new Point(25, 25), new Point(25, 255));
-               new GUIWire(submodelModifiable, SB, sel2_4.getPin("SB"), new Point(20, 75), new Point(20, 265));
-               new GUIWire(submodelModifiable, A1, sel2_4.getPin("A1"), new Point(15, 175), new Point(15, 275));
-               new GUIWire(submodelModifiable, A2, sel2_4.getPin("A2"), new Point(10, 225), new Point(10, 285));
-               new GUIWire(submodelModifiable, A3, sel2_4.getPin("A3"), new Point(5, 275), new Point(5, 295));
-               new GUIWire(submodelModifiable, A4, sel2_4.getPin("A4"), new Point(5, 325), new Point(5, 305));
-               new GUIWire(submodelModifiable, B1, sel2_4.getPin("B1"), new Point(10, 375), new Point(10, 315));
-               new GUIWire(submodelModifiable, B2, sel2_4.getPin("B2"), new Point(15, 425), new Point(15, 325));
-               new GUIWire(submodelModifiable, B3, sel2_4.getPin("B3"), new Point(20, 475), new Point(20, 335));
-               new GUIWire(submodelModifiable, B4, sel2_4.getPin("B4"), new Point(25, 525), new Point(25, 345));
-               new GUIWire(submodelModifiable, sel2_4.getPin("Y1"), not4.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, sel2_4.getPin("Y2"), not4.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, sel2_4.getPin("Y3"), not4.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, sel2_4.getPin("Y4"), not4.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, SC, cpSC1, new Point(30, 125));
-               new GUIWire(submodelModifiable, cpSC1, nandC1.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSC1, cpSC2, new Point(30, 125));
-               new GUIWire(submodelModifiable, cpSC2, nandC2.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSC2, cpSC3, new Point(30, 125));
-               new GUIWire(submodelModifiable, cpSC3, nandC3.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSC3, nandC4.getPin("B"), new Point(30, 735));
-               new GUIWire(submodelModifiable, C1, nandC1.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, C2, nandC2.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, C3, nandC3.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, C4, nandC4.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, not4.getPin("Y1"), nandY1.getPin("A"), new Point(115, 255), new Point(115, 20));
-               new GUIWire(submodelModifiable, not4.getPin("Y2"), nandY2.getPin("A"), new Point(120, 265), new Point(120, 70));
-               new GUIWire(submodelModifiable, not4.getPin("Y3"), nandY3.getPin("A"), new Point(125, 275), new Point(125, 120));
-               new GUIWire(submodelModifiable, not4.getPin("Y4"), nandY4.getPin("A"), new Point(130, 285), new Point(130, 170));
-               new GUIWire(submodelModifiable, nandC1.getPin("Y"), nandY1.getPin("B"), new Point(135, 580), new Point(135, 30));
-               new GUIWire(submodelModifiable, nandC2.getPin("Y"), nandY2.getPin("B"), new Point(140, 630), new Point(140, 80));
-               new GUIWire(submodelModifiable, nandC3.getPin("Y"), nandY3.getPin("B"), new Point(145, 680), new Point(145, 130));
-               new GUIWire(submodelModifiable, nandC4.getPin("Y"), nandY4.getPin("B"), new Point(150, 730), new Point(150, 180));
-               new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
-               new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
-               new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIsel3_4.class.getCanonicalName(), (m, p) -> new GUIsel3_4(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIxor.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIxor.java
deleted file mode 100644 (file)
index 537ed00..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIxor extends SimpleRectangularSubmodelComponent
-{
-       public GUIxor(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIxor");
-               setSubmodelScale(.4);
-               setInputPins("A", "B");
-               setOutputPins("Y");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin A = getSubmodelPin("A");
-               Pin B = getSubmodelPin("B");
-               Pin Y = getSubmodelPin("Y");
-
-               GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpAB = new WireCrossPoint(submodelModifiable, 1);
-
-               nandAB.moveTo(7.5, 15);
-               nandYA.moveTo(35, 2.5);
-               nandYB.moveTo(35, 27.5);
-               nandY.moveTo(62.5, 15);
-               cpA.moveCenterTo(5, 12.5);
-               cpB.moveCenterTo(5, 37.5);
-               cpAB.moveCenterTo(30, 25);
-
-               new GUIWire(submodelModifiable, A, cpA, new Point[0]);
-               new GUIWire(submodelModifiable, B, cpB, new Point[0]);
-               new GUIWire(submodelModifiable, cpA, nandAB.getPin("A"), new Point(5, 20));
-               new GUIWire(submodelModifiable, cpB, nandAB.getPin("B"), new Point(5, 30));
-               new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpAB);
-               new GUIWire(submodelModifiable, cpAB, nandYA.getPin("B"), new Point(30, 17.5));
-               new GUIWire(submodelModifiable, cpAB, nandYB.getPin("A"), new Point(30, 32.5));
-               new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
-               new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
-               new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"));
-               new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"));
-               new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIxor.class.getCanonicalName(), (m, p) -> new GUIxor(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901.java
deleted file mode 100644 (file)
index ec3cf86..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901 extends SimpleRectangularSubmodelComponent
-{
-
-       public GUIAm2901(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901");
-               setSubmodelScale(.1);
-               setInputPins("I8", "I7", "I6", "I5", "I4", "I3", "I2", "I1", "I0", "C", "Cn", "D1", "D2", "D3", "D4", "A0", "A1", "A2", "A3", "B0",
-                               "B1", "B2", "B3", "IRAMn", "IRAMn+3", "IQn", "IQn+3");
-               setOutputPins("Y1", "Y2", "Y3", "Y4", "F=0", "Cn+4", "OVR", "F3", "ORAMn", "ORAMn+3", "OQn", "OQn+3");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I8 = getSubmodelPin("I8");
-               Pin I7 = getSubmodelPin("I7");
-               Pin I6 = getSubmodelPin("I6");
-               Pin I5 = getSubmodelPin("I5");
-               Pin I4 = getSubmodelPin("I4");
-               Pin I3 = getSubmodelPin("I3");
-               Pin I2 = getSubmodelPin("I2");
-               Pin I1 = getSubmodelPin("I1");
-               Pin I0 = getSubmodelPin("I0");
-               Pin C = getSubmodelPin("C");
-               Pin Cn = getSubmodelPin("Cn");
-               Pin D1 = getSubmodelPin("D1");
-               Pin D2 = getSubmodelPin("D2");
-               Pin D3 = getSubmodelPin("D3");
-               Pin D4 = getSubmodelPin("D4");
-               Pin A0 = getSubmodelPin("A0");
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin B0 = getSubmodelPin("B0");
-               Pin B1 = getSubmodelPin("B1");
-               Pin B2 = getSubmodelPin("B2");
-               Pin B3 = getSubmodelPin("B3");
-               Pin IRAMn = getSubmodelPin("IRAMn");
-               Pin IRAMnplus3 = getSubmodelPin("IRAMn+3");
-               Pin IQn = getSubmodelPin("IQn");
-               Pin IQnplus3 = getSubmodelPin("IQn+3");
-               Pin Y1 = getSubmodelPin("Y1");
-               Pin Y2 = getSubmodelPin("Y2");
-               Pin Y3 = getSubmodelPin("Y3");
-               Pin Y4 = getSubmodelPin("Y4");
-               Pin Feq0 = getSubmodelPin("F=0");
-               Pin Cnplus4 = getSubmodelPin("Cn+4");
-               Pin OVR = getSubmodelPin("OVR");
-               Pin F3 = getSubmodelPin("F3");
-               Pin ORAMn = getSubmodelPin("ORAMn");
-               Pin ORAMnplus3 = getSubmodelPin("ORAMn+3");
-               Pin OQn = getSubmodelPin("OQn");
-               Pin OQnplus3 = getSubmodelPin("OQn+3");
-
-               GUIAm2901DestDecode destDecode = new GUIAm2901DestDecode(submodelModifiable);
-               GUImux1_4 Ymux = new GUImux1_4(submodelModifiable);
-               GUIand ramweAnd = new GUIand(submodelModifiable);
-               GUINandGate notC = new GUINandGate(submodelModifiable, 1);
-               GUIAm2901ALUInclSourceDecodeInclFunctionDecode alu = new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(submodelModifiable);
-               GUIor4 Fneq0 = new GUIor4(submodelModifiable);
-               GUINandGate notFneq0 = new GUINandGate(submodelModifiable, 1);
-               GUIram4 ram = new GUIram4(submodelModifiable);
-               GUIdlatch4 QAlatch = new GUIdlatch4(submodelModifiable);
-               GUIdlatch4 QBlatch = new GUIdlatch4(submodelModifiable);
-               GUIsel3_4 ramDsel = new GUIsel3_4(submodelModifiable);
-               GUIsel3_4 qregDsel = new GUIsel3_4(submodelModifiable);
-               GUIAm2901QReg qreg = new GUIAm2901QReg(submodelModifiable);
-
-               WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpC4 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpLSH = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNSH = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpRSH = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQA1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQA2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQA3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQA4 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ4 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpOQn = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpOQnplus3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ2Rsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpQ3Rsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpORAMn = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpORAMnplus3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF11 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF21 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF31 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF41 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF12 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF22 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF32 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF42 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF1Lsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF2Lsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF3Lsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF2Rsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF3Rsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF4Rsh = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF13 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF23 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF33 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpF43 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpFneq0 = new WireCrossPoint(submodelModifiable, 1);
-
-               destDecode.moveTo(15, 45);
-               Ymux.moveTo(275, 135);
-               ramweAnd.moveTo(190, 65);
-               notC.moveTo(160, 75);
-               alu.moveTo(240, 2110);
-               Fneq0.moveTo(275, 445);
-               notFneq0.moveTo(320, 440);
-               ram.moveTo(95, 2220);
-               QAlatch.moveTo(160, 2220);
-               QBlatch.moveTo(160, 2275);
-               ramDsel.moveTo(45, 2310);
-               qregDsel.moveTo(45, 2510);
-               qreg.moveTo(90, 2490);
-               cpC1.moveCenterTo(155, 950);
-               cpC2.moveCenterTo(155, 90);
-               cpC3.moveCenterTo(155, 2265);
-               cpC4.moveCenterTo(155, 2320);
-               cpLSH.moveCenterTo(40, 2315);
-               cpNSH.moveCenterTo(35, 2325);
-               cpRSH.moveCenterTo(30, 2335);
-               cpQA1.moveCenterTo(220, 2225);
-               cpQA2.moveCenterTo(225, 2235);
-               cpQA3.moveCenterTo(230, 2245);
-               cpQA4.moveCenterTo(235, 2255);
-               cpQ1.moveCenterTo(130, 2495);
-               cpQ2.moveCenterTo(135, 2505);
-               cpQ3.moveCenterTo(140, 2515);
-               cpQ4.moveCenterTo(145, 2525);
-               cpOQn.moveCenterTo(220, 2495);
-               cpOQnplus3.moveCenterTo(235, 2525);
-               cpQ2Rsh.moveCenterTo(35, 2625);
-               cpQ3Rsh.moveCenterTo(40, 2635);
-               cpORAMn.moveCenterTo(280, 2115);
-               cpORAMnplus3.moveCenterTo(295, 2145);
-               cpF3.moveCenterTo(330, 950);
-               cpF11.moveCenterTo(255, 2090);
-               cpF21.moveCenterTo(260, 2095);
-               cpF31.moveCenterTo(265, 2100);
-               cpF41.moveCenterTo(270, 2105);
-               cpF12.moveCenterTo(255, 450);
-               cpF22.moveCenterTo(260, 460);
-               cpF32.moveCenterTo(265, 470);
-               cpF42.moveCenterTo(270, 480);
-               cpF1Lsh.moveCenterTo(10, 2355);
-               cpF2Lsh.moveCenterTo(15, 2365);
-               cpF3Lsh.moveCenterTo(20, 2375);
-               cpF2Rsh.moveCenterTo(15, 2395);
-               cpF3Rsh.moveCenterTo(20, 2405);
-               cpF4Rsh.moveCenterTo(25, 2415);
-               cpF13.moveCenterTo(10, 2385);
-               cpF23.moveCenterTo(15, 2425);
-               cpF33.moveCenterTo(20, 2435);
-               cpF43.moveCenterTo(25, 2445);
-               cpFneq0.moveCenterTo(315, 450);
-
-               new GUIWire(submodelModifiable, I8, destDecode.getPin("I8"), new Point[0]);
-               new GUIWire(submodelModifiable, I7, destDecode.getPin("I7"), new Point(5, 150), new Point(5, 60));
-               new GUIWire(submodelModifiable, I6, destDecode.getPin("I6"), new Point(10, 250), new Point(10, 70));
-               new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point(130, 350), new Point(130, 2115));
-               new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(125, 450), new Point(125, 2125));
-               new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(120, 550), new Point(120, 2135));
-               new GUIWire(submodelModifiable, I2, alu.getPin("I2"), new Point(115, 650), new Point(115, 2145));
-               new GUIWire(submodelModifiable, I1, alu.getPin("I1"), new Point(110, 750), new Point(110, 2155));
-               new GUIWire(submodelModifiable, I0, alu.getPin("I0"), new Point(105, 850), new Point(105, 2165));
-               new GUIWire(submodelModifiable, C, cpC1, new Point[0]);
-               new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
-               new GUIWire(submodelModifiable, cpC2, notC.getPin("A"), new Point(155, 80));
-               new GUIWire(submodelModifiable, cpC2, notC.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpC1, cpC3, new Point[0]);
-               new GUIWire(submodelModifiable, cpC3, QAlatch.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, cpC3, cpC4, new Point[0]);
-               new GUIWire(submodelModifiable, cpC4, QBlatch.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, cpC4, qreg.getPin("C"), new Point(155, 2485), new Point(80, 2485), new Point(80, 2495));
-               new GUIWire(submodelModifiable, destDecode.getPin("LSH"), cpLSH, new Point(55, 90), new Point(55, 125), new Point(40, 125));
-               new GUIWire(submodelModifiable, destDecode.getPin("NSH"), cpNSH, new Point(60, 50), new Point(60, 120), new Point(35, 120));
-               new GUIWire(submodelModifiable, destDecode.getPin("RSH"), cpRSH, new Point(65, 60), new Point(65, 115), new Point(30, 115));
-               new GUIWire(submodelModifiable, cpLSH, ramDsel.getPin("SA"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNSH, ramDsel.getPin("SB"), new Point[0]);
-               new GUIWire(submodelModifiable, cpRSH, ramDsel.getPin("SC"), new Point[0]);
-               new GUIWire(submodelModifiable, cpLSH, qregDsel.getPin("SA"), new Point(40, 2515));
-               new GUIWire(submodelModifiable, cpNSH, qregDsel.getPin("SB"), new Point(35, 2525));
-               new GUIWire(submodelModifiable, cpRSH, qregDsel.getPin("SC"), new Point(30, 2535));
-               new GUIWire(submodelModifiable, A0, ram.getPin("A0"), new Point(80, 1550), new Point(80, 2225));
-               new GUIWire(submodelModifiable, A1, ram.getPin("A1"), new Point(75, 1650), new Point(75, 2235));
-               new GUIWire(submodelModifiable, A2, ram.getPin("A2"), new Point(70, 1750), new Point(70, 2245));
-               new GUIWire(submodelModifiable, A3, ram.getPin("A3"), new Point(65, 1850), new Point(65, 2255));
-               new GUIWire(submodelModifiable, B0, ram.getPin("B0"), new Point(60, 1950), new Point(60, 2265));
-               new GUIWire(submodelModifiable, B1, ram.getPin("B1"), new Point(55, 2050), new Point(55, 2275));
-               new GUIWire(submodelModifiable, B2, ram.getPin("B2"), new Point(50, 2150), new Point(50, 2285));
-               new GUIWire(submodelModifiable, B3, ram.getPin("B3"), new Point(45, 2250), new Point(45, 2295));
-               new GUIWire(submodelModifiable, ram.getPin("QA1"), QAlatch.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, ram.getPin("QA2"), QAlatch.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, ram.getPin("QA3"), QAlatch.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, ram.getPin("QA4"), QAlatch.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, ram.getPin("QB1"), QBlatch.getPin("D1"), new Point(150, 2265), new Point(150, 2280));
-               new GUIWire(submodelModifiable, ram.getPin("QB2"), QBlatch.getPin("D2"), new Point(145, 2275), new Point(145, 2290));
-               new GUIWire(submodelModifiable, ram.getPin("QB3"), QBlatch.getPin("D3"), new Point(140, 2285), new Point(140, 2300));
-               new GUIWire(submodelModifiable, ram.getPin("QB4"), QBlatch.getPin("D4"), new Point(135, 2295), new Point(135, 2310));
-               new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(100, 1050), new Point(100, 2175));
-               new GUIWire(submodelModifiable, D1, alu.getPin("D1"), new Point(180, 1150), new Point(180, 2185));
-               new GUIWire(submodelModifiable, D2, alu.getPin("D2"), new Point(175, 1250), new Point(175, 2195));
-               new GUIWire(submodelModifiable, D3, alu.getPin("D3"), new Point(170, 1350), new Point(170, 2205));
-               new GUIWire(submodelModifiable, D4, alu.getPin("D4"), new Point(165, 1450), new Point(165, 2215));
-               new GUIWire(submodelModifiable, QAlatch.getPin("Q1"), cpQA1, new Point[0]);
-               new GUIWire(submodelModifiable, QAlatch.getPin("Q2"), cpQA2, new Point[0]);
-               new GUIWire(submodelModifiable, QAlatch.getPin("Q3"), cpQA3, new Point[0]);
-               new GUIWire(submodelModifiable, QAlatch.getPin("Q4"), cpQA4, new Point[0]);
-               new GUIWire(submodelModifiable, cpQA1, Ymux.getPin("I0_1"), new Point(220, 150));
-               new GUIWire(submodelModifiable, cpQA2, Ymux.getPin("I0_2"), new Point(225, 160));
-               new GUIWire(submodelModifiable, cpQA3, Ymux.getPin("I0_3"), new Point(230, 170));
-               new GUIWire(submodelModifiable, cpQA4, Ymux.getPin("I0_4"), new Point(235, 180));
-               new GUIWire(submodelModifiable, cpQA1, alu.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQA2, alu.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQA3, alu.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQA4, alu.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, QBlatch.getPin("Q1"), alu.getPin("B1"), new Point(200, 2280), new Point(200, 2265));
-               new GUIWire(submodelModifiable, QBlatch.getPin("Q2"), alu.getPin("B2"), new Point(205, 2290), new Point(205, 2275));
-               new GUIWire(submodelModifiable, QBlatch.getPin("Q3"), alu.getPin("B3"), new Point(210, 2300), new Point(210, 2285));
-               new GUIWire(submodelModifiable, QBlatch.getPin("Q4"), alu.getPin("B4"), new Point(215, 2310), new Point(215, 2295));
-               new GUIWire(submodelModifiable, qreg.getPin("Q1"), cpQ1, new Point[0]);
-               new GUIWire(submodelModifiable, qreg.getPin("Q2"), cpQ2, new Point[0]);
-               new GUIWire(submodelModifiable, qreg.getPin("Q3"), cpQ3, new Point[0]);
-               new GUIWire(submodelModifiable, qreg.getPin("Q4"), cpQ4, new Point[0]);
-               new GUIWire(submodelModifiable, cpQ1, cpOQn, new Point[0]);
-               new GUIWire(submodelModifiable, cpOQn, OQn, new Point(335, 2495), new Point(335, 1050));
-               new GUIWire(submodelModifiable, cpQ4, cpOQnplus3, new Point[0]);
-               new GUIWire(submodelModifiable, cpOQnplus3, OQnplus3, new Point(340, 2525), new Point(340, 1150));
-               new GUIWire(submodelModifiable, cpQ2, cpQ2Rsh, new Point(135, 2670), new Point(30, 2670), new Point(30, 2635), new Point(35, 2635));
-               new GUIWire(submodelModifiable, cpQ3, cpQ3Rsh, new Point(140, 2675), new Point(35, 2675), new Point(35, 2640), new Point(40, 2640));
-               new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("C1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("C2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpQ4, qregDsel.getPin("C3"), new Point(145, 2680), new Point(40, 2680), new Point(40, 2645));
-               new GUIWire(submodelModifiable, IQnplus3, qregDsel.getPin("C4"), new Point(5, 2650), new Point(5, 2655));
-               new GUIWire(submodelModifiable, IQn, qregDsel.getPin("A1"), new Point(5, 2550), new Point(5, 2545));
-               new GUIWire(submodelModifiable, cpQ1, qregDsel.getPin("A2"), new Point(130, 2665), new Point(25, 2665), new Point(25, 2630),
-                               new Point(30, 2630), new Point(30, 2555));
-               new GUIWire(submodelModifiable, cpOQn, alu.getPin("Q1"), new Point(220, 2305));
-               new GUIWire(submodelModifiable, cpQ2, alu.getPin("Q2"), new Point(225, 2505), new Point(225, 2315));
-               new GUIWire(submodelModifiable, cpQ3, alu.getPin("Q3"), new Point(230, 2515), new Point(230, 2325));
-               new GUIWire(submodelModifiable, cpOQnplus3, alu.getPin("Q4"), new Point(235, 2335));
-               new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("A3"), new Point(35, 2565));
-               new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("A4"), new Point(40, 2575));
-               new GUIWire(submodelModifiable, qregDsel.getPin("Y1"), qreg.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, qregDsel.getPin("Y2"), qreg.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, qregDsel.getPin("Y3"), qreg.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, qregDsel.getPin("Y4"), qreg.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(315, 2155), new Point(315, 550));
-               new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(320, 2165), new Point(320, 650));
-               new GUIWire(submodelModifiable, alu.getPin("F1"), cpORAMn, new Point[0]);
-               new GUIWire(submodelModifiable, alu.getPin("F4"), cpORAMnplus3, new Point[0]);
-               new GUIWire(submodelModifiable, cpORAMn, ORAMn, new Point(325, 2115), new Point(325, 850));
-               new GUIWire(submodelModifiable, cpORAMnplus3, cpF3, new Point(330, 2145));
-               new GUIWire(submodelModifiable, cpF3, ORAMnplus3, new Point[0]);
-               new GUIWire(submodelModifiable, cpF3, F3, new Point(330, 750));
-               new GUIWire(submodelModifiable, cpORAMn, cpF11, new Point(280, 2090));
-               new GUIWire(submodelModifiable, alu.getPin("F2"), cpF21, new Point(285, 2125), new Point(285, 2095));
-               new GUIWire(submodelModifiable, alu.getPin("F3"), cpF31, new Point(290, 2135), new Point(290, 2100));
-               new GUIWire(submodelModifiable, cpORAMnplus3, cpF41, new Point(295, 2105));
-               new GUIWire(submodelModifiable, cpF11, cpF12, new Point[0]);
-               new GUIWire(submodelModifiable, cpF21, cpF22, new Point[0]);
-               new GUIWire(submodelModifiable, cpF31, cpF32, new Point[0]);
-               new GUIWire(submodelModifiable, cpF41, cpF42, new Point[0]);
-               new GUIWire(submodelModifiable, cpF12, Fneq0.getPin("A1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF22, Fneq0.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF32, Fneq0.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF42, Fneq0.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF12, Ymux.getPin("I1_1"), new Point(255, 190));
-               new GUIWire(submodelModifiable, cpF22, Ymux.getPin("I1_2"), new Point(260, 200));
-               new GUIWire(submodelModifiable, cpF32, Ymux.getPin("I1_3"), new Point(265, 210));
-               new GUIWire(submodelModifiable, cpF42, Ymux.getPin("I1_4"), new Point(270, 220));
-               new GUIWire(submodelModifiable, cpF11, cpF1Lsh, new Point(10, 2090));
-               new GUIWire(submodelModifiable, cpF21, cpF2Lsh, new Point(15, 2095));
-               new GUIWire(submodelModifiable, cpF31, cpF3Lsh, new Point(20, 2100));
-               new GUIWire(submodelModifiable, IRAMn, ramDsel.getPin("A1"), new Point(5, 2350), new Point(5, 2345));
-               new GUIWire(submodelModifiable, cpF1Lsh, ramDsel.getPin("A2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF2Lsh, ramDsel.getPin("A3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF3Lsh, ramDsel.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF2Lsh, cpF2Rsh, new Point[0]);
-               new GUIWire(submodelModifiable, cpF3Lsh, cpF3Rsh, new Point[0]);
-               new GUIWire(submodelModifiable, cpF41, cpF4Rsh, new Point(25, 2105));
-               new GUIWire(submodelModifiable, cpF1Lsh, cpF13, new Point[0]);
-               new GUIWire(submodelModifiable, cpF13, ramDsel.getPin("B1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF2Rsh, ramDsel.getPin("B2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF3Rsh, ramDsel.getPin("B3"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF4Rsh, ramDsel.getPin("B4"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF2Rsh, cpF23, new Point[0]);
-               new GUIWire(submodelModifiable, cpF3Rsh, cpF33, new Point[0]);
-               new GUIWire(submodelModifiable, cpF4Rsh, cpF43, new Point[0]);
-               new GUIWire(submodelModifiable, cpF23, ramDsel.getPin("C1"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF33, ramDsel.getPin("C2"), new Point[0]);
-               new GUIWire(submodelModifiable, cpF43, ramDsel.getPin("C3"), new Point[0]);
-               new GUIWire(submodelModifiable, IRAMnplus3, ramDsel.getPin("C4"), new Point(5, 2450), new Point(5, 2455));
-               new GUIWire(submodelModifiable, cpF13, qregDsel.getPin("B1"), new Point(10, 2585));
-               new GUIWire(submodelModifiable, cpF23, qregDsel.getPin("B2"), new Point(15, 2595));
-               new GUIWire(submodelModifiable, cpF33, qregDsel.getPin("B3"), new Point(20, 2605));
-               new GUIWire(submodelModifiable, cpF43, qregDsel.getPin("B4"), new Point(25, 2615));
-               new GUIWire(submodelModifiable, ramDsel.getPin("Y1"), ram.getPin("D1"), new Point[0]);
-               new GUIWire(submodelModifiable, ramDsel.getPin("Y2"), ram.getPin("D2"), new Point[0]);
-               new GUIWire(submodelModifiable, ramDsel.getPin("Y3"), ram.getPin("D3"), new Point[0]);
-               new GUIWire(submodelModifiable, ramDsel.getPin("Y4"), ram.getPin("D4"), new Point[0]);
-               new GUIWire(submodelModifiable, destDecode.getPin("RAMWE"), ramweAnd.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, notC.getPin("Y"), ramweAnd.getPin("B"));
-               new GUIWire(submodelModifiable, ramweAnd.getPin("Y"), ram.getPin("WE"), new Point(230, 70), new Point(230, 105), new Point(90, 105),
-                               new Point(90, 2305));
-               new GUIWire(submodelModifiable, destDecode.getPin("QWE"), qreg.getPin("WE"), new Point(85, 100), new Point(85, 2505));
-               new GUIWire(submodelModifiable, destDecode.getPin("YF"), Ymux.getPin("S0"), new Point(70, 80), new Point(70, 140));
-               new GUIWire(submodelModifiable, Ymux.getPin("Y1"), Y1, new Point(335, 140), new Point(335, 50));
-               new GUIWire(submodelModifiable, Ymux.getPin("Y2"), Y2, new Point[0]);
-               new GUIWire(submodelModifiable, Ymux.getPin("Y3"), Y3, new Point(335, 160), new Point(335, 250));
-               new GUIWire(submodelModifiable, Ymux.getPin("Y4"), Y4, new Point(325, 170), new Point(325, 350));
-               new GUIWire(submodelModifiable, Fneq0.getPin("Y"), cpFneq0, new Point[0]);
-               new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("A"), new Point(315, 445));
-               new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("B"), new Point(315, 455));
-               new GUIWire(submodelModifiable, notFneq0.getPin("Y"), Feq0, new Point[0]);
-
-               addHighLevelStateSubcomponentID("regs", ram);
-               addHighLevelStateSubcomponentID("qreg", qreg);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901.class.getCanonicalName(), (m, p) -> new GUIAm2901(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java
deleted file mode 100644 (file)
index f08898f..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInand3;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUFuncDecode extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901ALUFuncDecode(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901ALUFuncDecode");
-               setSubmodelScale(.25);
-               setInputPins("I5", "I4", "I3");
-               setOutputPins("CinE", "L", "SN", "SBE", "FN", "RN");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I5 = getSubmodelPin("I5");
-               Pin I4 = getSubmodelPin("I4");
-               Pin I3 = getSubmodelPin("I3");
-               Pin CinE = getSubmodelPin("CinE");
-               Pin L = getSubmodelPin("L");
-               Pin SN = getSubmodelPin("SN");
-               Pin SBE = getSubmodelPin("SBE");
-               Pin FN = getSubmodelPin("FN");
-               Pin RN = getSubmodelPin("RN");
-
-               GUINandGate notI5 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notI4 = new GUINandGate(submodelModifiable, 1);
-               GUInand3 nandI4I3NotI5 = new GUInand3(submodelModifiable);
-               GUINandGate nandI5NotI4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandI3I4 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandL = new GUINandGate(submodelModifiable, 1);
-               GUIand andSBE = new GUIand(submodelModifiable);
-
-               WireCrossPoint cpI51 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI52 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI53 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI41 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI42 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI43 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI44 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI31 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI32 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI51 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI52 = new WireCrossPoint(submodelModifiable, 1);
-
-               notI5.moveTo(15, 10);
-               notI4.moveTo(15, 50);
-               nandI4I3NotI5.moveTo(55, 10);
-               nandI5NotI4.moveTo(55, 45);
-               nandI3I4.moveTo(55, 70);
-               nandL.moveTo(100, 50);
-               andSBE.moveTo(100, 135);
-               cpI51.moveCenterTo(5, 20);
-               cpI52.moveCenterTo(5, 25);
-               cpI53.moveCenterTo(5, 45);
-               cpI41.moveCenterTo(10, 60);
-               cpI42.moveCenterTo(10, 55);
-               cpI43.moveCenterTo(10, 65);
-               cpI44.moveCenterTo(10, 85);
-               cpI31.moveCenterTo(50, 100);
-               cpI32.moveCenterTo(50, 75);
-               cpNotI51.moveCenterTo(40, 20);
-               cpNotI52.moveCenterTo(40, 35);
-
-               new GUIWire(submodelModifiable, I5, cpI51, new Point[0]);
-               new GUIWire(submodelModifiable, cpI51, notI5.getPin("A"), new Point(5, 15));
-               new GUIWire(submodelModifiable, cpI51, cpI52, new Point[0]);
-               new GUIWire(submodelModifiable, cpI52, notI5.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI52, cpI53, new Point[0]);
-               new GUIWire(submodelModifiable, cpI53, nandI5NotI4.getPin("A"), new Point(45, 45), new Point(45, 50));
-               new GUIWire(submodelModifiable, cpI53, FN, new Point(5, 180));
-               new GUIWire(submodelModifiable, I4, cpI41, new Point[0]);
-               new GUIWire(submodelModifiable, cpI41, cpI42, new Point[0]);
-               new GUIWire(submodelModifiable, cpI42, nandI4I3NotI5.getPin("A"), new Point(10, 40), new Point(45, 40), new Point(45, 15));
-               new GUIWire(submodelModifiable, cpI42, notI4.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI41, cpI43, new Point[0]);
-               new GUIWire(submodelModifiable, cpI43, notI4.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI43, cpI44, new Point[0]);
-               new GUIWire(submodelModifiable, cpI44, nandI3I4.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI44, SN, new Point(10, 105), new Point(135, 105), new Point(135, 100));
-               new GUIWire(submodelModifiable, I3, cpI31, new Point(50, 100));
-               new GUIWire(submodelModifiable, cpI31, RN, new Point(50, 220));
-               new GUIWire(submodelModifiable, cpI31, cpI32, new Point[0]);
-               new GUIWire(submodelModifiable, cpI32, nandI4I3NotI5.getPin("B"), new Point(50, 25));
-               new GUIWire(submodelModifiable, cpI32, nandI3I4.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, notI5.getPin("Y"), cpNotI51, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI51, CinE, new Point(40, 5), new Point(115, 5), new Point(115, 20));
-               new GUIWire(submodelModifiable, cpNotI51, cpNotI52, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI52, nandI4I3NotI5.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI52, andSBE.getPin("B"), new Point(40, 150));
-               new GUIWire(submodelModifiable, notI4.getPin("Y"), nandI5NotI4.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nandI4I3NotI5.getPin("Y"), nandL.getPin("A"));
-               new GUIWire(submodelModifiable, nandI5NotI4.getPin("Y"), nandL.getPin("B"));
-               new GUIWire(submodelModifiable, nandI3I4.getPin("Y"), andSBE.getPin("A"));
-               new GUIWire(submodelModifiable, nandL.getPin("Y"), L, new Point[0]);
-               new GUIWire(submodelModifiable, andSBE.getPin("Y"), SBE, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUFuncDecode.class.getCanonicalName(),
-                               (m, p) -> new GUIAm2901ALUFuncDecode(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java
deleted file mode 100644 (file)
index 79bbba6..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUInclDecode extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901ALUInclDecode(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901ALUInclDecode");
-               setSubmodelScale(.25);
-               setInputPins("I5", "I4", "I3", "Cn", "R1", "R2", "R3", "R4", "S1", "S2", "S3", "S4");
-               setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I5 = getSubmodelPin("I5");
-               Pin I4 = getSubmodelPin("I4");
-               Pin I3 = getSubmodelPin("I3");
-               Pin Cn = getSubmodelPin("Cn");
-               Pin R1 = getSubmodelPin("R1");
-               Pin R2 = getSubmodelPin("R2");
-               Pin R3 = getSubmodelPin("R3");
-               Pin R4 = getSubmodelPin("R4");
-               Pin S1 = getSubmodelPin("S1");
-               Pin S2 = getSubmodelPin("S2");
-               Pin S3 = getSubmodelPin("S3");
-               Pin S4 = getSubmodelPin("S4");
-               Pin F1 = getSubmodelPin("F1");
-               Pin F2 = getSubmodelPin("F2");
-               Pin F3 = getSubmodelPin("F3");
-               Pin F4 = getSubmodelPin("F4");
-               Pin Cnplus4 = getSubmodelPin("Cn+4");
-               Pin OVR = getSubmodelPin("OVR");
-
-               GUIAm2901ALUFuncDecode funcDecode = new GUIAm2901ALUFuncDecode(submodelModifiable);
-               GUIAm2901ALUOneBit alu1 = new GUIAm2901ALUOneBit(submodelModifiable);
-               GUIAm2901ALUOneBit alu2 = new GUIAm2901ALUOneBit(submodelModifiable);
-               GUIAm2901ALUOneBit alu3 = new GUIAm2901ALUOneBit(submodelModifiable);
-               GUIAm2901ALUOneBit alu4 = new GUIAm2901ALUOneBit(submodelModifiable);
-               GUIxor xorOVR = new GUIxor(submodelModifiable);
-
-               WireCrossPoint cpCoutE1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCoutE2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCoutE3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCinE1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCinE2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCinE3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpRN1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpRN2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpRN3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSN1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSN2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSN3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpFN1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpFN2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpFN3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpL1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpL2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpL3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCnplus3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpCnplus4 = new WireCrossPoint(submodelModifiable, 1);
-
-               funcDecode.moveTo(20, 2.5);
-               alu1.moveTo(45, 80);
-               alu2.moveTo(45, 180);
-               alu3.moveTo(45, 280);
-               alu4.moveTo(45, 380);
-               xorOVR.moveTo(95, 400);
-               cpCoutE1.moveCenterTo(25, 95);
-               cpCoutE2.moveCenterTo(25, 195);
-               cpCoutE3.moveCenterTo(25, 295);
-               cpCinE1.moveCenterTo(27.5, 105);
-               cpCinE2.moveCenterTo(27.5, 205);
-               cpCinE3.moveCenterTo(27.5, 305);
-               cpRN1.moveCenterTo(30, 125);
-               cpRN2.moveCenterTo(30, 225);
-               cpRN3.moveCenterTo(30, 325);
-               cpSN1.moveCenterTo(32.5, 145);
-               cpSN2.moveCenterTo(32.5, 245);
-               cpSN3.moveCenterTo(32.5, 345);
-               cpFN1.moveCenterTo(35, 155);
-               cpFN2.moveCenterTo(35, 255);
-               cpFN3.moveCenterTo(35, 355);
-               cpL1.moveCenterTo(37.5, 165);
-               cpL2.moveCenterTo(37.5, 265);
-               cpL3.moveCenterTo(37.5, 365);
-               cpCnplus3.moveCenterTo(85, 375);
-               cpCnplus4.moveCenterTo(85, 385);
-
-               new GUIWire(submodelModifiable, I5, funcDecode.getPin("I5"), new Point(5, 20), new Point(5, 7.5));
-               new GUIWire(submodelModifiable, I4, funcDecode.getPin("I4"), new Point(10, 60), new Point(10, 17.5));
-               new GUIWire(submodelModifiable, I3, funcDecode.getPin("I3"), new Point(15, 100), new Point(15, 27.5));
-               new GUIWire(submodelModifiable, funcDecode.getPin("SBE"), cpCoutE1, new Point(62.5, 37.5), new Point(62.5, 70), new Point(25, 70));
-               new GUIWire(submodelModifiable, cpCoutE1, cpCoutE2, new Point[0]);
-               new GUIWire(submodelModifiable, cpCoutE2, cpCoutE3, new Point[0]);
-               new GUIWire(submodelModifiable, cpCoutE1, alu1.getPin("CoutE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCoutE2, alu2.getPin("CoutE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCoutE3, alu3.getPin("CoutE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCoutE3, alu4.getPin("CoutE"), new Point(25, 395));
-               new GUIWire(submodelModifiable, funcDecode.getPin("CinE"), cpCinE1, new Point(70, 7.5), new Point(70, 77.5), new Point(27.5, 77.5));
-               new GUIWire(submodelModifiable, cpCinE1, cpCinE2, new Point[0]);
-               new GUIWire(submodelModifiable, cpCinE2, cpCinE3, new Point[0]);
-               new GUIWire(submodelModifiable, cpCinE1, alu1.getPin("CinE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCinE2, alu2.getPin("CinE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCinE3, alu3.getPin("CinE"), new Point[0]);
-               new GUIWire(submodelModifiable, cpCinE3, alu4.getPin("CinE"), new Point(27.5, 405));
-               new GUIWire(submodelModifiable, funcDecode.getPin("RN"), cpRN1, new Point(57.5, 57.5), new Point(57.5, 65), new Point(30, 65));
-               new GUIWire(submodelModifiable, cpRN1, cpRN2, new Point[0]);
-               new GUIWire(submodelModifiable, cpRN2, cpRN3, new Point[0]);
-               new GUIWire(submodelModifiable, cpRN1, alu1.getPin("RN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpRN2, alu2.getPin("RN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpRN3, alu3.getPin("RN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpRN3, alu4.getPin("RN"), new Point(30, 425));
-               new GUIWire(submodelModifiable, funcDecode.getPin("SN"), cpSN1, new Point(65, 27.5), new Point(65, 72.5), new Point(32.5, 72.5));
-               new GUIWire(submodelModifiable, cpSN1, cpSN2, new Point[0]);
-               new GUIWire(submodelModifiable, cpSN2, cpSN3, new Point[0]);
-               new GUIWire(submodelModifiable, cpSN1, alu1.getPin("SN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSN2, alu2.getPin("SN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSN3, alu3.getPin("SN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpSN3, alu4.getPin("SN"), new Point(32.5, 445));
-               new GUIWire(submodelModifiable, funcDecode.getPin("FN"), cpFN1, new Point(60, 47.5), new Point(60, 67.5), new Point(35, 67.5));
-               new GUIWire(submodelModifiable, cpFN1, cpFN2, new Point[0]);
-               new GUIWire(submodelModifiable, cpFN2, cpFN3, new Point[0]);
-               new GUIWire(submodelModifiable, cpFN1, alu1.getPin("FN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpFN2, alu2.getPin("FN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpFN3, alu3.getPin("FN"), new Point[0]);
-               new GUIWire(submodelModifiable, cpFN3, alu4.getPin("FN"), new Point(35, 455));
-               new GUIWire(submodelModifiable, funcDecode.getPin("L"), cpL1, new Point(67.5, 17.5), new Point(67.5, 75), new Point(37.5, 75));
-               new GUIWire(submodelModifiable, cpL1, cpL2, new Point[0]);
-               new GUIWire(submodelModifiable, cpL2, cpL3, new Point[0]);
-               new GUIWire(submodelModifiable, cpL1, alu1.getPin("L"), new Point[0]);
-               new GUIWire(submodelModifiable, cpL2, alu2.getPin("L"), new Point[0]);
-               new GUIWire(submodelModifiable, cpL3, alu3.getPin("L"), new Point[0]);
-               new GUIWire(submodelModifiable, cpL3, alu4.getPin("L"), new Point(37.5, 465));
-               new GUIWire(submodelModifiable, R1, alu1.getPin("R"), new Point(10, 180), new Point(10, 115));
-               new GUIWire(submodelModifiable, R2, alu2.getPin("R"), new Point(10, 220), new Point(10, 215));
-               new GUIWire(submodelModifiable, R3, alu3.getPin("R"), new Point(10, 260), new Point(10, 315));
-               new GUIWire(submodelModifiable, R4, alu4.getPin("R"), new Point(20, 300), new Point(20, 415));
-               new GUIWire(submodelModifiable, S1, alu1.getPin("S"), new Point(15, 340), new Point(15, 135));
-               new GUIWire(submodelModifiable, S2, alu2.getPin("S"), new Point(5, 380), new Point(5, 235));
-               new GUIWire(submodelModifiable, S3, alu3.getPin("S"), new Point(10, 420), new Point(10, 335));
-               new GUIWire(submodelModifiable, S4, alu4.getPin("S"), new Point(10, 460), new Point(10, 435));
-               new GUIWire(submodelModifiable, Cn, alu1.getPin("Cin"), new Point(5, 140), new Point(5, 85));
-               new GUIWire(submodelModifiable, alu1.getPin("Cout"), alu2.getPin("Cin"), new Point(85, 85), new Point(85, 175), new Point(40, 175),
-                               new Point(40, 185));
-               new GUIWire(submodelModifiable, alu2.getPin("Cout"), alu3.getPin("Cin"), new Point(85, 185), new Point(85, 275), new Point(40, 275),
-                               new Point(40, 285));
-               new GUIWire(submodelModifiable, alu3.getPin("Cout"), cpCnplus3, new Point(85, 285));
-               new GUIWire(submodelModifiable, cpCnplus3, alu4.getPin("Cin"), new Point(40, 375), new Point(40, 385));
-               new GUIWire(submodelModifiable, alu4.getPin("Cout"), cpCnplus4, new Point[0]);
-               new GUIWire(submodelModifiable, alu1.getPin("F"), F1, new Point(90, 95), new Point(90, 20));
-               new GUIWire(submodelModifiable, alu2.getPin("F"), F2, new Point(95, 195), new Point(95, 60));
-               new GUIWire(submodelModifiable, alu3.getPin("F"), F3, new Point(100, 295), new Point(100, 100));
-               new GUIWire(submodelModifiable, alu4.getPin("F"), F4, new Point(105, 395), new Point(105, 140));
-               new GUIWire(submodelModifiable, cpCnplus3, xorOVR.getPin("A"), new Point(90, 375), new Point(90, 405));
-               new GUIWire(submodelModifiable, cpCnplus4, xorOVR.getPin("B"), new Point(85, 415));
-               new GUIWire(submodelModifiable, cpCnplus4, Cnplus4, new Point(130, 385), new Point(130, 180));
-               new GUIWire(submodelModifiable, xorOVR.getPin("Y"), OVR);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUInclDecode.class.getCanonicalName(),
-                               (m, p) -> new GUIAm2901ALUInclDecode(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.java
deleted file mode 100644 (file)
index 784e200..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel2_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUInclSourceDecodeInclFunctionDecode extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901ALUInclSourceDecodeInclFunctionDecode");
-               setSubmodelScale(.25);
-               setInputPins("I5", "I4", "I3", "I2", "I1", "I0", "Cn", "D1", "D2", "D3", "D4", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "Q1",
-                               "Q2", "Q3", "Q4");
-               setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I5 = getSubmodelPin("I5");
-               Pin I4 = getSubmodelPin("I4");
-               Pin I3 = getSubmodelPin("I3");
-               Pin I2 = getSubmodelPin("I2");
-               Pin I1 = getSubmodelPin("I1");
-               Pin I0 = getSubmodelPin("I0");
-               Pin Cn = getSubmodelPin("Cn");
-               Pin D1 = getSubmodelPin("D1");
-               Pin D2 = getSubmodelPin("D2");
-               Pin D3 = getSubmodelPin("D3");
-               Pin D4 = getSubmodelPin("D4");
-               Pin A1 = getSubmodelPin("A1");
-               Pin A2 = getSubmodelPin("A2");
-               Pin A3 = getSubmodelPin("A3");
-               Pin A4 = getSubmodelPin("A4");
-               Pin B1 = getSubmodelPin("B1");
-               Pin B2 = getSubmodelPin("B2");
-               Pin B3 = getSubmodelPin("B3");
-               Pin B4 = getSubmodelPin("B4");
-               Pin Q1 = getSubmodelPin("Q1");
-               Pin Q2 = getSubmodelPin("Q2");
-               Pin Q3 = getSubmodelPin("Q3");
-               Pin Q4 = getSubmodelPin("Q4");
-               Pin F1 = getSubmodelPin("F1");
-               Pin F2 = getSubmodelPin("F2");
-               Pin F3 = getSubmodelPin("F3");
-               Pin F4 = getSubmodelPin("F4");
-               Pin Cnplus4 = getSubmodelPin("Cn+4");
-               Pin OVR = getSubmodelPin("OVR");
-
-               GUIAm2901SourceDecode sourceDecode = new GUIAm2901SourceDecode(submodelModifiable);
-               GUIsel2_4 selR = new GUIsel2_4(submodelModifiable);
-               GUIsel3_4 selS = new GUIsel3_4(submodelModifiable);
-               GUIAm2901ALUInclDecode alu = new GUIAm2901ALUInclDecode(submodelModifiable);
-
-               WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
-
-               sourceDecode.moveTo(15, 165);
-               selR.moveTo(45, 365);
-               selS.moveTo(45, 575);
-               alu.moveTo(60, 15);
-               cpA1.moveCenterTo(10, 460);
-               cpA2.moveCenterTo(15, 500);
-               cpA3.moveCenterTo(20, 540);
-               cpA4.moveCenterTo(25, 580);
-
-               new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point[0]);
-               new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(5, 60), new Point(5, 30));
-               new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(15, 100), new Point(15, 40));
-               new GUIWire(submodelModifiable, I2, sourceDecode.getPin("I2"), new Point(5, 140), new Point(5, 170));
-               new GUIWire(submodelModifiable, I1, sourceDecode.getPin("I1"), new Point[0]);
-               new GUIWire(submodelModifiable, I0, sourceDecode.getPin("I0"), new Point(5, 220), new Point(5, 190));
-               new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(10, 260), new Point(10, 50));
-               new GUIWire(submodelModifiable, D1, selR.getPin("A1"), new Point(15, 300), new Point(15, 390));
-               new GUIWire(submodelModifiable, D2, selR.getPin("A2"), new Point(10, 340), new Point(10, 400));
-               new GUIWire(submodelModifiable, D3, selR.getPin("A3"), new Point(5, 380), new Point(5, 410));
-               new GUIWire(submodelModifiable, D4, selR.getPin("A4"), new Point[0]);
-               new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
-               new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
-               new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
-               new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
-               new GUIWire(submodelModifiable, cpA1, selR.getPin("B1"), new Point(10, 430));
-               new GUIWire(submodelModifiable, cpA2, selR.getPin("B2"), new Point(15, 440));
-               new GUIWire(submodelModifiable, cpA3, selR.getPin("B3"), new Point(20, 450));
-               new GUIWire(submodelModifiable, cpA4, selR.getPin("B4"), new Point(25, 460));
-               new GUIWire(submodelModifiable, cpA1, selS.getPin("A1"), new Point(10, 610));
-               new GUIWire(submodelModifiable, cpA2, selS.getPin("A2"), new Point(15, 620));
-               new GUIWire(submodelModifiable, cpA3, selS.getPin("A3"), new Point(20, 630));
-               new GUIWire(submodelModifiable, cpA4, selS.getPin("A4"), new Point(25, 640));
-               new GUIWire(submodelModifiable, B1, selS.getPin("B1"), new Point(5, 620), new Point(5, 650));
-               new GUIWire(submodelModifiable, B2, selS.getPin("B2"), new Point[0]);
-               new GUIWire(submodelModifiable, B3, selS.getPin("B3"), new Point(5, 700), new Point(5, 670));
-               new GUIWire(submodelModifiable, B4, selS.getPin("B4"), new Point(10, 740), new Point(10, 680));
-               new GUIWire(submodelModifiable, Q1, selS.getPin("C1"), new Point(15, 780), new Point(15, 690));
-               new GUIWire(submodelModifiable, Q2, selS.getPin("C2"), new Point(20, 820), new Point(20, 700));
-               new GUIWire(submodelModifiable, Q3, selS.getPin("C3"), new Point(25, 860), new Point(25, 710));
-               new GUIWire(submodelModifiable, Q4, selS.getPin("C4"), new Point(30, 900), new Point(30, 720));
-               new GUIWire(submodelModifiable, sourceDecode.getPin("SQ"), selS.getPin("SC"), new Point(75, 170), new Point(75, 240),
-                               new Point(30, 240), new Point(30, 600));
-               new GUIWire(submodelModifiable, sourceDecode.getPin("RA"), selR.getPin("SB"), new Point(70, 180), new Point(70, 235),
-                               new Point(20, 235), new Point(20, 380));
-               new GUIWire(submodelModifiable, sourceDecode.getPin("SB"), selS.getPin("SB"), new Point(65, 190), new Point(65, 230),
-                               new Point(35, 230), new Point(35, 590));
-               new GUIWire(submodelModifiable, sourceDecode.getPin("SA"), selS.getPin("SA"), new Point(60, 200), new Point(60, 225),
-                               new Point(40, 225), new Point(40, 580));
-               new GUIWire(submodelModifiable, sourceDecode.getPin("RD"), selR.getPin("SA"), new Point(55, 210), new Point(55, 220),
-                               new Point(25, 220), new Point(25, 370));
-               new GUIWire(submodelModifiable, selR.getPin("Y1"), alu.getPin("R1"), new Point(82.5, 370), new Point(82.5, 162.5),
-                               new Point(20, 162.5), new Point(20, 60));
-               new GUIWire(submodelModifiable, selR.getPin("Y2"), alu.getPin("R2"), new Point(85, 380), new Point(85, 160), new Point(22.5, 160),
-                               new Point(22.5, 70));
-               new GUIWire(submodelModifiable, selR.getPin("Y3"), alu.getPin("R3"), new Point(87.5, 390), new Point(87.5, 157.5),
-                               new Point(25, 157.5), new Point(25, 80));
-               new GUIWire(submodelModifiable, selR.getPin("Y4"), alu.getPin("R4"), new Point(90, 400), new Point(90, 155), new Point(27.5, 155),
-                               new Point(27.5, 90));
-               new GUIWire(submodelModifiable, selS.getPin("Y1"), alu.getPin("S1"), new Point(92.5, 580), new Point(92.5, 152.5),
-                               new Point(30, 152.5), new Point(30, 100));
-               new GUIWire(submodelModifiable, selS.getPin("Y2"), alu.getPin("S2"), new Point(95, 590), new Point(95, 150), new Point(32.5, 150),
-                               new Point(32.5, 110));
-               new GUIWire(submodelModifiable, selS.getPin("Y3"), alu.getPin("S3"), new Point(97.5, 600), new Point(97.5, 147.5),
-                               new Point(35, 147.5), new Point(35, 120));
-               new GUIWire(submodelModifiable, selS.getPin("Y4"), alu.getPin("S4"), new Point(100, 610), new Point(100, 145), new Point(37.5, 145),
-                               new Point(37.5, 130));
-               new GUIWire(submodelModifiable, alu.getPin("F1"), F1, new Point[0]);
-               new GUIWire(submodelModifiable, alu.getPin("F2"), F2, new Point(135, 30), new Point(135, 60));
-               new GUIWire(submodelModifiable, alu.getPin("F3"), F3, new Point(130, 40), new Point(130, 100));
-               new GUIWire(submodelModifiable, alu.getPin("F4"), F4, new Point(125, 50), new Point(125, 140));
-               new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(120, 60), new Point(120, 180));
-               new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(115, 70), new Point(115, 220));
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUInclSourceDecodeInclFunctionDecode.class.getCanonicalName(),
-                               (m, p) -> new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java
deleted file mode 100644 (file)
index c35f7cf..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUOneBit extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901ALUOneBit(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901ALUOneBit");
-               setSubmodelScale(.2);
-               setInputPins("Cin", "CoutE", "CinE", "R", "RN", "S", "SN", "FN", "L");
-               setOutputPins("Cout", "F");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin Cin = getSubmodelPin("Cin");
-               Pin CoutE = getSubmodelPin("CoutE");
-               Pin CinE = getSubmodelPin("CinE");
-               Pin R = getSubmodelPin("R");
-               Pin RN = getSubmodelPin("RN");
-               Pin S = getSubmodelPin("S");
-               Pin SN = getSubmodelPin("SN");
-               Pin FN = getSubmodelPin("FN");
-               Pin L = getSubmodelPin("L");
-               Pin Cout = getSubmodelPin("Cout");
-               Pin F = getSubmodelPin("F");
-
-               GUIand Cinand = new GUIand(submodelModifiable);
-               GUIxor Rxor = new GUIxor(submodelModifiable);
-               GUIxor Sxor = new GUIxor(submodelModifiable);
-               GUIfulladder add = new GUIfulladder(submodelModifiable);
-               GUINandGate nand = new GUINandGate(submodelModifiable, 1);
-               GUIand Coutand = new GUIand(submodelModifiable);
-               GUImux1 Fsel = new GUImux1(submodelModifiable);
-               GUIxor Fxor = new GUIxor(submodelModifiable);
-
-               WireCrossPoint cpRXored = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpSXored = new WireCrossPoint(submodelModifiable, 1);
-
-               Cinand.moveTo(10, 20);
-               Rxor.moveTo(10, 190);
-               Sxor.moveTo(10, 290);
-               add.moveTo(60, 20);
-               nand.moveTo(60, 55);
-               Coutand.moveTo(135, 20);
-               Fsel.moveTo(90, 70);
-               Fxor.moveTo(135, 70);
-               cpRXored.moveCenterTo(50, 60);
-               cpSXored.moveCenterTo(55, 70);
-
-               new GUIWire(submodelModifiable, Cin, Cinand.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, CoutE, Coutand.getPin("A"), new Point(5, 75), new Point(5, 10), new Point(130, 10),
-                               new Point(130, 25));
-               new GUIWire(submodelModifiable, CinE, Cinand.getPin("B"), new Point(7.5, 125), new Point(7.5, 35));
-               new GUIWire(submodelModifiable, R, Rxor.getPin("A"));
-               new GUIWire(submodelModifiable, RN, Rxor.getPin("B"));
-               new GUIWire(submodelModifiable, S, Sxor.getPin("A"));
-               new GUIWire(submodelModifiable, SN, Sxor.getPin("B"));
-               new GUIWire(submodelModifiable, FN, Fxor.getPin("B"), new Point(130, 375), new Point(130, 85));
-               new GUIWire(submodelModifiable, L, Fsel.getPin("S0"), new Point(87.5, 425), new Point(87.5, 75));
-               new GUIWire(submodelModifiable, Cinand.getPin("Y"), add.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, Rxor.getPin("Y"), cpRXored, new Point(50, 195));
-               new GUIWire(submodelModifiable, cpRXored, add.getPin("B"), new Point(50, 35));
-               new GUIWire(submodelModifiable, cpRXored, nand.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, Sxor.getPin("Y"), cpSXored, new Point(55, 295));
-               new GUIWire(submodelModifiable, cpSXored, add.getPin("C"), new Point(55, 45));
-               new GUIWire(submodelModifiable, cpSXored, nand.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, add.getPin("Y"), Fsel.getPin("I0"), new Point(100, 25), new Point(100, 65), new Point(85, 65),
-                               new Point(85, 85));
-               new GUIWire(submodelModifiable, add.getPin("Z"), Coutand.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nand.getPin("Y"), Fsel.getPin("I1"), new Point(82.5, 65), new Point(82.5, 95));
-               new GUIWire(submodelModifiable, Fsel.getPin("Y"), Fxor.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, Coutand.getPin("Y"), Cout, new Point[0]);
-               new GUIWire(submodelModifiable, Fxor.getPin("Y"), F, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUOneBit.class.getCanonicalName(), (m, p) -> new GUIAm2901ALUOneBit(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java
deleted file mode 100644 (file)
index defe85b..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901DestDecode extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901DestDecode(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901DestDecode");
-               setSubmodelScale(.25);
-               setInputPins("I8", "I7", "I6");
-               setOutputPins("NSH", "RSH", "RAMWE", "YF", "LSH", "QWE");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I8 = getSubmodelPin("I8");
-               Pin I7 = getSubmodelPin("I7");
-               Pin I6 = getSubmodelPin("I6");
-               Pin NSH = getSubmodelPin("NSH");
-               Pin RSH = getSubmodelPin("RSH");
-               Pin RAMWE = getSubmodelPin("RAMWE");
-               Pin YF = getSubmodelPin("YF");
-               Pin LSH = getSubmodelPin("LSH");
-               Pin QWE = getSubmodelPin("QWE");
-
-               GUINandGate notI8 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notI7 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandI8I7 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notI6 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandRSH = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandRAMWE = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandI7NotI8 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandLSH = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notRSH = new GUINandGate(submodelModifiable, 1);
-               GUINandGate andI7NotI8 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandQWE = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nandYF = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notQWE = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpI81 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI82 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI83 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI71 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI72 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI73 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI6 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI7 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI81 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI82 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNandI8I7 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotRSH = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNandI7NotI81 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNandI7NotI82 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI6 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNandQWE = new WireCrossPoint(submodelModifiable, 1);
-
-               notI8.moveTo(15, 10);
-               notI7.moveTo(15, 50);
-               nandI8I7.moveTo(15, 90);
-               notI6.moveTo(15, 150);
-               nandRSH.moveTo(50, 10);
-               nandRAMWE.moveTo(50, 50);
-               nandI7NotI8.moveTo(50, 90);
-               nandLSH.moveTo(50, 130);
-               notRSH.moveTo(80, 10);
-               andI7NotI8.moveTo(80, 90);
-               nandQWE.moveTo(80, 145);
-               nandYF.moveTo(110, 105);
-               notQWE.moveTo(115, 210);
-               cpI81.moveCenterTo(5, 20);
-               cpI82.moveCenterTo(5, 15);
-               cpI83.moveCenterTo(5, 25);
-               cpI71.moveCenterTo(10, 60);
-               cpI72.moveCenterTo(10, 65);
-               cpI73.moveCenterTo(10, 105);
-               cpI6.moveCenterTo(5, 155);
-               cpNotI7.moveCenterTo(40, 60);
-               cpNotI81.moveCenterTo(45, 20);
-               cpNotI82.moveCenterTo(45, 55);
-               cpNandI8I7.moveCenterTo(40, 135);
-               cpNotRSH.moveCenterTo(75, 20);
-               cpNandI7NotI81.moveCenterTo(75, 100);
-               cpNandI7NotI82.moveCenterTo(75, 105);
-               cpNotI6.moveCenterTo(75, 160);
-               cpNandQWE.moveCenterTo(110, 215);
-
-               new GUIWire(submodelModifiable, I8, cpI81, new Point[0]);
-               new GUIWire(submodelModifiable, cpI81, cpI82, new Point[0]);
-               new GUIWire(submodelModifiable, cpI81, cpI83, new Point[0]);
-               new GUIWire(submodelModifiable, cpI82, notI8.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI83, notI8.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, I7, cpI71, new Point[0]);
-               new GUIWire(submodelModifiable, cpI71, notI7.getPin("A"), new Point(10, 55));
-               new GUIWire(submodelModifiable, cpI71, cpI72, new Point[0]);
-               new GUIWire(submodelModifiable, cpI72, notI7.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI72, cpI73, new Point[0]);
-               new GUIWire(submodelModifiable, cpI73, nandI8I7.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI83, nandI8I7.getPin("A"), new Point(5, 95));
-               new GUIWire(submodelModifiable, I6, cpI6, new Point(5, 100));
-               new GUIWire(submodelModifiable, cpI6, notI6.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI6, notI6.getPin("B"), new Point(5, 165));
-               new GUIWire(submodelModifiable, cpI82, nandRSH.getPin("A"), new Point(5, 5), new Point(40, 5), new Point(40, 15));
-               new GUIWire(submodelModifiable, notI7.getPin("Y"), cpNotI7, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI7, nandRSH.getPin("B"), new Point(40, 25));
-               new GUIWire(submodelModifiable, cpNotI7, nandRAMWE.getPin("B"), new Point(40, 65));
-               new GUIWire(submodelModifiable, notI8.getPin("Y"), cpNotI81, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI81, NSH, new Point(45, 5), new Point(135, 5), new Point(135, 20));
-               new GUIWire(submodelModifiable, cpNotI81, cpNotI82, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI82, nandRAMWE.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI82, nandI7NotI8.getPin("A"), new Point(45, 95));
-               new GUIWire(submodelModifiable, cpI73, nandI7NotI8.getPin("B"), new Point(10, 115), new Point(45, 115), new Point(45, 105));
-               new GUIWire(submodelModifiable, nandI8I7.getPin("Y"), cpNandI8I7, new Point(40, 100));
-               new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("B"), new Point(40, 145));
-               new GUIWire(submodelModifiable, nandRSH.getPin("Y"), cpNotRSH, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("A"), new Point(75, 15));
-               new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("B"), new Point(75, 25));
-               new GUIWire(submodelModifiable, nandRAMWE.getPin("Y"), RAMWE, new Point(125, 60), new Point(125, 100));
-               new GUIWire(submodelModifiable, nandI7NotI8.getPin("Y"), cpNandI7NotI81, new Point[0]);
-               new GUIWire(submodelModifiable, cpNandI7NotI81, andI7NotI8.getPin("A"), new Point(75, 95));
-               new GUIWire(submodelModifiable, cpNandI7NotI81, cpNandI7NotI82, new Point[0]);
-               new GUIWire(submodelModifiable, cpNandI7NotI82, andI7NotI8.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, nandLSH.getPin("Y"), LSH, new Point(125, 140), new Point(125, 180));
-               new GUIWire(submodelModifiable, cpNandI7NotI82, nandQWE.getPin("A"), new Point(75, 150));
-               new GUIWire(submodelModifiable, notI6.getPin("Y"), cpNotI6, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI6, nandQWE.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, notRSH.getPin("Y"), RSH, new Point(130, 20), new Point(130, 60));
-               new GUIWire(submodelModifiable, andI7NotI8.getPin("Y"), nandYF.getPin("A"));
-               new GUIWire(submodelModifiable, cpNotI6, nandYF.getPin("B"), new Point(75, 170), new Point(105, 170), new Point(105, 120));
-               new GUIWire(submodelModifiable, nandQWE.getPin("Y"), cpNandQWE, new Point(110, 155));
-               new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("B"), new Point(110, 225));
-               new GUIWire(submodelModifiable, nandYF.getPin("Y"), YF);
-               new GUIWire(submodelModifiable, notQWE.getPin("Y"), QWE, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901DestDecode.class.getCanonicalName(),
-                               (m, p) -> new GUIAm2901DestDecode(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901QReg.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901QReg.java
deleted file mode 100644 (file)
index 804e85d..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent
-{
-       private GUIdff dff1;
-       private GUIdff dff2;
-       private GUIdff dff3;
-       private GUIdff dff4;
-
-       public GUIAm2901QReg(ViewModelModifiable model)
-       {
-               super(model, 1, "GUIAm2901QReg");
-               setSubmodelScale(.4);
-               setInputPins("C", "WE", "D1", "D2", "D3", "D4");
-               setOutputPins("Q1", "Q2", "Q3", "Q4");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin C = getSubmodelPin("C");
-               Pin WE = getSubmodelPin("WE");
-               Pin D1 = getSubmodelPin("D1");
-               Pin D2 = getSubmodelPin("D2");
-               Pin D3 = getSubmodelPin("D3");
-               Pin D4 = getSubmodelPin("D4");
-               Pin Q1 = getSubmodelPin("Q1");
-               Pin Q2 = getSubmodelPin("Q2");
-               Pin Q3 = getSubmodelPin("Q3");
-               Pin Q4 = getSubmodelPin("Q4");
-
-               GUIand and = new GUIand(submodelModifiable);
-               dff1 = new GUIdff(submodelModifiable);
-               dff2 = new GUIdff(submodelModifiable);
-               dff3 = new GUIdff(submodelModifiable);
-               dff4 = new GUIdff(submodelModifiable);
-
-               WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
-
-               and.moveTo(5, 15);
-               dff1.moveTo(50, 7.5);
-               dff2.moveTo(50, 32.5);
-               dff3.moveTo(50, 57.5);
-               dff4.moveTo(50, 82.5);
-               cpC1.moveCenterTo(42.5, 20);
-               cpC2.moveCenterTo(42.5, 37.5);
-               cpC3.moveCenterTo(42.5, 62.5);
-
-               new GUIWire(submodelModifiable, C, and.getPin("A"));
-               new GUIWire(submodelModifiable, WE, and.getPin("B"));
-               new GUIWire(submodelModifiable, and.getPin("Y"), cpC1, new Point[0]);
-               new GUIWire(submodelModifiable, cpC1, dff1.getPin("C"), new Point(42.5, 12.5));
-               new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
-               new GUIWire(submodelModifiable, cpC2, dff2.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, cpC2, cpC3, new Point[0]);
-               new GUIWire(submodelModifiable, cpC3, dff3.getPin("C"), new Point[0]);
-               new GUIWire(submodelModifiable, cpC3, dff4.getPin("C"), new Point(42.5, 87.5));
-               new GUIWire(submodelModifiable, D1, dff1.getPin("D"), new Point(17.5, 62.5), new Point(17.5, 42.5), new Point(45, 42.5),
-                               new Point(45, 22.5));
-               new GUIWire(submodelModifiable, D2, dff2.getPin("D"), new Point(22.5, 87.5), new Point(22.5, 47.5));
-               new GUIWire(submodelModifiable, D3, dff3.getPin("D"), new Point(27.5, 112.5), new Point(27.5, 72.5));
-               new GUIWire(submodelModifiable, D4, dff4.getPin("D"), new Point(32.5, 137.5), new Point(32.5, 97.5));
-               new GUIWire(submodelModifiable, dff1.getPin("Q"), Q1, new Point[0]);
-               new GUIWire(submodelModifiable, dff2.getPin("Q"), Q2, new Point[0]);
-               new GUIWire(submodelModifiable, dff3.getPin("Q"), Q3, new Point[0]);
-               new GUIWire(submodelModifiable, dff4.getPin("Q"), Q4, new Point[0]);
-
-               addAtomicHighLevelStateID("q1");
-               addAtomicHighLevelStateID("q2");
-               addAtomicHighLevelStateID("q3");
-               addAtomicHighLevelStateID("q4");
-               addAtomicHighLevelStateID("q");
-       }
-
-       @Override
-       public void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "q1":
-                       dff1.setHighLevelState("q", newState);
-                       break;
-               case "q2":
-                       dff2.setHighLevelState("q", newState);
-                       break;
-               case "q3":
-                       dff3.setHighLevelState("q", newState);
-                       break;
-               case "q4":
-                       dff4.setHighLevelState("q", newState);
-                       break;
-               case "q":
-                       BitVector newStateCasted = (BitVector) newState;
-                       setHighLevelState("q1", newStateCasted.getBit(0));
-                       setHighLevelState("q2", newStateCasted.getBit(1));
-                       setHighLevelState("q3", newStateCasted.getBit(2));
-                       setHighLevelState("q4", newStateCasted.getBit(3));
-                       break;
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       @Override
-       public Object getAtomicHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "q1":
-                       return dff1.getHighLevelState("q");
-               case "q2":
-                       return dff2.getHighLevelState("q");
-               case "q3":
-                       return dff3.getHighLevelState("q");
-               case "q4":
-                       return dff4.getHighLevelState("q");
-               case "q":
-                       Bit q1 = (Bit) getHighLevelState("q1");
-                       Bit q2 = (Bit) getHighLevelState("q2");
-                       Bit q3 = (Bit) getHighLevelState("q3");
-                       Bit q4 = (Bit) getHighLevelState("q4");
-                       return BitVector.of(q1, q2, q3, q4);
-               default:
-                       // should not happen because we tell SubmodelComponent to only allow these state IDs.
-                       throw new IllegalStateException("Illegal atomic state ID: " + stateID);
-               }
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901QReg.class.getCanonicalName(), (m, p) -> new GUIAm2901QReg(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java b/net.mograsim.logic.ui.am2900/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java
deleted file mode 100644 (file)
index d0ef4d5..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901SourceDecode extends SimpleRectangularSubmodelComponent
-{
-       public GUIAm2901SourceDecode(ViewModelModifiable model)
-       {
-               super(model, 1, "Am2901SourceDecode");
-               setSubmodelScale(.25);
-               setInputPins("I2", "I1", "I0");
-               setOutputPins("SQ", "RA", "SB", "SA", "RD");
-               initSubmodelComponents();
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       private void initSubmodelComponents()
-       {
-               Pin I2 = getSubmodelPin("I2");
-               Pin I1 = getSubmodelPin("I1");
-               Pin I0 = getSubmodelPin("I0");
-               Pin SQ = getSubmodelPin("SQ");
-               Pin RA = getSubmodelPin("RA");
-               Pin SB = getSubmodelPin("SB");
-               Pin SA = getSubmodelPin("SA");
-               Pin RD = getSubmodelPin("RD");
-
-               GUINandGate notI2 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notI1 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate notI0 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand21 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand22 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand23 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand24 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand25 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand31 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand32 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand33 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand34 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand35 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand41 = new GUINandGate(submodelModifiable, 1);
-               GUINandGate nand42 = new GUINandGate(submodelModifiable, 1);
-
-               WireCrossPoint cpI21 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI22 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI23 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI1 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI01 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpI02 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI2 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI11 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI12 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI13 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNotI0 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNand22 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNand23 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNand24 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNand31 = new WireCrossPoint(submodelModifiable, 1);
-               WireCrossPoint cpNand35 = new WireCrossPoint(submodelModifiable, 1);
-
-               notI2.moveTo(10, 10);
-               notI1.moveTo(10, 50);
-               notI0.moveTo(10, 90);
-               nand21.moveTo(40, 10);
-               nand22.moveTo(40, 50);
-               nand23.moveTo(40, 90);
-               nand24.moveTo(40, 130);
-               nand25.moveTo(40, 170);
-               nand31.moveTo(70, 10);
-               nand32.moveTo(70, 50);
-               nand33.moveTo(70, 90);
-               nand34.moveTo(70, 130);
-               nand35.moveTo(70, 170);
-               nand41.moveTo(100, 10);
-               nand42.moveTo(100, 170);
-               cpI21.moveCenterTo(5, 20);
-               cpI22.moveCenterTo(7.5, 20);
-               cpI23.moveCenterTo(5, 145);
-               cpI1.moveCenterTo(7.5, 60);
-               cpI01.moveCenterTo(7.5, 100);
-               cpI02.moveCenterTo(7.5, 105);
-               cpNotI2.moveCenterTo(32.5, 55);
-               cpNotI11.moveCenterTo(35, 60);
-               cpNotI12.moveCenterTo(35, 65);
-               cpNotI13.moveCenterTo(35, 135);
-               cpNotI0.moveCenterTo(37.5, 100);
-               cpNand22.moveCenterTo(65, 60);
-               cpNand23.moveCenterTo(65, 100);
-               cpNand24.moveCenterTo(65, 140);
-               cpNand31.moveCenterTo(95, 20);
-               cpNand35.moveCenterTo(95, 180);
-
-               new GUIWire(submodelModifiable, I2, cpI21, new Point[0]);
-               new GUIWire(submodelModifiable, cpI21, nand21.getPin("A"), new Point(5, 5), new Point(35, 5), new Point(35, 15));
-               new GUIWire(submodelModifiable, cpI21, cpI22, new Point[0]);
-               new GUIWire(submodelModifiable, cpI22, notI2.getPin("A"), new Point(7.5, 15));
-               new GUIWire(submodelModifiable, cpI22, notI2.getPin("B"), new Point(7.5, 25));
-               new GUIWire(submodelModifiable, cpI21, cpI23, new Point[0]);
-               new GUIWire(submodelModifiable, cpI23, nand24.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI23, nand35.getPin("B"), new Point(5, 195), new Point(65, 195), new Point(65, 185));
-               new GUIWire(submodelModifiable, I1, cpI1, new Point[0]);
-               new GUIWire(submodelModifiable, cpI1, notI1.getPin("A"), new Point(7.5, 55));
-               new GUIWire(submodelModifiable, cpI1, notI1.getPin("B"), new Point(7.5, 65));
-               new GUIWire(submodelModifiable, I0, cpI01, new Point[0]);
-               new GUIWire(submodelModifiable, cpI01, notI0.getPin("A"), new Point(7.5, 95));
-               new GUIWire(submodelModifiable, cpI01, cpI02, new Point[0]);
-               new GUIWire(submodelModifiable, cpI02, notI0.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpI02, nand23.getPin("B"), new Point(7.5, 112.5), new Point(32.5, 112.5), new Point(32.5, 105));
-               new GUIWire(submodelModifiable, notI2.getPin("Y"), cpNotI2, new Point(32.5, 20));
-               new GUIWire(submodelModifiable, cpNotI2, nand22.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI2, nand23.getPin("A"), new Point(32.5, 95));
-               new GUIWire(submodelModifiable, notI1.getPin("Y"), cpNotI11, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI11, nand21.getPin("B"), new Point(35, 25));
-               new GUIWire(submodelModifiable, cpNotI11, cpNotI12, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI12, nand22.getPin("B"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI12, cpNotI13, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI13, nand24.getPin("A"), new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI13, nand25.getPin("A"), new Point(35, 175));
-               new GUIWire(submodelModifiable, notI0.getPin("Y"), cpNotI0, new Point[0]);
-               new GUIWire(submodelModifiable, cpNotI0, nand31.getPin("B"), new Point(37.5, 35), new Point(65, 35), new Point(65, 25));
-               new GUIWire(submodelModifiable, cpNotI0, nand25.getPin("B"), new Point(37.5, 185));
-               new GUIWire(submodelModifiable, nand21.getPin("Y"), nand31.getPin("A"));
-               new GUIWire(submodelModifiable, nand22.getPin("Y"), cpNand22, new Point[0]);
-               new GUIWire(submodelModifiable, cpNand22, nand32.getPin("A"), new Point(65, 55));
-               new GUIWire(submodelModifiable, cpNand22, nand32.getPin("B"), new Point(65, 65));
-               new GUIWire(submodelModifiable, nand23.getPin("Y"), cpNand23, new Point[0]);
-               new GUIWire(submodelModifiable, cpNand23, nand33.getPin("A"), new Point(65, 95));
-               new GUIWire(submodelModifiable, cpNand23, nand33.getPin("B"), new Point(65, 105));
-               new GUIWire(submodelModifiable, nand24.getPin("Y"), cpNand24, new Point[0]);
-               new GUIWire(submodelModifiable, cpNand24, nand34.getPin("A"), new Point(65, 135));
-               new GUIWire(submodelModifiable, cpNand24, nand34.getPin("B"), new Point(65, 145));
-               new GUIWire(submodelModifiable, nand25.getPin("Y"), nand35.getPin("A"));
-               new GUIWire(submodelModifiable, nand31.getPin("Y"), cpNand31, new Point[0]);
-               new GUIWire(submodelModifiable, cpNand31, nand41.getPin("A"), new Point(95, 15));
-               new GUIWire(submodelModifiable, cpNand31, nand41.getPin("B"), new Point(95, 25));
-               new GUIWire(submodelModifiable, nand32.getPin("Y"), RA, new Point[0]);
-               new GUIWire(submodelModifiable, nand33.getPin("Y"), SB, new Point[0]);
-               new GUIWire(submodelModifiable, nand34.getPin("Y"), SA, new Point[0]);
-               new GUIWire(submodelModifiable, nand35.getPin("Y"), cpNand35, new Point[0]);
-               new GUIWire(submodelModifiable, cpNand35, nand42.getPin("A"), new Point(95, 175));
-               new GUIWire(submodelModifiable, cpNand35, nand42.getPin("B"), new Point(95, 185));
-               new GUIWire(submodelModifiable, nand41.getPin("Y"), SQ, new Point[0]);
-               new GUIWire(submodelModifiable, nand42.getPin("Y"), RD, new Point[0]);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(GUIAm2901SourceDecode.class.getCanonicalName(),
-                               (m, p) -> new GUIAm2901SourceDecode(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Test.java
deleted file mode 100644 (file)
index 21cb52f..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-package net.mograsim.logic.ui.am2900;
-
-import static net.mograsim.logic.ui.am2900.TestUtil.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Register.*;
-import static org.junit.jupiter.api.Assertions.*;
-
-import java.awt.Point;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestMethodOrder;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import net.mograsim.logic.ui.am2900.TestableAm2901.Register;
-
-@TestMethodOrder(OrderAnnotation.class)
-public class Am2901Test
-{
-       private TestableAm2901 am2901;
-
-       @BeforeEach
-       void initialize()
-       {
-               createAndSetup();
-               setInputsToZero();
-       }
-
-       void createAndSetup()
-       {
-               am2901 = new TestableAm2901Impl();
-               am2901.setup();
-       }
-
-       void setRegistersToZero()
-       {
-               setInputsToZero();
-               for (Register r : Register.values())
-               {
-                       setRegisterToZero(r);
-               }
-       }
-
-       void setRegisterToZero(Register r)
-       {
-               am2901.setD("0000");
-               am2901.setSrc(DZ);
-               am2901.setFunc(AND);
-               setRegOutput(r);
-
-               am2901.assertFullCycleSuccess();
-       }
-
-       void setRegOutput(Register r)
-       {
-               if (r == Q)
-               {
-                       am2901.setDest(QREG);
-               } else
-               {
-                       am2901.setReg_B(r.toBitString());
-                       am2901.setDest(RAMF);
-               }
-       }
-
-       void setInputsToZero()
-       {
-               am2901.setCarryIn("0");
-               am2901.setQ_0("0");
-               am2901.setQ_3("0");
-               am2901.setRAM_0("0");
-               am2901.setRAM_3("0");
-               am2901.setReg_A("0000");
-               am2901.setReg_B("0000");
-               am2901.setD("0000");
-               am2901.setSrc(AB);
-               am2901.setFunc(ADD);
-               am2901.setDest(QREG);
-//             am2901.setNotOutEnable("0"); TODO
-               am2901.clockOn(true);
-               am2901.assertRunSuccess();
-       }
-
-       @Order(1)
-       @ParameterizedTest
-       @ArgumentsSource(TestableAm2901.RegisterProvider.class)
-       void testDirectAccess(Register r)
-       {
-               assertEquals("UUUU", am2901.getDirectly(r));
-
-               am2901.setDirectly(r, "1011");
-
-               assertEquals("1011", am2901.getDirectly(r));
-       }
-
-       @Order(2)
-       @ParameterizedTest
-       @ArgumentsSource(TestableAm2901.RegisterProvider.class)
-       void testSetToZero(Register r)
-       {
-               assertEquals("UUUU", am2901.getDirectly(r));
-
-               setRegisterToZero(r);
-
-               assertEquals("0000", am2901.getDirectly(r));
-               assertEquals("0000", am2901.getY());
-               assertEquals("0", am2901.getCarryOut());
-               assertEquals("0", am2901.getOverflow());
-               assertEquals("0", am2901.getSign());
-               assertEquals("1", am2901.getZero());
-       }
-
-       @Order(3)
-       @Test
-       void testSetAllToZero()
-       {
-               setRegistersToZero();
-
-               assertEquals("0000", am2901.getY());
-               assertEquals("0", am2901.getCarryOut());
-               assertEquals("0", am2901.getOverflow());
-               assertEquals("0", am2901.getSign());
-               assertEquals("1", am2901.getZero());
-               assertEquals("0", am2901.getQ_0());
-               assertEquals("0", am2901.getQ_3());
-               assertEquals("0", am2901.getRAM_0());
-               assertEquals("0", am2901.getRAM_3());
-
-               assertAll("register values", Register.stream().map(r -> () ->
-               {
-                       assertEquals("0000", am2901.getDirectly(r), r.name());
-               }));
-       }
-
-       @Order(4)
-       @Test
-       void testADD()
-       {
-               am2901.setSrc(DA);
-               am2901.setFunc(ADD);
-               am2901.setDest(NOP);
-               am2901.setReg_A(r0.toBitString());
-
-               assertAll(getAll4BitPairs().map(xy -> () ->
-               {
-                       am2901.setDirectly(r0, to4bitBin(xy.x));
-                       am2901.setD(to4bitBin(xy.y));
-
-                       am2901.assertFullCycleSuccess();
-
-                       int res32Bit = xy.x + xy.y;
-                       int res4Bit = res32Bit & 0b1111;
-                       int res32Bit_sgn = signed4ToSigned32(xy.x) + signed4ToSigned32(xy.y);
-                       int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
-
-                       String desc = xy.x + " + " + xy.y + " = " + res4Bit + ": ";
-
-                       assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");
-                       assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");
-                       assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");
-                       assertEquals(to1bitBin(res32Bit & 0b1_0000), am2901.getCarryOut(), desc + "Cn+4");
-                       assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");
-               }));
-       }
-
-       @Order(4)
-       @Test
-       void testAND()
-       {
-               am2901.setSrc(DA);
-               am2901.setFunc(AND);
-               am2901.setDest(NOP);
-               am2901.setReg_A(r0.toBitString());
-
-               assertAll(getAll4BitPairs().map(xy -> () ->
-               {
-                       am2901.setDirectly(r0, to4bitBin(xy.x));
-                       am2901.setD(to4bitBin(xy.y));
-
-                       am2901.assertFullCycleSuccess();
-
-                       int res32Bit = xy.x & xy.y;
-
-                       String desc = xy.x + " & " + xy.y + " = " + res32Bit + ": ";
-
-                       assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
-                       assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
-                       assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-//                     assertEquals(to1bitBin(res32Bit), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-//                     assertEquals(to1bitBin(res32Bit), am2901.getOverflow(), desc + "OVR"); // TODO
-               }));
-       }
-
-       @Order(4)
-       @Test
-       void testOR()
-       {
-               am2901.setSrc(DA);
-               am2901.setFunc(OR);
-               am2901.setDest(NOP);
-               am2901.setReg_A(r0.toBitString());
-
-               assertAll(getAll4BitPairs().map(xy -> () ->
-               {
-                       am2901.setDirectly(r0, to4bitBin(xy.x));
-                       am2901.setD(to4bitBin(xy.y));
-
-                       am2901.assertFullCycleSuccess();
-
-                       int res32Bit = xy.x | xy.y;
-
-                       String desc = xy.x + " | " + xy.y + " = " + res32Bit + ": ";
-
-                       assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
-                       assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
-                       assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-//                     assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-//                     assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO
-               }));
-       }
-
-       @Order(4)
-       @Test
-       void testXOR()
-       {
-               am2901.setSrc(DA);
-               am2901.setFunc(EXOR);
-               am2901.setDest(NOP);
-               am2901.setReg_A(r0.toBitString());
-
-               assertAll(getAll4BitPairs().map(xy -> () ->
-               {
-                       am2901.setDirectly(r0, to4bitBin(xy.x));
-                       am2901.setD(to4bitBin(xy.y));
-
-                       am2901.assertFullCycleSuccess();
-
-                       int res32Bit = xy.x ^ xy.y;
-
-                       String desc = xy.x + " ^ " + xy.y + " = " + res32Bit + ": ";
-
-                       assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
-                       assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
-                       assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-//                     assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-//                     assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO
-               }));
-       }
-
-       @Order(4)
-       @Test
-       void testSUB()
-       {
-               am2901.setSrc(DA);
-               am2901.setCarryIn("1");
-               am2901.setFunc(SUBR);
-               am2901.setDest(NOP);
-               am2901.setReg_A(r0.toBitString());
-
-               assertAll(getAll4BitPairs().map(xy -> () ->
-               {
-                       am2901.setDirectly(r0, to4bitBin(xy.x));
-                       am2901.setD(to4bitBin(xy.y));
-
-                       am2901.assertFullCycleSuccess();
-
-                       int res32Bit = xy.x - xy.y;
-                       int res4Bit = res32Bit & 0b1111;
-                       int res32Bit_sgn = signed4ToSigned32(xy.x) - signed4ToSigned32(xy.y);
-                       int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
-
-                       String desc = xy.x + " - " + xy.y + " = " + res4Bit + ": ";
-
-                       assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");
-                       assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");
-                       assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");
-                       assertEquals(to1bitBin(xy.x >= xy.y), am2901.getCarryOut(), desc + "Cn+4");
-                       assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");
-               }));
-       }
-
-       static Stream<Point> getAll4BitPairs()
-       {
-               return IntStream.range(0, 16).boxed().flatMap(x -> IntStream.range(0, 16).mapToObj(y -> new Point(x, y)));
-       }
-}
diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/Am2901Testbench.java
deleted file mode 100644 (file)
index 34c4cbe..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-package net.mograsim.logic.ui.am2900;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIAndGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.TextComponent;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.ConnectionPoint;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.util.ModellingTool;
-
-public class Am2901Testbench
-{
-       public static void main(String[] args)
-       {
-               SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
-       }
-
-       public static void createTestbench(ViewModelModifiable model)
-       {
-               SimpleRectangularSubmodelComponent comp = new GUIAm2901(model);
-               ModellingTool tool = ModellingTool.createFor(model);
-
-               comp.moveTo(240, 0);
-
-               GUIManualSwitch enable = new GUIManualSwitch(model);
-               WireCrossPoint wcp0 = new WireCrossPoint(model, 1);
-               GUINotGate not1 = new GUINotGate(model, 1);
-               GUINotGate not2 = new GUINotGate(model, 1);
-               GUINotGate not3 = new GUINotGate(model, 1);
-               GUIAndGate and = new GUIAndGate(model, 1);
-               tool.connect(wcp0, enable, "");
-               tool.connect(wcp0, and, "A");
-               tool.connect(wcp0, not1, "A");
-               tool.connect(not1, not2, "Y", "A");
-               tool.connect(not2, not3, "Y", "A");
-               tool.connect(not3, and, "Y", "B");
-               enable.moveTo(20, -32.5);
-               wcp0.moveTo(35, -26);
-               not1.moveTo(50, -20);
-               not2.moveTo(80, -20);
-               not3.moveTo(110, -20);
-               and.moveTo(135, -30);
-               ConnectionPoint last = and.getPin("Y");
-
-               for (int i = 0; i < comp.getInputPinNames().size(); i++)
-               {
-                       double x = 55 + 70 * (i % 2);
-                       double y = 10 * i;
-
-                       WireCrossPoint wcp = new WireCrossPoint(model, 1);
-                       GUIdff d_ff = new GUIdff(model);
-                       GUIManualSwitch sw = new GUIManualSwitch(model);
-
-                       tool.connect(last, wcp);
-                       tool.connect(wcp, d_ff, "C");
-                       tool.connect(sw, d_ff, "", "D");
-                       tool.connect(d_ff, comp, "Q", comp.getInputPinNames().get(i));
-                       last = wcp.getPin();
-
-                       TextComponent label = new TextComponent(model, comp.getInputPinNames().get(i));
-
-                       sw.moveTo(x, y + 7.5);
-                       wcp.moveTo(160, y);
-                       d_ff.moveTo(170, y);
-                       label.moveTo(x - 25, y + 15);
-               }
-
-               for (int i = 0; i < comp.getOutputPinNames().size(); i++)
-               {
-                       double x = 300 + 75 * (i % 2);
-                       double y = 10 * i - 2.5;
-                       GUIBitDisplay bd = new GUIBitDisplay(model);
-                       bd.moveTo(x, y);
-                       tool.connect(bd.getInputPin(), comp, comp.getOutputPinNames().get(i));
-
-                       TextComponent label = new TextComponent(model, comp.getOutputPinNames().get(i));
-                       label.moveTo(x + 50, y + 8);
-               }
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestUtil.java
deleted file mode 100644 (file)
index 937e566..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-package net.mograsim.logic.ui.am2900;
-
-public final class TestUtil
-{
-       private TestUtil()
-       {
-
-       }
-
-       /**
-        * Transforms the last four bits of an int to a string that contains the binary ('1' and '0') representation of the 4 bits
-        * 
-        * @author Christian Femers
-        */
-       public static String to4bitBin(int x)
-       {
-               StringBuilder sb = new StringBuilder(4);
-               sb.append((x & 0b1000) == 0 ? '0' : '1');
-               sb.append((x & 0b0100) == 0 ? '0' : '1');
-               sb.append((x & 0b0010) == 0 ? '0' : '1');
-               sb.append((x & 0b0001) == 0 ? '0' : '1');
-               return sb.toString();
-       }
-
-       /**
-        * Transforms the given boolean to a string that contains the binary ('1' and '0') representation of the bit
-        * 
-        * @author Christian Femers
-        */
-       public static String to1bitBin(boolean bitIsSet)
-       {
-               return bitIsSet ? "1" : "0";
-       }
-
-       /**
-        * Transforms the given int to a string that contains the binary ('1' and '0') representation of the int. "0" is only returned when the
-        * int is equal to zero.
-        * 
-        * @author Christian Femers
-        */
-       public static String to1bitBin(int someInt)
-       {
-               return someInt != 0 ? "1" : "0";
-       }
-
-       /**
-        * Transforms a 4 bit signed integer (-8 to 7) to a int representing the same number. (Adding leading 1-bits if the 4 bit int is
-        * negative)
-        * 
-        * @author Christian Femers
-        */
-       public static int signed4ToSigned32(int signed4bit)
-       {
-               if ((signed4bit & 0b1000) > 0)
-                       return signed4bit | 0xFF_FF_FF_F0;
-               return signed4bit & 0x00_00_00_0F;
-       }
-
-       /**
-        * Transforms a 16 bit signed integer (-32768 to 32767 - a short) to a int representing the same number. (Adding leading 1-bits if the
-        * 16 bit int is negative)
-        * 
-        * @author Christian Femers
-        */
-       public static int signed16ToSigned32(int signed16bit)
-       {
-               return (short) signed16bit;
-       }
-
-       /**
-        * Transforms the last n bits of an int to a string that contains the binary ('1' and '0') representation of the n bits
-        * 
-        * @author Christian Femers
-        */
-       public static String toNbitString(int x, int n)
-       {
-               StringBuilder sb = new StringBuilder(n);
-               for (int i = 0; i < n; i++)
-               {
-                       sb.append((x >> i) & 1);
-               }
-               return sb.reverse().toString();
-       }
-}
diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901.java
deleted file mode 100644 (file)
index fc4a80a..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-package net.mograsim.logic.ui.am2900;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.Arrays;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-
-public interface TestableAm2901
-{
-       void setup();
-
-       Result run();
-
-       void setDest(Am2901_Dest dest);
-
-       void setFunc(Am2901_Func func);
-
-       void setSrc(Am2901_Src src);
-
-       void setReg_A(String val_4_bit);
-
-       void setReg_B(String val_4_bit);
-
-       void setCarryIn(String val_1_bit);
-
-       void setNotOutEnable(String val_1_bit);
-
-       void setD(String val_4_bit);
-
-       void setQ_0(String val_1_bit);
-
-       void setQ_3(String val_1_bit);
-
-       void setRAM_0(String val_1_bit);
-
-       void setRAM_3(String val_1_bit);
-
-       void clockOn(boolean isClockOn);
-
-       void setDirectly(Register r, String val_4_bit);
-
-       String getQ_0();
-
-       String getQ_3();
-
-       String getRAM_0();
-
-       String getRAM_3();
-
-       String getNotP();
-
-       String getNotG();
-
-       String getCarryOut();
-
-       String getSign();
-
-       String getZero();
-
-       String getOverflow();
-
-       String getY();
-
-       String getDirectly(Register r);
-
-       default void assertRunSuccess()
-       {
-               assertEquals(Result.SUCCESS, run());
-       }
-
-       default void assertFullCycleSuccess()
-       {
-               assertRunSuccess();
-               clockOn(false);
-               assertRunSuccess();
-               clockOn(true);
-               assertRunSuccess();
-       }
-
-       public enum Result
-       {
-               SUCCESS, OUT_OF_TIME, ERROR;
-       }
-
-       public enum Am2901_Dest
-       {
-               QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
-
-               public boolean doesShift()
-               {
-                       return ordinal() >= 4;
-               }
-
-               public int getShiftDir()
-               {
-                       return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
-               }
-
-               public int getI7()
-               {
-                       return this.ordinal() >> 1 & 1;
-               }
-       }
-
-       public enum Am2901_Func
-       {
-               ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
-       }
-
-       public enum Am2901_Src
-       {
-               AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
-       }
-
-       public enum Register
-       {
-               r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
-
-               public String toBitString()
-               {
-                       if (this.ordinal() > 0xF)
-                               throw new UnsupportedOperationException();
-                       return TestUtil.to4bitBin(this.ordinal());
-               }
-
-               public static Stream<Register> stream()
-               {
-                       return Arrays.stream(values());
-               }
-       }
-
-       public static class RegisterProvider implements ArgumentsProvider
-       {
-
-               @Override
-               public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception
-               {
-                       return Register.stream().map(Arguments::of);
-               }
-
-       }
-}
diff --git a/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java b/net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
deleted file mode 100644 (file)
index 9ca395a..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-package net.mograsim.logic.ui.am2900;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Objects;
-import java.util.Queue;
-import java.util.Set;
-import java.util.TreeSet;
-
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.core.types.BitVector.BitVectorMutator;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-
-public class TestableAm2901Impl implements TestableAm2901
-{
-       private GUIAm2901 am2901;
-       private Timeline timeline;
-       private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
-       private ManualSwitch C;
-       private ManualSwitch Cn;
-       private ManualSwitch D1, D2, D3, D4;
-       private ManualSwitch A0, A1, A2, A3;
-       private ManualSwitch B0, B1, B2, B3;
-       private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
-       private BitDisplay Y1, Y2, Y3, Y4;
-       private BitDisplay F_0, Cn_4, OVR, F3;
-       private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
-
-       private Set<String> wireDebugChangeSet;
-       private boolean debugWires = false;
-       public int debugEventThreshold = 10_000;
-       public int debugEventCount = 500;
-
-       private int eventCounter;
-
-       @Override
-       public Result run()
-       {
-               // Normal execution until completion or eventLimit
-               int eventLimit = debugEventThreshold;
-               eventCounter = 0;
-               debugWires = false;
-               while (eventCounter < eventLimit)
-               {
-                       timeline.executeNext();
-                       if (!timeline.hasNext())
-                       {
-//                             System.out.println("run() took " + eventCounter + " events");
-                               return Result.SUCCESS;
-                       }
-               }
-               // Start debugging if event limit is reached
-               debugWires = true;
-               wireDebugChangeSet = new TreeSet<>();
-               Set<String> oldChangeSet;
-               // observe wire changes to detect, if we are really stuck in an endless loop
-               do
-               {
-                       eventLimit += debugEventCount;
-                       oldChangeSet = wireDebugChangeSet;
-                       wireDebugChangeSet = new TreeSet<>();
-                       while (eventCounter < eventLimit)
-                       {
-                               timeline.executeNext();
-                               if (!timeline.hasNext())
-                               {
-                                       // no endless loop, but more events needed than expected
-                                       System.out.println("run() took longer than expected: " + eventCounter);
-                                       return Result.SUCCESS;
-                               }
-                       }
-               } while (!oldChangeSet.equals(wireDebugChangeSet));
-               // if stuck, abort execution and print wires
-               System.err.print("Problematic Wire updates:");
-               wireDebugChangeSet.forEach(System.out::println);
-               System.err.println("run() failed: " + eventCounter);
-               return Result.OUT_OF_TIME;
-       }
-
-       @SuppressWarnings("unused")
-       @Override
-       public void setup()
-       {
-               // Create view model
-               ViewModelModifiable viewModel = new ViewModelModifiable();
-               am2901 = new GUIAm2901(viewModel);
-               // Get switches
-               HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();
-               for (String id : am2901.getInputPinNames())
-               {
-                       GUIManualSwitch sw = new GUIManualSwitch(viewModel);
-                       new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());
-                       idSwitchMap.put(id, sw);
-               }
-               // Get displays
-               HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();
-               for (String id : am2901.getOutputPinNames())
-               {
-                       GUIBitDisplay bd = new GUIBitDisplay(viewModel);
-//                     bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));
-                       new GUIWire(viewModel, am2901.getPin(id), bd.getInputPin());
-                       idDisplayMap.put(id, bd);
-               }
-               // Create logic model
-               LogicModelParameters params = new LogicModelParameters();
-               params.gateProcessTime = 50;
-               params.wireTravelTime = 10;
-               timeline = ViewLogicModelAdapter.convert(viewModel, params);
-               // Bind switches/displays to this test class
-               for (var entry : idSwitchMap.entrySet())
-                       setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getManualSwitch());
-               for (var entry : idDisplayMap.entrySet())
-                       setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getBitDisplay());
-
-               // Debug code
-               HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();
-               Queue<ViewModel> modelsToIterate = new LinkedList<>();
-               modelsToIterate.add(viewModel);
-               while (modelsToIterate.size() > 0)
-               {
-                       ViewModel model = modelsToIterate.poll();
-                       wiresIncludingSubmodels.addAll(model.getWires());
-                       for (GUIComponent comp : model.getComponents())
-                               if (comp instanceof SubmodelComponent)
-                                       modelsToIterate.offer(((SubmodelComponent) comp).submodel);
-               }
-               wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->
-               {
-                       if (debugWires)
-                       {
-                               wireDebugChangeSet.add(w.toString());
-                       }
-               }));
-               timeline.addEventAddedListener(te -> eventCounter++);
-       }
-
-       @Override
-       public void setDest(Am2901_Dest dest)
-       {
-               var bits = of(dest.ordinal(), 3);
-               I8.setToValueOf(bits.getBit(0));
-               I7.setToValueOf(bits.getBit(1));
-               I6.setToValueOf(bits.getBit(2));
-       }
-
-       @Override
-       public void setFunc(Am2901_Func func)
-       {
-               var bits = of(func.ordinal(), 3);
-               I5.setToValueOf(bits.getBit(0));
-               I4.setToValueOf(bits.getBit(1));
-               I3.setToValueOf(bits.getBit(2));
-       }
-
-       @Override
-       public void setSrc(Am2901_Src src)
-       {
-               var bits = of(src.ordinal(), 3);
-               I2.setToValueOf(bits.getBit(0));
-               I1.setToValueOf(bits.getBit(1));
-               I0.setToValueOf(bits.getBit(2));
-       }
-
-       @Override
-       public void setReg_A(String val_4_bit)
-       {
-               var bits = BitVector.parseMSBFirst(val_4_bit);
-               A3.setToValueOf(bits.getBit(3));
-               A2.setToValueOf(bits.getBit(2));
-               A1.setToValueOf(bits.getBit(1));
-               A0.setToValueOf(bits.getBit(0));
-       }
-
-       @Override
-       public void setReg_B(String val_4_bit)
-       {
-               var bits = BitVector.parseMSBFirst(val_4_bit);
-               B3.setToValueOf(bits.getBit(3));
-               B2.setToValueOf(bits.getBit(2));
-               B1.setToValueOf(bits.getBit(1));
-               B0.setToValueOf(bits.getBit(0));
-       }
-
-       @Override
-       public void setCarryIn(String val_1_bit)
-       {
-               Cn.setToValueOf(Bit.parse(val_1_bit));
-       }
-
-       @Override
-       public void setNotOutEnable(String val_1_bit)
-       {
-               throw new UnsupportedOperationException(); // TODO
-       }
-
-       @Override
-       public void setD(String val_4_bit)
-       {
-               var bits = BitVector.parseMSBFirst(val_4_bit);
-               D4.setToValueOf(bits.getBit(3));
-               D3.setToValueOf(bits.getBit(2));
-               D2.setToValueOf(bits.getBit(1));
-               D1.setToValueOf(bits.getBit(0));
-       }
-
-       @Override
-       public void setQ_0(String val_1_bit)
-       {
-               IQn.setToValueOf(Bit.parse(val_1_bit));
-       }
-
-       @Override
-       public void setQ_3(String val_1_bit)
-       {
-               IQn_3.setToValueOf(Bit.parse(val_1_bit));
-       }
-
-       @Override
-       public void setRAM_0(String val_1_bit)
-       {
-               IRAMn.setToValueOf(Bit.parse(val_1_bit));
-       }
-
-       @Override
-       public void setRAM_3(String val_1_bit)
-       {
-               IRAMn_3.setToValueOf(Bit.parse(val_1_bit));
-       }
-
-       @Override
-       public void clockOn(boolean isClockOn)
-       {
-               C.setState(isClockOn);
-       }
-
-       @Override
-       public String getQ_0()
-       {
-               return OQn.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getQ_3()
-       {
-               return OQn_3.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getRAM_0()
-       {
-               return ORAMn.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getRAM_3()
-       {
-               return ORAMn_3.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getNotP()
-       {
-               throw new UnsupportedOperationException(); // TODO
-       }
-
-       @Override
-       public String getNotG()
-       {
-               throw new UnsupportedOperationException(); // TODO
-       }
-
-       @Override
-       public String getCarryOut()
-       {
-               return Cn_4.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getSign()
-       {
-               return F3.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getZero()
-       {
-               return F_0.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getOverflow()
-       {
-               return OVR.getDisplayedValue().toString();
-       }
-
-       @Override
-       public String getY()
-       {
-               var y3 = Y4.getDisplayedValue();
-               var y2 = Y3.getDisplayedValue();
-               var y1 = Y2.getDisplayedValue();
-               var y0 = Y1.getDisplayedValue();
-               return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst();
-       }
-
-       private void setField(String name, Object value)
-       {
-               try
-               {
-                       Field f = TestableAm2901Impl.class.getDeclaredField(name);
-                       f.setAccessible(true);
-                       f.set(this, Objects.requireNonNull(value));
-               }
-               catch (Exception e)
-               {
-                       fail(e);
-               }
-       }
-
-       private static BitVector of(int value, int length)
-       {
-               BitVectorMutator mutator = BitVectorMutator.ofLength(length);
-               int val = value;
-               for (int i = length - 1; i >= 0; i--)
-               {
-                       mutator.setBit(i, Bit.lastBitOf(val));
-                       val >>>= 1;
-               }
-               return mutator.toBitVector();
-       }
-
-       @Override
-       public void setDirectly(Register r, String val_4_bit)
-       {
-               am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit));
-       }
-
-       @Override
-       public String getDirectly(Register r)
-       {
-               return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst();
-       }
-
-       private static String regToStateID(Register r)
-       {
-               if (r == Register.Q)
-                       return "qreg.q";
-               return "regs.c" + r.toBitString() + ".q";
-       }
-}
diff --git a/net.mograsim.logic.ui.editor/.classpath b/net.mograsim.logic.ui.editor/.classpath
deleted file mode 100644 (file)
index c4b0fff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
-               <attributes>
-                       <attribute name="module" value="true"/>
-               </attributes>
-       </classpathentry>
-       <classpathentry kind="src" path="src"/>
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/net.mograsim.logic.ui.editor/.gitignore b/net.mograsim.logic.ui.editor/.gitignore
deleted file mode 100644 (file)
index ae3c172..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/net.mograsim.logic.ui.editor/.project b/net.mograsim.logic.ui.editor/.project
deleted file mode 100644 (file)
index 6956b66..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>net.mograsim.logic.ui.editor</name>
-       <comment></comment>
-       <projects>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.jdt.core.javabuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.ManifestBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.SchemaBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.jdt.core.javanature</nature>
-               <nature>org.eclipse.pde.PluginNature</nature>
-       </natures>
-</projectDescription>
diff --git a/net.mograsim.logic.ui.editor/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.ui.editor/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index e256158..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-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 --git a/net.mograsim.logic.ui.editor/META-INF/MANIFEST.MF b/net.mograsim.logic.ui.editor/META-INF/MANIFEST.MF
deleted file mode 100644 (file)
index 45b4e87..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Editor
-Bundle-SymbolicName: net.mograsim.logic.ui.editor
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui.editor,
- net.mograsim.logic.ui.editor.handles,
- net.mograsim.logic.ui.editor.states
-Require-Bundle: net.mograsim.logic.ui;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 --git a/net.mograsim.logic.ui.editor/build.properties b/net.mograsim.logic.ui.editor/build.properties
deleted file mode 100644 (file)
index d176327..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUI_rsLatch.json b/net.mograsim.logic.ui.editor/components/GUI_rsLatch.json
deleted file mode 100644 (file)
index 1db162d..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-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": 10.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 12.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 16.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "_S"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "_R"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 35.0,
-                                               "y": 27.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 42.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 42.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "_Q"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "_rsLatch",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIand.json b/net.mograsim.logic.ui.editor/components/GUIand.json
deleted file mode 100644 (file)
index 1b03271..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-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": 20.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIand",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIand41.json b/net.mograsim.logic.ui.editor/components/GUIand41.json
deleted file mode 100644 (file)
index 50ce0a3..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-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": 30.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 32.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 57.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 82.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 46.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 71.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 96.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 112.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIand41",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIandor414.json b/net.mograsim.logic.ui.editor/components/GUIandor414.json
deleted file mode 100644 (file)
index a676595..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-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": 15.0,
-                                       "y": 137.5
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 37.5
-                               },
-                               "id": "GUIor_4"
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 142.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 152.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 187.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 172.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 212.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 182.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 12.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 52.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C3"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C4"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 72.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 2,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 42.5
-                                       },
-                                       {
-                                               "x": 75.0,
-                                               "y": 12.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 80.0,
-                                               "y": 52.5
-                                       },
-                                       {
-                                               "x": 80.0,
-                                               "y": 37.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIdemux2.json b/net.mograsim.logic.ui.editor/components/GUIdemux2.json
deleted file mode 100644 (file)
index 3d77445..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-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": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 10.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 16.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 36.5,
-                                       "y": 61.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 41.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 66.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S0"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 62.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 67.5
-                                       },
-                                       {
-                                               "x": 32.5,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 37.5,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 37.5,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y00"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y01"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y10"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y11"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIdemux2",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIdff.json b/net.mograsim.logic.ui.editor/components/GUIdff.json
deleted file mode 100644 (file)
index be06355..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-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"
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 40.0
-                               },
-                               "id": "GUInand3"
-                       },
-                       {
-                               "pos": {
-                                       "x": 120.0,
-                                       "y": 60.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 120.0,
-                                       "y": 30.0
-                               },
-                               "id": "GUI_rsLatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 19.0,
-                                       "y": 64.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 99.0,
-                                       "y": 34.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 99.0,
-                                       "y": 44.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "_R"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 55.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 145.0,
-                                               "y": 70.0
-                                       },
-                                       {
-                                               "x": 145.0,
-                                               "y": 85.0
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 85.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "_S"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "_Q"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 100.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 35.0
-                                       },
-                                       {
-                                               "x": 30.0,
-                                               "y": 45.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "_S"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "_R"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 100.0,
-                                               "y": 65.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "_Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "_Q"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIdff",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIdlatch.json b/net.mograsim.logic.ui.editor/components/GUIdlatch.json
deleted file mode 100644 (file)
index 7497d34..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-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": 10.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUI_rsLatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "E"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 25.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 25.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "_S"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "_R"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "_Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "_Q"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIdlatch",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIdlatch4.json b/net.mograsim.logic.ui.editor/components/GUIdlatch4.json
deleted file mode 100644 (file)
index 00b260d..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-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": 30.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUIdlatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 32.5
-                               },
-                               "id": "GUIdlatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 57.5
-                               },
-                               "id": "GUIdlatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 82.5
-                               },
-                               "id": "GUIdlatch"
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 46.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 71.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 96.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 112.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "E"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "E"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "E"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "E"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "D"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "D"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "D"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIdlatch4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIfulladder.json b/net.mograsim.logic.ui.editor/components/GUIfulladder.json
deleted file mode 100644 (file)
index 1a8b245..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-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": 5.0,
-                                       "y": 40.0
-                               },
-                               "id": "GUIhalfadder"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUIhalfadder"
-                       },
-                       {
-                               "pos": {
-                                       "x": 57.5,
-                                       "y": 40.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "_Z"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "_Z"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Z"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIfulladder",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIhalfadder.json b/net.mograsim.logic.ui.editor/components/GUIhalfadder.json
deleted file mode 100644 (file)
index 1714a4d..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-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": 10.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "_Z"
-                               },
-                               "path": [
-                                       {
-                                               "x": 80.0,
-                                               "y": 25.0
-                                       },
-                                       {
-                                               "x": 80.0,
-                                               "y": 37.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 62.5,
-                                               "y": 12.5
-                                       },
-                                       {
-                                               "x": 62.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 62.5,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 62.5,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIhalfadder",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUImux1.json b/net.mograsim.logic.ui.editor/components/GUImux1.json
deleted file mode 100644 (file)
index 856a0f3..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-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": 10.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 22.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 47.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 60.0,
-                                       "y": 30.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 21.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S0"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 52.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUImux1",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUImux1_4.json b/net.mograsim.logic.ui.editor/components/GUImux1_4.json
deleted file mode 100644 (file)
index f69adfc..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-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": 7.5
-                               },
-                               "id": "GUImux1"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 42.5
-                               },
-                               "id": "GUImux1"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUImux1"
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 112.5
-                               },
-                               "id": "GUImux1"
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 46.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 81.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S0"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "S0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0_1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 22.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1_1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0_2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 62.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1_2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 162.5
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "S0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0_3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1_3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 187.5
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 102.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "S0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 117.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0_4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 127.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1_4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 212.5
-                                       },
-                                       {
-                                               "x": 25.0,
-                                               "y": 137.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUImux1_4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUInand3.json b/net.mograsim.logic.ui.editor/components/GUInand3.json
deleted file mode 100644 (file)
index 5ae7657..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-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": 10.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 62.5,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 57.5,
-                                               "y": 25.0
-                                       },
-                                       {
-                                               "x": 57.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 62.5
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUInand3",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUInot4.json b/net.mograsim.logic.ui.editor/components/GUInot4.json
deleted file mode 100644 (file)
index fb548eb..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-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": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 30.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 61.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 86.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUInot4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIor4.json b/net.mograsim.logic.ui.editor/components/GUIor4.json
deleted file mode 100644 (file)
index f07bd8a..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-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": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 65.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 115.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 165.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 40.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 140.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 110.0,
-                                       "y": 40.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 110.0,
-                                       "y": 140.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 140.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 74.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 124.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 174.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 104.0,
-                                       "y": 49.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 104.0,
-                                       "y": 149.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 70.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 120.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 170.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 80.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 130.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 45.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 55.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 145.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 155.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIor4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIor_4.json b/net.mograsim.logic.ui.editor/components/GUIor_4.json
deleted file mode 100644 (file)
index 0dae4d4..0000000
+++ /dev/null
@@ -1,826 +0,0 @@
-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": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 102.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 127.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 152.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 177.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 61.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 86.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 111.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 136.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 161.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 186.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B4"
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 107.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 117.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 132.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 142.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 157.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 167.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 182.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 192.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 12.5
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 50.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 62.5
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 162.5
-                                       },
-                                       {
-                                               "x": 55.0,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 187.5
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIor_4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIram2.json b/net.mograsim.logic.ui.editor/components/GUIram2.json
deleted file mode 100644 (file)
index c650386..0000000
+++ /dev/null
@@ -1,2782 +0,0 @@
-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": 55.0,
-                                       "y": 45.0
-                               },
-                               "id": "GUIdemux2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 150.0
-                               },
-                               "id": "GUIdemux2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 130.0,
-                                       "y": 150.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 325.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 475.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 625.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 775.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 235.0,
-                                       "y": 375.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 235.0,
-                                       "y": 485.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 235.0,
-                                       "y": 635.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 235.0,
-                                       "y": 785.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 325.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 435.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 585.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 735.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 109.0,
-                                       "y": 154.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 104.0,
-                                       "y": 164.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 99.0,
-                                       "y": 174.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 94.0,
-                                       "y": 184.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 549.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 649.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 749.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 809.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 479.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 489.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 499.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 509.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 629.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 639.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 649.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 659.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 129.0,
-                                       "y": 329.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 124.0,
-                                       "y": 339.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 119.0,
-                                       "y": 349.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 114.0,
-                                       "y": 359.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 129.0,
-                                       "y": 479.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 124.0,
-                                       "y": 489.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 119.0,
-                                       "y": 499.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 114.0,
-                                       "y": 509.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 129.0,
-                                       "y": 629.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 124.0,
-                                       "y": 639.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 119.0,
-                                       "y": 649.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 114.0,
-                                       "y": 659.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 129.0,
-                                       "y": 779.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 124.0,
-                                       "y": 789.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 119.0,
-                                       "y": 799.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 114.0,
-                                       "y": 809.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A0"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "S0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "S1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 150.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B0"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 250.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 155.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 350.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 165.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y00"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y01"
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y10"
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y11"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "WE"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "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": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 850.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 330.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 340.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 350.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 360.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 780.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 790.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 800.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y00"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 210.0,
-                                               "y": 50.0
-                                       },
-                                       {
-                                               "x": 210.0,
-                                               "y": 420.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y01"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 205.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 205.0,
-                                               "y": 570.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y10"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 200.0,
-                                               "y": 70.0
-                                       },
-                                       {
-                                               "x": 200.0,
-                                               "y": 720.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y11"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 195.0,
-                                               "y": 80.0
-                                       },
-                                       {
-                                               "x": 195.0,
-                                               "y": 870.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 110.0,
-                                               "y": 370.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 520.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 100.0,
-                                               "y": 670.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 820.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 380.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 390.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 400.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 410.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 530.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 540.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 550.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 560.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 680.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 690.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 700.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 710.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 830.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 840.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 850.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 860.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 11,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QA1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 300.0,
-                                               "y": 790.0
-                                       },
-                                       {
-                                               "x": 300.0,
-                                               "y": 50.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QA2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 305.0,
-                                               "y": 800.0
-                                       },
-                                       {
-                                               "x": 305.0,
-                                               "y": 150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QA3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 310.0,
-                                               "y": 810.0
-                                       },
-                                       {
-                                               "x": 310.0,
-                                               "y": 250.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QA4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 315.0,
-                                               "y": 820.0
-                                       },
-                                       {
-                                               "x": 315.0,
-                                               "y": 350.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIram4.json b/net.mograsim.logic.ui.editor/components/GUIram4.json
deleted file mode 100644 (file)
index f214452..0000000
+++ /dev/null
@@ -1,3154 +0,0 @@
-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": 55.0,
-                                       "y": 45.0
-                               },
-                               "id": "GUIdemux2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 150.0
-                               },
-                               "id": "GUIdemux2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 235.0,
-                                       "y": 150.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 330.0
-                               },
-                               "id": "GUIram2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 480.0
-                               },
-                               "id": "GUIram2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 630.0
-                               },
-                               "id": "GUIram2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 780.0
-                               },
-                               "id": "GUIram2"
-                       },
-                       {
-                               "pos": {
-                                       "x": 250.0,
-                                       "y": 375.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 250.0,
-                                       "y": 485.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 250.0,
-                                       "y": 635.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 250.0,
-                                       "y": 785.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 155.0,
-                                       "y": 325.0
-                               },
-                               "id": "GUIand41"
-                       },
-                       {
-                               "pos": {
-                                       "x": 155.0,
-                                       "y": 435.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 155.0,
-                                       "y": 585.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 155.0,
-                                       "y": 735.0
-                               },
-                               "id": "GUIandor414"
-                       },
-                       {
-                               "pos": {
-                                       "x": 229.0,
-                                       "y": 154.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 224.0,
-                                       "y": 164.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 219.0,
-                                       "y": 174.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 214.0,
-                                       "y": 184.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 59.0,
-                                       "y": 534.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 544.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 69.0,
-                                       "y": 554.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 564.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 59.0,
-                                       "y": 684.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 694.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 69.0,
-                                       "y": 704.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 714.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 59.0,
-                                       "y": 834.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 844.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 69.0,
-                                       "y": 854.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 864.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 484.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 494.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 504.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 54.0,
-                                       "y": 514.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 634.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 644.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 654.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 54.0,
-                                       "y": 664.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 334.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 349.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 649.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 54.0,
-                                       "y": 749.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A0"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "S0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "S1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 150.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B0"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 450.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 155.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 550.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 165.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y00"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y01"
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y10"
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y11"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "WE"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 850.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 195.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "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": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 345.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 355.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 365.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B0"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 785.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 795.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 805.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 815.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 250.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 385.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 395.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 70.0,
-                                               "y": 405.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 415.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 950.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 1050.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 70.0,
-                                               "y": 1150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 1250.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y00"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 135.0,
-                                               "y": 50.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 370.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y01"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 520.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y10"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 70.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 670.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y11"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 80.0
-                                       },
-                                       {
-                                               "x": 120.0,
-                                               "y": 820.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 230.0,
-                                               "y": 420.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 225.0,
-                                               "y": 570.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 220.0,
-                                               "y": 720.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 215.0,
-                                               "y": 870.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QB1"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 375.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 380.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QB2"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 385.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 390.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QB3"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 395.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 400.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QB4"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 405.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 410.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QB1"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 525.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 530.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QB2"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 535.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 540.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QB3"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 545.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 550.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QB4"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 555.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 560.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QB1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 675.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 680.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QB2"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 685.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 690.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QB3"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 695.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 700.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QB4"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 705.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 710.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QB1"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 825.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 830.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QB2"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 835.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 840.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QB3"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 845.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 850.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QB4"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 855.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 860.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QA1"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 335.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 330.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QA2"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 345.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 340.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QA3"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 355.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 350.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "QA4"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 365.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 360.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QA1"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 485.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 480.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QA2"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 495.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 490.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QA3"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 505.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 500.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "QA4"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 515.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 510.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QA1"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 635.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 630.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QA2"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 645.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 640.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QA3"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 655.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 650.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "QA4"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 665.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 660.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QA1"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 785.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 780.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QA2"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 795.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 790.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QA3"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 805.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 800.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "QA4"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 815.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 810.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 8,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 9,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 10,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "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": {
-                                       "compId": 11,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QB1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 330.0,
-                                               "y": 790.0
-                                       },
-                                       {
-                                               "x": 330.0,
-                                               "y": 450.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QB2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 335.0,
-                                               "y": 800.0
-                                       },
-                                       {
-                                               "x": 335.0,
-                                               "y": 550.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QB3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 340.0,
-                                               "y": 810.0
-                                       },
-                                       {
-                                               "x": 340.0,
-                                               "y": 650.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QB4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 345.0,
-                                               "y": 820.0
-                                       },
-                                       {
-                                               "x": 345.0,
-                                               "y": 750.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 12,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 13,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 14,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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": {
-                                       "compId": 15,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIsel2_4.json b/net.mograsim.logic.ui.editor/components/GUIsel2_4.json
deleted file mode 100644 (file)
index ccb4bbb..0000000
+++ /dev/null
@@ -1,794 +0,0 @@
-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": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 102.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 152.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 127.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 20.0,
-                                       "y": 177.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 52.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 65.0,
-                                       "y": 77.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 16.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 66.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 116.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 41.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 91.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 141.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 62.5
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 17.5,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 17.5,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 17.5,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 17.5,
-                                               "y": 107.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 17.5,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 17.5,
-                                               "y": 157.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 162.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 12.5,
-                                               "y": 187.5
-                                       },
-                                       {
-                                               "x": 12.5,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 212.5
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 132.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B4"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 237.5
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 182.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SA"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SB"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 167.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 192.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 42.5,
-                                               "y": 12.5
-                                       },
-                                       {
-                                               "x": 42.5,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 47.5,
-                                               "y": 62.5
-                                       },
-                                       {
-                                               "x": 47.5,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 50.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 52.5,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 52.5,
-                                               "y": 57.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 55.0,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 57.5,
-                                               "y": 162.5
-                                       },
-                                       {
-                                               "x": 57.5,
-                                               "y": 82.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 187.5
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 92.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIsel2_4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIsel3_4.json b/net.mograsim.logic.ui.editor/components/GUIsel3_4.json
deleted file mode 100644 (file)
index eafc524..0000000
+++ /dev/null
@@ -1,865 +0,0 @@
-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": 35.0,
-                                       "y": 250.0
-                               },
-                               "id": "GUIsel2_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 75.0,
-                                       "y": 250.0
-                               },
-                               "id": "GUInot4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 570.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 620.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 670.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 720.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 152.5,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 152.5,
-                                       "y": 65.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 152.5,
-                                       "y": 115.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 152.5,
-                                       "y": 165.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 584.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 634.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 684.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SA"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "SA"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 25.0
-                                       },
-                                       {
-                                               "x": 25.0,
-                                               "y": 255.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SB"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "SB"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 75.0
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 265.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 175.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 275.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 225.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 285.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 275.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 295.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 325.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 305.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 375.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 315.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 425.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 325.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 475.0
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 335.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B4"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 525.0
-                                       },
-                                       {
-                                               "x": 25.0,
-                                               "y": 345.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SC"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 125.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 125.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 125.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 735.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C1"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C2"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C3"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C4"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 255.0
-                                       },
-                                       {
-                                               "x": 115.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 265.0
-                                       },
-                                       {
-                                               "x": 120.0,
-                                               "y": 70.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 275.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 120.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 285.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 170.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 135.0,
-                                               "y": 580.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 630.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 80.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 145.0,
-                                               "y": 680.0
-                                       },
-                                       {
-                                               "x": 145.0,
-                                               "y": 130.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 150.0,
-                                               "y": 730.0
-                                       },
-                                       {
-                                               "x": 150.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIsel3_4",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/GUIxor.json b/net.mograsim.logic.ui.editor/components/GUIxor.json
deleted file mode 100644 (file)
index a3285fe..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-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": 7.5,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 35.0,
-                                       "y": 27.5
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 62.5,
-                                       "y": 15.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 11.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 32.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 42.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIxor",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901.json
deleted file mode 100644 (file)
index 6874bec..0000000
+++ /dev/null
@@ -1,3191 +0,0 @@
-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": 15.0,
-                                       "y": 45.0
-                               },
-                               "id": "GUIAm2901DestDecode"
-                       },
-                       {
-                               "pos": {
-                                       "x": 275.0,
-                                       "y": 135.0
-                               },
-                               "id": "GUImux1_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 190.0,
-                                       "y": 65.0
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 160.0,
-                                       "y": 75.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 240.0,
-                                       "y": 2110.0
-                               },
-                               "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode"
-                       },
-                       {
-                               "pos": {
-                                       "x": 275.0,
-                                       "y": 445.0
-                               },
-                               "id": "GUIor4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 320.0,
-                                       "y": 440.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 95.0,
-                                       "y": 2220.0
-                               },
-                               "id": "GUIram4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 160.0,
-                                       "y": 2220.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 160.0,
-                                       "y": 2275.0
-                               },
-                               "id": "GUIdlatch4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 2310.0
-                               },
-                               "id": "GUIsel3_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 2510.0
-                               },
-                               "id": "GUIsel3_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 90.0,
-                                       "y": 2490.0
-                               },
-                               "id": "GUIAm2901QReg"
-                       },
-                       {
-                               "pos": {
-                                       "x": 154.0,
-                                       "y": 949.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 154.0,
-                                       "y": 89.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 154.0,
-                                       "y": 2264.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 154.0,
-                                       "y": 2319.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 2314.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 2324.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 2334.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 219.0,
-                                       "y": 2224.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 224.0,
-                                       "y": 2234.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 229.0,
-                                       "y": 2244.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 234.0,
-                                       "y": 2254.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 129.0,
-                                       "y": 2494.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 134.0,
-                                       "y": 2504.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 139.0,
-                                       "y": 2514.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 144.0,
-                                       "y": 2524.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 219.0,
-                                       "y": 2494.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 234.0,
-                                       "y": 2524.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 2624.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 2634.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 279.0,
-                                       "y": 2114.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 294.0,
-                                       "y": 2144.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 329.0,
-                                       "y": 949.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 254.0,
-                                       "y": 2089.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 259.0,
-                                       "y": 2094.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 264.0,
-                                       "y": 2099.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 269.0,
-                                       "y": 2104.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 254.0,
-                                       "y": 449.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 259.0,
-                                       "y": 459.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 264.0,
-                                       "y": 469.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 269.0,
-                                       "y": 479.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 2354.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 2364.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 19.0,
-                                       "y": 2374.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 2394.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 19.0,
-                                       "y": 2404.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 2414.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 2384.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 2424.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 19.0,
-                                       "y": 2434.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 2444.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 314.0,
-                                       "y": 449.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I8"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I8"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I7"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I7"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 150.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I6"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I6"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 250.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 70.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I5"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I5"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 350.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 2115.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 450.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 2125.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I3"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 550.0
-                                       },
-                                       {
-                                               "x": 120.0,
-                                               "y": 2135.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I2"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 115.0,
-                                               "y": 650.0
-                                       },
-                                       {
-                                               "x": 115.0,
-                                               "y": 2145.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 110.0,
-                                               "y": 750.0
-                                       },
-                                       {
-                                               "x": 110.0,
-                                               "y": 2155.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 850.0
-                                       },
-                                       {
-                                               "x": 105.0,
-                                               "y": 2165.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 155.0,
-                                               "y": 80.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "C"
-                               },
-                               "path": [
-                                       {
-                                               "x": 155.0,
-                                               "y": 2485.0
-                                       },
-                                       {
-                                               "x": 80.0,
-                                               "y": 2485.0
-                                       },
-                                       {
-                                               "x": 80.0,
-                                               "y": 2495.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "LSH"
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 90.0
-                                       },
-                                       {
-                                               "x": 55.0,
-                                               "y": 125.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 125.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "NSH"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 50.0
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 120.0
-                                       },
-                                       {
-                                               "x": 35.0,
-                                               "y": 120.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "RSH"
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 115.0
-                                       },
-                                       {
-                                               "x": 30.0,
-                                               "y": 115.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "SA"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "SB"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "SC"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "SA"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 2515.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "SB"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 2525.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "SC"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 2535.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A0"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 80.0,
-                                               "y": 1550.0
-                                       },
-                                       {
-                                               "x": 80.0,
-                                               "y": 2225.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 1650.0
-                                       },
-                                       {
-                                               "x": 75.0,
-                                               "y": 2235.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 70.0,
-                                               "y": 1750.0
-                                       },
-                                       {
-                                               "x": 70.0,
-                                               "y": 2245.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 1850.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 2255.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B0"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 1950.0
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 2265.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 2050.0
-                                       },
-                                       {
-                                               "x": 55.0,
-                                               "y": 2275.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 2150.0
-                                       },
-                                       {
-                                               "x": 50.0,
-                                               "y": 2285.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 2250.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 2295.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QA1"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QA2"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QA3"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QA4"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QB1"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "D1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 150.0,
-                                               "y": 2265.0
-                                       },
-                                       {
-                                               "x": 150.0,
-                                               "y": 2280.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QB2"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "D2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 145.0,
-                                               "y": 2275.0
-                                       },
-                                       {
-                                               "x": 145.0,
-                                               "y": 2290.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QB3"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "D3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 140.0,
-                                               "y": 2285.0
-                                       },
-                                       {
-                                               "x": 140.0,
-                                               "y": 2300.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "QB4"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "D4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 135.0,
-                                               "y": 2295.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 2310.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Cn"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Cn"
-                               },
-                               "path": [
-                                       {
-                                               "x": 100.0,
-                                               "y": 1050.0
-                                       },
-                                       {
-                                               "x": 100.0,
-                                               "y": 2175.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 180.0,
-                                               "y": 1150.0
-                                       },
-                                       {
-                                               "x": 180.0,
-                                               "y": 2185.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 175.0,
-                                               "y": 1250.0
-                                       },
-                                       {
-                                               "x": 175.0,
-                                               "y": 2195.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 170.0,
-                                               "y": 1350.0
-                                       },
-                                       {
-                                               "x": 170.0,
-                                               "y": 2205.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 165.0,
-                                               "y": 1450.0
-                                       },
-                                       {
-                                               "x": 165.0,
-                                               "y": 2215.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I0_1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 220.0,
-                                               "y": 150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I0_2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 225.0,
-                                               "y": 160.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I0_3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 230.0,
-                                               "y": 170.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I0_4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 235.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 200.0,
-                                               "y": 2280.0
-                                       },
-                                       {
-                                               "x": 200.0,
-                                               "y": 2265.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 205.0,
-                                               "y": 2290.0
-                                       },
-                                       {
-                                               "x": 205.0,
-                                               "y": 2275.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 210.0,
-                                               "y": 2300.0
-                                       },
-                                       {
-                                               "x": 210.0,
-                                               "y": 2285.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 215.0,
-                                               "y": 2310.0
-                                       },
-                                       {
-                                               "x": 215.0,
-                                               "y": 2295.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "OQn"
-                               },
-                               "path": [
-                                       {
-                                               "x": 335.0,
-                                               "y": 2495.0
-                                       },
-                                       {
-                                               "x": 335.0,
-                                               "y": 1050.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "OQn+3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 340.0,
-                                               "y": 2525.0
-                                       },
-                                       {
-                                               "x": 340.0,
-                                               "y": 1150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 31,
-                                       "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": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 32,
-                                       "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": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "C1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "C2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "C3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 145.0,
-                                               "y": 2680.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 2680.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 2645.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "IQn+3"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "C4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 2650.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 2655.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "IQn"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 2550.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 2545.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "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": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Q1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 220.0,
-                                               "y": 2305.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Q2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 225.0,
-                                               "y": 2505.0
-                                       },
-                                       {
-                                               "x": 225.0,
-                                               "y": 2315.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Q3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 230.0,
-                                               "y": 2515.0
-                                       },
-                                       {
-                                               "x": 230.0,
-                                               "y": 2325.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Q4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 235.0,
-                                               "y": 2335.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 2565.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 32,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 2575.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Cn+4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Cn+4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 315.0,
-                                               "y": 2155.0
-                                       },
-                                       {
-                                               "x": 315.0,
-                                               "y": 550.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "OVR"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "OVR"
-                               },
-                               "path": [
-                                       {
-                                               "x": 320.0,
-                                               "y": 2165.0
-                                       },
-                                       {
-                                               "x": 320.0,
-                                               "y": 650.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "F1"
-                               },
-                               "pin2": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "F4"
-                               },
-                               "pin2": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "ORAMn"
-                               },
-                               "path": [
-                                       {
-                                               "x": 325.0,
-                                               "y": 2115.0
-                                       },
-                                       {
-                                               "x": 325.0,
-                                               "y": 850.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 330.0,
-                                               "y": 2145.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "ORAMn+3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 35,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 330.0,
-                                               "y": 750.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 33,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 280.0,
-                                               "y": 2090.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "F2"
-                               },
-                               "pin2": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 285.0,
-                                               "y": 2125.0
-                                       },
-                                       {
-                                               "x": 285.0,
-                                               "y": 2095.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "F3"
-                               },
-                               "pin2": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 290.0,
-                                               "y": 2135.0
-                                       },
-                                       {
-                                               "x": 290.0,
-                                               "y": 2100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 34,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 295.0,
-                                               "y": 2105.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 40,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I1_1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 255.0,
-                                               "y": 190.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 41,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I1_2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 260.0,
-                                               "y": 200.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 42,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I1_3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 265.0,
-                                               "y": 210.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 43,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "I1_4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 270.0,
-                                               "y": 220.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 36,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 2090.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 37,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 2095.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 38,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 2100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "IRAMn"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 2350.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 2345.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 45,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 46,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 48,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 39,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 49,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 2105.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 44,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 50,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 50,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 48,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 49,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 47,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 51,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 48,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 52,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 49,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 53,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 51,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "C1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 52,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "C2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 53,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "C3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "IRAMn+3"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "C4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 2450.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 2455.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 50,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 2585.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 51,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 2595.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 52,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 2605.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 53,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 2615.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "D1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "D2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "D3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "D4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "RAMWE"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "QWE"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "WE"
-                               },
-                               "path": [
-                                       {
-                                               "x": 85.0,
-                                               "y": 100.0
-                                       },
-                                       {
-                                               "x": 85.0,
-                                               "y": 2505.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "YF"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 70.0,
-                                               "y": 80.0
-                                       },
-                                       {
-                                               "x": 70.0,
-                                               "y": 140.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 335.0,
-                                               "y": 140.0
-                                       },
-                                       {
-                                               "x": 335.0,
-                                               "y": 50.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 335.0,
-                                               "y": 160.0
-                                       },
-                                       {
-                                               "x": 335.0,
-                                               "y": 250.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Y4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 325.0,
-                                               "y": 170.0
-                                       },
-                                       {
-                                               "x": 325.0,
-                                               "y": 350.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 54,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 54,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 315.0,
-                                               "y": 445.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 54,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 315.0,
-                                               "y": 455.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F\u003d0"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUFuncDecode.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUFuncDecode.json
deleted file mode 100644 (file)
index e6eac9e..0000000
+++ /dev/null
@@ -1,663 +0,0 @@
-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": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUInand3"
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 45.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 55.0,
-                                       "y": 70.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 100.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 100.0,
-                                       "y": 135.0
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 44.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 54.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 64.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 84.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 99.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 74.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 34.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I5"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 45.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 50.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "FN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I4"
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 40.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 40.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "SN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 105.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 105.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I3"
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "RN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 220.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "CinE"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 115.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 115.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "L"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "SBE"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901ALUFuncDecode",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclDecode.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclDecode.json
deleted file mode 100644 (file)
index c69ffdf..0000000
+++ /dev/null
@@ -1,1427 +0,0 @@
-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": 20.0,
-                                       "y": 2.5
-                               },
-                               "id": "GUIAm2901ALUFuncDecode"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 80.0
-                               },
-                               "id": "GUIAm2901ALUOneBit"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 180.0
-                               },
-                               "id": "GUIAm2901ALUOneBit"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 280.0
-                               },
-                               "id": "GUIAm2901ALUOneBit"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 380.0
-                               },
-                               "id": "GUIAm2901ALUOneBit"
-                       },
-                       {
-                               "pos": {
-                                       "x": 95.0,
-                                       "y": 400.0
-                               },
-                               "id": "GUIxor"
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 94.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 194.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 294.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 26.5,
-                                       "y": 104.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 26.5,
-                                       "y": 204.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 26.5,
-                                       "y": 304.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 124.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 224.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 29.0,
-                                       "y": 324.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 144.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 244.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 344.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 154.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 254.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 354.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 36.5,
-                                       "y": 164.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 36.5,
-                                       "y": 264.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 36.5,
-                                       "y": 364.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 84.0,
-                                       "y": 374.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 84.0,
-                                       "y": 384.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I5"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I5"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 20.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 7.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I4"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 17.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I3"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 100.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 27.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "SBE"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 62.5,
-                                               "y": 37.5
-                                       },
-                                       {
-                                               "x": 62.5,
-                                               "y": 70.0
-                                       },
-                                       {
-                                               "x": 25.0,
-                                               "y": 70.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "CoutE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "CoutE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "CoutE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "CoutE"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 395.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "CinE"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 70.0,
-                                               "y": 7.5
-                                       },
-                                       {
-                                               "x": 70.0,
-                                               "y": 77.5
-                                       },
-                                       {
-                                               "x": 27.5,
-                                               "y": 77.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "CinE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "CinE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "CinE"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "CinE"
-                               },
-                               "path": [
-                                       {
-                                               "x": 27.5,
-                                               "y": 405.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "RN"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 57.5,
-                                               "y": 57.5
-                                       },
-                                       {
-                                               "x": 57.5,
-                                               "y": 65.0
-                                       },
-                                       {
-                                               "x": 30.0,
-                                               "y": 65.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "RN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "RN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "RN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "RN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 425.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "SN"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 27.5
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 72.5
-                                       },
-                                       {
-                                               "x": 32.5,
-                                               "y": 72.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "SN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "SN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "SN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "SN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 445.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "FN"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 60.0,
-                                               "y": 47.5
-                                       },
-                                       {
-                                               "x": 60.0,
-                                               "y": 67.5
-                                       },
-                                       {
-                                               "x": 35.0,
-                                               "y": 67.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "FN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "FN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "FN"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "FN"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 455.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "L"
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 67.5,
-                                               "y": 17.5
-                                       },
-                                       {
-                                               "x": 67.5,
-                                               "y": 75.0
-                                       },
-                                       {
-                                               "x": 37.5,
-                                               "y": 75.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "L"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "L"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "L"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "L"
-                               },
-                               "path": [
-                                       {
-                                               "x": 37.5,
-                                               "y": 465.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "R1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "R"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 180.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 115.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "R2"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "R"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 220.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 215.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "R3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "R"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 260.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 315.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "R4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "R"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 300.0
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 415.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "S"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 340.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 135.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S2"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "S"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 380.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 235.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "S"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 420.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 335.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "S"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 460.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 435.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Cn"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "Cin"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 140.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 85.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Cout"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Cout"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 4,
-                                       "pinName": "Cout"
-                               },
-                               "pin2": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 85.0,
-                                               "y": 285.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "Cin"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 375.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 385.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Cout"
-                               },
-                               "pin2": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "F"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 90.0,
-                                               "y": 95.0
-                                       },
-                                       {
-                                               "x": 90.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "F"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 195.0
-                                       },
-                                       {
-                                               "x": 95.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "F"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 100.0,
-                                               "y": 295.0
-                                       },
-                                       {
-                                               "x": 100.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "F"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 105.0,
-                                               "y": 395.0
-                                       },
-                                       {
-                                               "x": 105.0,
-                                               "y": 140.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 90.0,
-                                               "y": 375.0
-                                       },
-                                       {
-                                               "x": 90.0,
-                                               "y": 405.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 85.0,
-                                               "y": 415.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Cn+4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 385.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "OVR"
-                               }
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901ALUInclDecode",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json
deleted file mode 100644 (file)
index 0a6a275..0000000
+++ /dev/null
@@ -1,1305 +0,0 @@
-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": 15.0,
-                                       "y": 165.0
-                               },
-                               "id": "GUIAm2901SourceDecode"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 365.0
-                               },
-                               "id": "GUIsel2_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 45.0,
-                                       "y": 575.0
-                               },
-                               "id": "GUIsel3_4"
-                       },
-                       {
-                               "pos": {
-                                       "x": 60.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUIAm2901ALUInclDecode"
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 459.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 14.0,
-                                       "y": 499.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 19.0,
-                                       "y": 539.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 24.0,
-                                       "y": 579.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I5"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "I5"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "I4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 30.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "I3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 100.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 40.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I2"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 140.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 170.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "I0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 220.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 190.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Cn"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "Cn"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 260.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 50.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 300.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 390.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 340.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 400.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 380.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 410.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A4"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A1"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A2"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A3"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "A4"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 430.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 440.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 450.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 460.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 610.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 620.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 630.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 640.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B1"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 620.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 650.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B2"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 700.0
-                                       },
-                                       {
-                                               "x": 5.0,
-                                               "y": 670.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "B4"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 740.0
-                                       },
-                                       {
-                                               "x": 10.0,
-                                               "y": 680.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Q1"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 15.0,
-                                               "y": 780.0
-                                       },
-                                       {
-                                               "x": 15.0,
-                                               "y": 690.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Q2"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 20.0,
-                                               "y": 820.0
-                                       },
-                                       {
-                                               "x": 20.0,
-                                               "y": 700.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Q3"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 25.0,
-                                               "y": 860.0
-                                       },
-                                       {
-                                               "x": 25.0,
-                                               "y": 710.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Q4"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 30.0,
-                                               "y": 900.0
-                                       },
-                                       {
-                                               "x": 30.0,
-                                               "y": 720.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "SQ"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "RA"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "SB"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "SA"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "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": {
-                                       "compId": 1,
-                                       "pinName": "RD"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 2,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 2,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 2,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 2,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y1"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y2"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 3,
-                                       "pinName": "Y4"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "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": {
-                                       "compId": 4,
-                                       "pinName": "F1"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "F2"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F2"
-                               },
-                               "path": [
-                                       {
-                                               "x": 135.0,
-                                               "y": 30.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "F3"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F3"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 40.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "F4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 50.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 140.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Cn+4"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Cn+4"
-                               },
-                               "path": [
-                                       {
-                                               "x": 120.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 120.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "OVR"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "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
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUOneBit.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901ALUOneBit.json
deleted file mode 100644 (file)
index 1349126..0000000
+++ /dev/null
@@ -1,511 +0,0 @@
-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": 10.0,
-                                       "y": 20.0
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 10.0,
-                                       "y": 190.0
-                               },
-                               "id": "GUIxor"
-                       },
-                       {
-                               "pos": {
-                                       "x": 10.0,
-                                       "y": 290.0
-                               },
-                               "id": "GUIxor"
-                       },
-                       {
-                               "pos": {
-                                       "x": 60.0,
-                                       "y": 20.0
-                               },
-                               "id": "GUIfulladder"
-                       },
-                       {
-                               "pos": {
-                                       "x": 60.0,
-                                       "y": 55.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 20.0
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 90.0,
-                                       "y": 70.0
-                               },
-                               "id": "GUImux1"
-                       },
-                       {
-                               "pos": {
-                                       "x": 135.0,
-                                       "y": 70.0
-                               },
-                               "id": "GUIxor"
-                       },
-                       {
-                               "pos": {
-                                       "x": 49.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 54.0,
-                                       "y": 69.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "Cin"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "CoutE"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "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": {
-                                       "compId": 0,
-                                       "pinName": "CinE"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 125.0
-                                       },
-                                       {
-                                               "x": 7.5,
-                                               "y": 35.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "R"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "RN"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "S"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "SN"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "FN"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 375.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 85.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "L"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "S0"
-                               },
-                               "path": [
-                                       {
-                                               "x": 87.5,
-                                               "y": 425.0
-                                       },
-                                       {
-                                               "x": 87.5,
-                                               "y": 75.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 195.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 50.0,
-                                               "y": 35.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 295.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "C"
-                               },
-                               "path": [
-                                       {
-                                               "x": 55.0,
-                                               "y": 45.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "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": {
-                                       "compId": 4,
-                                       "pinName": "Z"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "I1"
-                               },
-                               "path": [
-                                       {
-                                               "x": 82.5,
-                                               "y": 65.0
-                                       },
-                                       {
-                                               "x": 82.5,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Cout"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "F"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901ALUOneBit",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901DestDecode.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901DestDecode.json
deleted file mode 100644 (file)
index 72daafa..0000000
+++ /dev/null
@@ -1,1006 +0,0 @@
-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": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 15.0,
-                                       "y": 150.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 130.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 80.0,
-                                       "y": 145.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 110.0,
-                                       "y": 105.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 115.0,
-                                       "y": 210.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 14.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 24.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 64.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 9.0,
-                                       "y": 104.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 154.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 44.0,
-                                       "y": 54.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 39.0,
-                                       "y": 134.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 99.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 104.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 74.0,
-                                       "y": 159.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 109.0,
-                                       "y": 214.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I8"
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I7"
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 55.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I6"
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 165.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 40.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 65.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "NSH"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 135.0,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 45.0,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 10.0,
-                                               "y": 115.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 115.0
-                                       },
-                                       {
-                                               "x": 45.0,
-                                               "y": 105.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 40.0,
-                                               "y": 145.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "RAMWE"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 60.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 100.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "LSH"
-                               },
-                               "path": [
-                                       {
-                                               "x": 125.0,
-                                               "y": 140.0
-                                       },
-                                       {
-                                               "x": 125.0,
-                                               "y": 180.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 150.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "RSH"
-                               },
-                               "path": [
-                                       {
-                                               "x": 130.0,
-                                               "y": 20.0
-                                       },
-                                       {
-                                               "x": 130.0,
-                                               "y": 60.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 75.0,
-                                               "y": 170.0
-                                       },
-                                       {
-                                               "x": 105.0,
-                                               "y": 170.0
-                                       },
-                                       {
-                                               "x": 105.0,
-                                               "y": 120.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 110.0,
-                                               "y": 155.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 110.0,
-                                               "y": 225.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "YF"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "QWE"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901DestDecode",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901QReg.json
deleted file mode 100644 (file)
index 5af80eb..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-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": 5.0,
-                                       "y": 15.0
-                               },
-                               "id": "GUIand"
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 7.5
-                               },
-                               "id": "GUIdff"
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 32.5
-                               },
-                               "id": "GUIdff"
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 57.5
-                               },
-                               "id": "GUIdff"
-                       },
-                       {
-                               "pos": {
-                                       "x": 50.0,
-                                       "y": 82.5
-                               },
-                               "id": "GUIdff"
-                       },
-                       {
-                               "pos": {
-                                       "x": 41.5,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 41.5,
-                                       "y": 36.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 41.5,
-                                       "y": 61.5
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "C"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "WE"
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "C"
-                               },
-                               "path": [
-                                       {
-                                               "x": 42.5,
-                                               "y": 12.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "C"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "C"
-                               },
-                               "path": [
-                                       {
-                                               "x": 42.5,
-                                               "y": 87.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D1"
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "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": {
-                                       "compId": 0,
-                                       "pinName": "D2"
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "D"
-                               },
-                               "path": [
-                                       {
-                                               "x": 22.5,
-                                               "y": 87.5
-                                       },
-                                       {
-                                               "x": 22.5,
-                                               "y": 47.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D3"
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "D"
-                               },
-                               "path": [
-                                       {
-                                               "x": 27.5,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 27.5,
-                                               "y": 72.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "D4"
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "D"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 137.5
-                                       },
-                                       {
-                                               "x": 32.5,
-                                               "y": 97.5
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q1"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q2"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q3"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Q"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "Q4"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "GUIAm2901QReg",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901SourceDecode.json b/net.mograsim.logic.ui.editor/components/am2901/GUIAm2901SourceDecode.json
deleted file mode 100644 (file)
index e9a5f1e..0000000
+++ /dev/null
@@ -1,1045 +0,0 @@
-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": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 10.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 10.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 130.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 40.0,
-                                       "y": 170.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 70.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 70.0,
-                                       "y": 50.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 70.0,
-                                       "y": 90.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 70.0,
-                                       "y": 130.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 70.0,
-                                       "y": 170.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 100.0,
-                                       "y": 10.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 100.0,
-                                       "y": 170.0
-                               },
-                               "id": "GUINandGate",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 4.0,
-                                       "y": 144.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 99.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 6.5,
-                                       "y": 104.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 31.5,
-                                       "y": 54.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 64.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 34.0,
-                                       "y": 134.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 36.5,
-                                       "y": 99.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 59.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 99.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 64.0,
-                                       "y": 139.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 94.0,
-                                       "y": 19.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       },
-                       {
-                               "pos": {
-                                       "x": 94.0,
-                                       "y": 179.0
-                               },
-                               "id": "WireCrossPoint",
-                               "params": 1
-                       }
-               ],
-               "innerWires": [
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I2"
-                               },
-                               "pin2": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 35.0,
-                                               "y": 5.0
-                                       },
-                                       {
-                                               "x": 35.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 17,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 1,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 16,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 18,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 5.0,
-                                               "y": 195.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 195.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 185.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I1"
-                               },
-                               "pin2": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 55.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 19,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 2,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 65.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 0,
-                                       "pinName": "I0"
-                               },
-                               "pin2": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 20,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 3,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 21,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 7.5,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 32.5,
-                                               "y": 112.5
-                                       },
-                                       {
-                                               "x": 32.5,
-                                               "y": 105.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 1,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 20.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 22,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 6,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 32.5,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 2,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 4,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 23,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 5,
-                                       "pinName": "B"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 24,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 7,
-                                       "pinName": "A"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 25,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 35.0,
-                                               "y": 175.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 3,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 37.5,
-                                               "y": 35.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 35.0
-                                       },
-                                       {
-                                               "x": 65.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 26,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 8,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 37.5,
-                                               "y": 185.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 4,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 9,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 5,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 55.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 27,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 10,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 65.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 6,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 95.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 28,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 11,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 105.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 7,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 135.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 29,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 12,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 65.0,
-                                               "y": 145.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 8,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 13,
-                                       "pinName": "A"
-                               }
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 9,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 15.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 30,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 14,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 25.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 10,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "RA"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 11,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "SB"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 12,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "SA"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 13,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "A"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 175.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 31,
-                                       "pinName": ""
-                               },
-                               "pin2": {
-                                       "compId": 15,
-                                       "pinName": "B"
-                               },
-                               "path": [
-                                       {
-                                               "x": 95.0,
-                                               "y": 185.0
-                                       }
-                               ]
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 14,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "SQ"
-                               },
-                               "path": []
-                       },
-                       {
-                               "pin1": {
-                                       "compId": 15,
-                                       "pinName": "Y"
-                               },
-                               "pin2": {
-                                       "compId": 0,
-                                       "pinName": "RD"
-                               },
-                               "path": []
-                       }
-               ]
-       },
-       "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
-       "symbolRendererParams": {
-               "centerText": "Am2901SourceDecode",
-               "horizontalComponentCenter": 17.5,
-               "centerTextHeight": 5.0,
-               "pinLabelHeight": 3.5,
-               "pinLabelMargin": 0.5
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/DialogManager.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/DialogManager.java
deleted file mode 100644 (file)
index 12c7adb..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-package net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditableSubmodelComponent.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditableSubmodelComponent.java
deleted file mode 100644 (file)
index 5c9452f..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-package net.mograsim.logic.ui.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.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.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);
-               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.ui.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.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Editor.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Editor.java
deleted file mode 100644 (file)
index 71414af..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.handles.ComponentHandle;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.logic.ui.editor.handles.HandleManager;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.editor.states.StateManager;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public final class Editor
-{
-       final Selection selection = new Selection();
-       final Set<ComponentInfo> copyBuffer = new HashSet<>();
-       public final DeserializedSubmodelComponent toBeEdited;
-       public final HandleManager handleManager;
-       final static Map<GUIComponent, String> 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<Handle, Point> 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<ComponentInfo> 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.displayToWorldCoords(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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorCanvas.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorCanvas.java
deleted file mode 100644 (file)
index a6e8add..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package net.mograsim.logic.ui.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.ui.LogicUICanvas;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.preferences.Preferences;
-
-public class EditorCanvas extends LogicUICanvas
-{
-       private Collection<Handle> 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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorGUI.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorGUI.java
deleted file mode 100644 (file)
index fbc3aac..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-package net.mograsim.logic.ui.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.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorUserInput.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/EditorUserInput.java
deleted file mode 100644 (file)
index 05a0277..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.mograsim.logic.ui.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.displayToWorldCoords(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.displayToWorldCoords(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;
-                               }
-
-                       }
-               });
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/SaveLoadManager.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/SaveLoadManager.java
deleted file mode 100644 (file)
index c706097..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.mograsim.logic.ui.editor;
-
-import java.io.IOException;
-
-import net.mograsim.logic.ui.editor.DialogManager.InteractiveDialog;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Selection.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/Selection.java
deleted file mode 100644 (file)
index ee19771..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.handles.Handle;
-
-public class Selection implements Iterable<Handle>
-{
-       private Set<Handle> selection = new HashSet<>();
-
-       public Map<Handle, Point> calculateOffsets()
-       {
-               Map<Handle, Point> 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<Handle> handles)
-       {
-               handles.forEach(h -> h.onSelect());
-               selection.addAll(handles);
-       }
-
-       @Override
-       public Iterator<Handle> iterator()
-       {
-               return selection.iterator();
-       }
-
-       @Override
-       public String toString()
-       {
-               return selection.toString();
-       }
-
-       public boolean isEmpty()
-       {
-               return selection.isEmpty();
-       }
-}
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/ComponentHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/ComponentHandle.java
deleted file mode 100644 (file)
index 7e897fc..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Editor.ComponentInfo;
-import net.mograsim.logic.ui.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<ComponentInfo> 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;
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/CornerHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/CornerHandle.java
deleted file mode 100644 (file)
index f786fb3..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-package net.mograsim.logic.ui.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.ui.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;
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/Handle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/Handle.java
deleted file mode 100644 (file)
index 6627107..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.Editor.ComponentInfo;
-import net.mograsim.logic.ui.editor.states.EditorState;
-
-public abstract class Handle
-{
-       private final Rectangle bounds;
-       private final Collection<Runnable> 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<ComponentInfo> 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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/HandleManager.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/HandleManager.java
deleted file mode 100644 (file)
index da4b2a0..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-package net.mograsim.logic.ui.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.Iterator;
-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.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.states.EditorState;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class HandleManager
-{
-       private final Map<Pin, StaticPinHandle> handlePerPin;
-       private final Map<Pin, InterfacePinHandle> handlePerInterfacePin;
-       private final Map<GUIWire, List<WirePointHandle>> pointHandlesPerWire;
-       private final Map<GUIWire, WireHandle> handlePerWire;
-       private final Set<Handle> handles;
-       private final Set<WirePointHandle> wirePointHandles;
-       private final Map<GUIComponent, ComponentHandle> handlePerComp;
-
-       private final Collection<Consumer<Handle>> handleAddedListeners;
-       private final Collection<Consumer<Handle>> 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();
-
-                       Iterator<GUIComponent> cIt = model.getComponents().iterator();
-                       // First GUIComponent is the Submodel Interface
-                       registerInterfaceComponent(cIt.next());
-                       cIt.forEachRemaining(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<WirePointHandle> 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<WirePointHandle> 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<WirePointHandle> getWirePointHandles(GUIWire parent)
-       {
-               return pointHandlesPerWire.get(parent).stream().collect(Collectors.toSet());
-       }
-
-       /**
-        * @return An unmodifiable view of all registered {@link Handle}s
-        */
-       public Collection<Handle> getHandles()
-       {
-               return Collections.unmodifiableCollection(handles);
-       }
-
-       /**
-        * @return An unmodifiable view of all registered {@link StaticPinHandle}s
-        */
-       public Collection<StaticPinHandle> getPinHandles()
-       {
-               return Collections.unmodifiableCollection(handlePerPin.values());
-       }
-       
-       /**
-        * @return An unmodifiable view of all registered {@link InterfacePinHandle}s
-        */
-       public Collection<InterfacePinHandle> getInterfacePinHandles()
-       {
-               return Collections.unmodifiableCollection(handlePerInterfacePin.values());
-       }
-
-       /**
-        * @return An unmodifiable view of all registered {@link ComponentHandle}s
-        */
-       public Collection<ComponentHandle> getComponentHandles()
-       {
-               return Collections.unmodifiableCollection(handlePerComp.values());
-       }
-
-       /**
-        * @return An unmodifiable view of all registered {@link WireHandle}s
-        */
-       public Collection<WireHandle> getWireHandles()
-       {
-               return Collections.unmodifiableCollection(handlePerWire.values());
-       }
-
-       /**
-        * @return An unmodifiable view of all registered {@link WirePointHandle}s
-        */
-       public Collection<WirePointHandle> 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<? extends Handle> 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<Handle> c)
-       {
-               handleAddedListeners.add(c);
-       }
-
-       private void callHandleAddedListeners(Handle added)
-       {
-               handleAddedListeners.forEach(l -> l.accept(added));
-       }
-
-       public void removeHandleAddedListener(Consumer<Handle> c)
-       {
-               handleAddedListeners.remove(c);
-       }
-
-       public void addHandleRemovedListener(Consumer<Handle> c)
-       {
-               handleRemovedListeners.add(c);
-       }
-
-       private void callHandleRemovedListeners(Handle removed)
-       {
-               handleRemovedListeners.forEach(l -> l.accept(removed));
-       }
-
-       public void removeHandleRemovedListener(Consumer<Handle> c)
-       {
-               handleRemovedListeners.remove(c);
-       }
-}
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/InterfacePinHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/InterfacePinHandle.java
deleted file mode 100644 (file)
index ddc0298..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-package net.mograsim.logic.ui.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.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.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;
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/PinHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/PinHandle.java
deleted file mode 100644 (file)
index a82ae10..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package net.mograsim.logic.ui.editor.handles;
-
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/StaticPinHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/StaticPinHandle.java
deleted file mode 100644 (file)
index d0f02f4..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.mograsim.logic.ui.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.ui.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;
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WireHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WireHandle.java
deleted file mode 100644 (file)
index fc90551..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.states.EditorState;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.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<WireClickData> 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<WireClickData> 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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WirePointHandle.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/handles/WirePointHandle.java
deleted file mode 100644 (file)
index 527bb9f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package net.mograsim.logic.ui.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.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/BoxSelectionState.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/BoxSelectionState.java
deleted file mode 100644 (file)
index 5694bdd..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Selection;
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/CreateWireState.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/CreateWireState.java
deleted file mode 100644 (file)
index 93a3cfa..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/EditorState.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/EditorState.java
deleted file mode 100644 (file)
index 2b96d3b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-package net.mograsim.logic.ui.editor.states;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-import net.mograsim.logic.ui.editor.handles.InterfacePinHandle;
-
-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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/GrabState.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/GrabState.java
deleted file mode 100644 (file)
index 75a378d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.mograsim.logic.ui.editor.states;
-
-import java.util.Map;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.Handle;
-
-public class GrabState extends EditorState
-{
-       private Map<Handle, Point> 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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/SelectionState.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/SelectionState.java
deleted file mode 100644 (file)
index f9a4b76..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-package net.mograsim.logic.ui.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.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Selection;
-import net.mograsim.logic.ui.editor.DialogManager.InteractiveDialog;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.editor.handles.WireHandle;
-import net.mograsim.logic.ui.editor.handles.WireHandle.WireHandleClickInfo;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/StateManager.java b/net.mograsim.logic.ui.editor/src/net/mograsim/logic/ui/editor/states/StateManager.java
deleted file mode 100644 (file)
index 5f16765..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-package net.mograsim.logic.ui.editor.states;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.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 --git a/net.mograsim.logic.ui/.classpath b/net.mograsim.logic.ui/.classpath
deleted file mode 100644 (file)
index 4a00bec..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
-               <attributes>
-                       <attribute name="module" value="true"/>
-               </attributes>
-       </classpathentry>
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" path="src"/>
-       <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/net.mograsim.logic.ui/.gitignore b/net.mograsim.logic.ui/.gitignore
deleted file mode 100644 (file)
index ae3c172..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/net.mograsim.logic.ui/.project b/net.mograsim.logic.ui/.project
deleted file mode 100644 (file)
index 8ce0afd..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>net.mograsim.logic.ui</name>
-       <comment></comment>
-       <projects>
-               <project>net.mograsim.logic.core</project>
-               <project>SWTZoomableCanvas</project>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.jdt.core.javabuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.ManifestBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.SchemaBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.jdt.core.javanature</nature>
-               <nature>org.eclipse.pde.PluginNature</nature>
-       </natures>
-</projectDescription>
diff --git a/net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index f8bd225..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-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.APILeak=warning
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
-org.eclipse.jdt.core.formatter.align_with_spaces=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
-org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=140
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.lineSplit=140
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs b/net.mograsim.logic.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644 (file)
index 8f2c0a4..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_MoGraSim
-formatter_settings_version=16
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
-sp_cleanup.organize_imports=false
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_modifiers=false
-sp_cleanup.remove_redundant_semicolons=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/net.mograsim.logic.ui/META-INF/MANIFEST.MF b/net.mograsim.logic.ui/META-INF/MANIFEST.MF
deleted file mode 100644 (file)
index b8c297a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: net.mograsim.logic.ui;singleton:=true
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui,
- net.mograsim.logic.ui.examples,
- net.mograsim.logic.ui.model,
- net.mograsim.logic.ui.model.components,
- net.mograsim.logic.ui.model.components.atomic,
- net.mograsim.logic.ui.model.components.submodels,
- net.mograsim.logic.ui.model.wires,
- net.mograsim.logic.ui.modeladapter,
- net.mograsim.logic.ui.modeladapter.componentadapters,
- net.mograsim.logic.ui.serializing,
- net.mograsim.logic.ui.serializing.snippets,
- net.mograsim.logic.ui.serializing.snippets.outlinerenderers,
- net.mograsim.logic.ui.serializing.snippets.symbolrenderers,
- net.mograsim.logic.ui.util
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Require-Bundle: org.eclipse.swt;bundle-version="3.0.0";visibility:=reexport,
- SWTZoomableCanvas;bundle-version="1.0.0";visibility:=reexport,
- net.mograsim.logic.core;bundle-version="0.1.0";visibility:=reexport,
- com.google.gson;bundle-version="2.8.2";visibility:=reexport,
- net.mograsim.preferences;bundle-version="0.1.0"
-Automatic-Module-Name: net.mograsim.logic.ui
-Bundle-Vendor: Mograsim Team
diff --git a/net.mograsim.logic.ui/OSGI-INF/l10n/bundle.properties b/net.mograsim.logic.ui/OSGI-INF/l10n/bundle.properties
deleted file mode 100644 (file)
index 4eac282..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#Properties file for net.mograsim.logic.ui
-Bundle-Vendor = Mograsim Team
-Bundle-Name = Mograsim logic user interface
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/build.properties b/net.mograsim.logic.ui/build.properties
deleted file mode 100644 (file)
index d6642e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/
diff --git a/net.mograsim.logic.ui/oldsrc/GUIMerger.java b/net.mograsim.logic.ui/oldsrc/GUIMerger.java
deleted file mode 100644 (file)
index 64fd0aa..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Merger;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMerger extends Merger implements GUIComponent
-{
-       private final int inputCount;
-       private final double height;
-       private final List<ReadEnd> connectedWireEnds;
-       private final List<Point> WireEndConnectionPoints;
-
-       public GUIMerger(ReadWriteEnd union, ReadEnd... inputs)
-       {
-               super(union, inputs);
-
-               List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
-               List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
-               this.inputCount = inputs.length;
-               this.height = (inputCount - 1) * 10;
-
-               {
-                       connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
-                       double inputHeight = 0;
-                       for (int i = 0; i < inputCount; i++, inputHeight += 10)
-                               WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
-               }
-
-               connectedWireEndsModifiable.add(union);
-               WireEndConnectionPointsModifiable.add(new Point(20, height / 2));
-
-               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
-               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
-       }
-
-       @Override
-       public Rectangle getBounds()
-       {
-               return new Rectangle(0, 0, 20, height);
-       }
-
-       @Override
-       public void render(GeneralGC gc)
-       {
-               double inputHeight = 0;
-               for (int i = 0; i < inputCount; i++, inputHeight += 10)
-                       gc.drawLine(0, inputHeight, 10, inputHeight);
-               gc.drawLine(10, 0, 10, height);
-               gc.drawLine(10, height / 2, 20, height / 2);
-       }
-
-       @Override
-       public int getConnectedWireEndsCount()
-       {
-               return connectedWireEnds.size();
-       }
-
-       @Override
-       public ReadEnd getConnectedWireEnd(int connectionIndex)
-       {
-               return connectedWireEnds.get(connectionIndex);
-       }
-
-       @Override
-       public Point getWireEndConnectionPoint(int connectionI)
-       {
-               return WireEndConnectionPoints.get(connectionI);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/oldsrc/GUIMux.java b/net.mograsim.logic.ui/oldsrc/GUIMux.java
deleted file mode 100644 (file)
index d004d90..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Mux;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMux extends Mux implements GUIComponent
-{
-       private final double height;
-       private final List<ReadEnd> connectedWireEnds;
-       private final List<Point> WireEndConnectionPoints;
-
-       public GUIMux(int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
-       {
-               super(processTime, out, select, inputs);
-
-               double height = inputs.length * 5;
-               if (height < 10)
-                       height = 10;
-               this.height = height;
-
-               List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
-               List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
-               connectedWireEndsModifiable.add(out);
-               WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));
-
-               connectedWireEndsModifiable.add(select);
-               WireEndConnectionPointsModifiable.add(new Point(10, 5));
-
-               {
-                       connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
-                       double inputHeightIncrement = (height + 20) / inputs.length;
-                       double inputHeight = inputHeightIncrement / 2;
-                       for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)
-                               WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
-               }
-
-               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
-               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
-       }
-
-       @Override
-       public Rectangle getBounds()
-       {
-               return new Rectangle(0, 0, 20, height + 20);
-       }
-
-       @Override
-       public void render(GeneralGC gc)
-       {
-               gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });
-       }
-
-       @Override
-       public int getConnectedWireEndsCount()
-       {
-               return connectedWireEnds.size();
-       }
-
-       @Override
-       public ReadEnd getConnectedWireEnd(int connectionIndex)
-       {
-               return connectedWireEnds.get(connectionIndex);
-       }
-
-       @Override
-       public Point getWireEndConnectionPoint(int connectionI)
-       {
-               return WireEndConnectionPoints.get(connectionI);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/oldsrc/GUISplitter.java b/net.mograsim.logic.ui/oldsrc/GUISplitter.java
deleted file mode 100644 (file)
index 1bff424..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.gui.ViewModel;
-import era.mi.logic.components.Splitter;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUISplitter extends GUIComponent
-{
-       public GUISplitter(ViewModel model)
-       {
-               super(model);
-
-               this.outputCount = outputs.length;
-               this.height = (outputCount - 1) * 10;
-
-               connectedWireEndsModifiable.add(input);
-               WireEndConnectionPointsModifiable.add(new Point(0, height / 2));
-
-               {
-                       connectedWireEndsModifiable.addAll(Arrays.asList(outputs));
-                       double outputHeight = 0;
-                       for (int i = 0; i < outputCount; i++, outputHeight += 10)
-                               WireEndConnectionPointsModifiable.add(new Point(20, outputHeight));
-               }
-
-               this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
-               this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
-       }
-
-       @Override
-       public Rectangle getBounds()
-       {
-               return new Rectangle(0, 0, 20, height);
-       }
-
-       @Override
-       public void render(GeneralGC gc)
-       {
-               gc.drawLine(0, height / 2, 10, height / 2);
-               gc.drawLine(10, 0, 10, height);
-               double outputHeight = 0;
-               for (int i = 0; i < outputCount; i++, outputHeight += 10)
-                       gc.drawLine(10, outputHeight, 20, outputHeight);
-       }
-
-       @Override
-       public int getConnectedWireEndsCount()
-       {
-               return connectedWireEnds.size();
-       }
-
-       @Override
-       public ReadEnd getConnectedWireEnd(int connectionIndex)
-       {
-               return connectedWireEnds.get(connectionIndex);
-       }
-
-       @Override
-       public Point getWireEndConnectionPoint(int connectionI)
-       {
-               return WireEndConnectionPoints.get(connectionI);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicExecuter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicExecuter.java
deleted file mode 100644 (file)
index eb8a723..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-package net.mograsim.logic.ui;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-
-import net.mograsim.logic.core.timeline.Timeline;
-
-//TODO maybe move to logic core?
-public class LogicExecuter
-{
-       // TODO replace with LogicModel when it exists
-       private final Timeline timeline;
-
-       private final AtomicBoolean shouldBeRunningLive;
-       private final AtomicBoolean isRunningLive;
-       private final AtomicLong nextExecSimulTime;
-       private final Thread simulationThread;
-
-       public LogicExecuter(Timeline timeline)
-       {
-               this.timeline = timeline;
-
-               timeline.setTimeFunction(System::currentTimeMillis);
-               shouldBeRunningLive = new AtomicBoolean();
-               isRunningLive = new AtomicBoolean();
-               nextExecSimulTime = new AtomicLong();
-               simulationThread = new Thread(() ->
-               {
-                       isRunningLive.set(true);
-                       synchronized (isRunningLive)
-                       {
-                               isRunningLive.notify();
-                       }
-                       try
-                       {
-                               while (shouldBeRunningLive.get())
-                               {
-                                       // always execute to keep timeline from "hanging behind" for too long
-                                       long current = System.currentTimeMillis();
-                                       timeline.executeUntil(timeline.laterThan(current), current + 10);
-                                       long sleepTime;
-                                       if (timeline.hasNext())
-                                               sleepTime = timeline.nextEventTime() - current;
-                                       else
-                                               sleepTime = 10000;
-                                       try
-                                       {
-                                               nextExecSimulTime.set(current + sleepTime);
-                                               if (sleepTime > 0)
-                                                       Thread.sleep(sleepTime);
-                                       }
-                                       catch (@SuppressWarnings("unused") InterruptedException e)
-                                       {// do nothing; it is normal execution flow to be interrupted
-                                       }
-                               }
-                       }
-                       finally
-                       {
-                               isRunningLive.set(false);
-                               synchronized (isRunningLive)
-                               {
-                                       isRunningLive.notify();
-                               }
-                       }
-               });
-               timeline.addEventAddedListener(event ->
-               {
-                       if (isRunningLive.get())
-                               if (Timeline.timeCmp(event.getTiming(), nextExecSimulTime.get()) < 0)
-                                       simulationThread.interrupt();
-               });
-       }
-
-       public void executeNextStep()
-       {
-               timeline.executeNext();
-       }
-
-       public synchronized void startLiveExecution()
-       {
-               if (shouldBeRunningLive.get())
-                       return;
-               shouldBeRunningLive.set(true);
-               simulationThread.start();
-               waitForIsRunning(true);
-       }
-
-       public synchronized void stopLiveExecution()
-       {
-               if (!shouldBeRunningLive.get())
-                       return;
-               shouldBeRunningLive.set(false);
-               simulationThread.interrupt();
-               waitForIsRunning(false);
-       }
-
-       private void waitForIsRunning(boolean expectedState)
-       {
-               while (isRunningLive.get() ^ expectedState)
-                       try
-                       {
-                               synchronized (isRunningLive)
-                               {
-                                       isRunningLive.wait();
-                               }
-                       }
-                       catch (@SuppressWarnings("unused") InterruptedException e)
-                       {// no need to do anything
-                       }
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java
deleted file mode 100644 (file)
index 0ea2680..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-package net.mograsim.logic.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelInterface;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Simulation visualizer canvas.
- * 
- * @author Daniel Kirschten
- */
-public class LogicUICanvas extends ZoomableCanvas
-{
-       private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false;
-
-       private final ViewModel model;
-
-       public LogicUICanvas(Composite parent, int style, ViewModel model)
-       {
-               super(parent, style);
-
-               this.model = model;
-
-               LogicUIRenderer renderer = new LogicUIRenderer(model);
-               addZoomedRenderer(gc ->
-               {
-                       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
-                       renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
-               });
-               model.addRedrawListener(this::redrawThreadsafe);
-
-               addListener(SWT.MouseDown, this::mouseDown);
-
-               if (OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL)
-                       openDebugSetHighLevelStateShell(model);
-       }
-
-       private void mouseDown(Event e)
-       {
-               if (e.button == 1)
-               {
-                       Point click = displayToWorldCoords(e.x, e.y);
-                       for (GUIComponent component : model.getComponents())
-                               if (component.getBounds().contains(click) && component.clicked(click.x, click.y))
-                               {
-                                       redraw();
-                                       break;
-                               }
-               }
-       }
-
-       private void openDebugSetHighLevelStateShell(ViewModel model)
-       {
-               Shell debugShell = new Shell();
-               debugShell.setLayout(new GridLayout(2, false));
-               new Label(debugShell, SWT.NONE).setText("Target component: ");
-               Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
-               componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               List<GUIComponent> componentsByItemIndex = new ArrayList<>();
-               model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
-               model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
-               recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
-               new Label(debugShell, SWT.NONE).setText("Target state ID: ");
-               Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
-               stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               new Label(debugShell, SWT.NONE).setText("Value type: ");
-               Composite radioGroup = new Composite(debugShell, SWT.NONE);
-               radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               GridLayout radioGroupLayout = new GridLayout(2, false);
-               radioGroupLayout.marginHeight = 0;
-               radioGroupLayout.marginWidth = 0;
-               radioGroup.setLayout(radioGroupLayout);
-               Button radioBit = new Button(radioGroup, SWT.RADIO);
-               radioBit.setText("Single bit");
-               Button radioBitVector = new Button(radioGroup, SWT.RADIO);
-               radioBitVector.setText("Bitvector");
-               new Label(debugShell, SWT.NONE).setText("Value string representation: \n(Bit vectors: MSBit...LSBit)");
-               Text valueText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
-               valueText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               Button send = new Button(debugShell, SWT.PUSH);
-               send.setText("Send!");
-               Button get = new Button(debugShell, SWT.PUSH);
-               get.setText("Get!");
-               Text output = new Text(debugShell, SWT.READ_ONLY);
-               output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
-               Listener sendAction = e ->
-               {
-                       try
-                       {
-                               int componentIndex = componentSelector.getSelectionIndex();
-                               if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size())
-                                       throw new RuntimeException("No component selected");
-                               GUIComponent target = componentsByItemIndex.get(componentIndex);
-                               String valueString = valueText.getText();
-                               Object value;
-                               if (radioBit.getSelection())
-                                       value = Bit.parse(valueString);
-                               else if (radioBitVector.getSelection())
-                                       value = BitVector.parseMSBFirst(valueString);
-                               else
-                                       throw new RuntimeException("No value type selected");
-                               target.setHighLevelState(stateIDText.getText(), value);
-                               output.setText("Success!");
-                       }
-                       catch (Exception x)
-                       {
-                               output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
-                       }
-               };
-               Listener getAction = e ->
-               {
-                       try
-                       {
-                               if (componentSelector.getSelectionIndex() >= componentsByItemIndex.size())
-                                       throw new RuntimeException("No valid component selected");
-                               output.setText("Success! Value: \r\n"
-                                               + componentsByItemIndex.get(componentSelector.getSelectionIndex()).getHighLevelState(stateIDText.getText()));
-                       }
-                       catch (Exception x)
-                       {
-                               output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
-                       }
-               };
-               send.addListener(SWT.Selection, sendAction);
-               valueText.addListener(SWT.DefaultSelection, sendAction);
-               get.addListener(SWT.Selection, getAction);
-               stateIDText.addListener(SWT.DefaultSelection, getAction);
-               debugShell.open();
-       }
-
-       private void recalculateComponentSelector(List<GUIComponent> componentsByItemIndex, Combo componentSelector, ViewModel model)
-       {
-               componentsByItemIndex.clear();
-               componentSelector.setItems();
-               addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model);
-       }
-
-       private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
-       {
-               for (GUIComponent c : model.getComponents())
-                       if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
-                       {
-                               String item = base + c.getClass().getSimpleName();
-                               componentsByItemIndex.add(c);
-                               componentSelector.add(item);
-                               if (c instanceof SubmodelComponent)
-                                       addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
-                       }
-       }
-
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIRenderer.java
deleted file mode 100644 (file)
index 7858a70..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.mograsim.logic.ui;
-
-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.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class LogicUIRenderer
-{
-       private static final boolean DRAW_PINS = false;
-
-       private final ViewModel model;
-
-       public LogicUIRenderer(ViewModel model)
-       {
-               this.model = model;
-       }
-
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               gc.setAntialias(SWT.ON);
-               gc.setClipping(visibleRegion);
-               gc.setLineWidth(.5);
-               model.getWires().forEach(w ->
-               {
-                       Rectangle bounds = w.getBounds();
-                       double lw = gc.getLineWidth();
-                       if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
-                               w.render(gc);
-               });
-               model.getComponents().forEach(c -> renderComponent(gc, c, visibleRegion));
-       }
-
-       private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
-       {
-               Rectangle bounds = component.getBounds();
-               double lw = gc.getLineWidth();
-               if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
-               {
-                       component.render(gc, visibleRegion);
-                       if (DRAW_PINS)
-                       {
-                               gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
-                               for (Pin p : component.getPins().values())
-                               {
-                                       Point pos = p.getPos();
-                                       gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
-                               }
-                       }
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java
deleted file mode 100644 (file)
index a71cdde..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-package net.mograsim.logic.ui;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Display;
-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.ui.model.ViewModel;
-
-/**
- * Standalone simulation visualizer graphical user interface.
- * 
- * @author Daniel Kirschten
- */
-public class LogicUIStandaloneGUI implements Runnable
-{
-       private final Display display;
-       private final Shell shell;
-       private final LogicUICanvas ui;
-
-       public LogicUIStandaloneGUI(ViewModel model)
-       {
-               display = new Display();
-               shell = new Shell(display);
-               shell.setLayout(new FillLayout());
-               ui = new LogicUICanvas(shell, SWT.NONE, model);
-
-               ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
-               userInput.buttonDrag = 3;
-               userInput.buttonZoom = 2;
-               userInput.enableUserInput();
-               new ZoomableCanvasOverlay(ui, null).enableScale();
-       }
-
-       public LogicUICanvas getLogicUICanvas()
-       {
-               return ui;
-       }
-
-       /**
-        * Opens the UI shell. Returns when the shell is closed.
-        */
-       @Override
-       public void run()
-       {
-               shell.open();
-               while (!shell.isDisposed())
-                       if (!display.readAndDispatch())
-                               display.sleep();
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java
deleted file mode 100644 (file)
index 6c856c4..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package net.mograsim.logic.ui;
-
-import java.util.function.Consumer;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-
-public class SimpleLogicUIStandalone
-{
-       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
-       {
-               LogicModelParameters params = new LogicModelParameters();
-               params.gateProcessTime = 50;
-               params.wireTravelTime = 10;
-               executeVisualisation(setupViewModel, params);
-       }
-
-       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
-       {
-               // setup view model
-               ViewModelModifiable viewModel = new ViewModelModifiable();
-               setupViewModel.accept(viewModel);
-
-               // convert to logic model
-               Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
-
-               // initialize UI and executer
-               LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
-               LogicExecuter exec = new LogicExecuter(timeline);
-
-               // run it
-               exec.startLiveExecution();
-               ui.run();
-               exec.stopLiveExecution();
-       }
-
-       private SimpleLogicUIStandalone()
-       {
-               throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ClickableSubmodelComponentsTest.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ClickableSubmodelComponentsTest.java
deleted file mode 100644 (file)
index d5832ce..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package net.mograsim.logic.ui.examples;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-
-public class ClickableSubmodelComponentsTest
-{
-       public static void main(String[] args)
-       {
-               SimpleLogicUIStandalone.executeVisualisation(ClickableSubmodelComponentsTest::createExample);
-       }
-
-       public static void createExample(ViewModelModifiable model)
-       {
-               SimpleRectangularSubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 1, "")
-               {
-                       {
-                               setSubmodelScale(.4);
-                               setOutputPins("O0");
-
-                               GUIManualSwitch sw = new GUIManualSwitch(submodelModifiable);
-                               GUIBitDisplay bd = new GUIBitDisplay(submodelModifiable);
-
-                               sw.moveTo(10, 5);
-                               bd.moveTo(50, 5);
-
-                       }
-               };
-               comp.moveTo(10, 10);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java
deleted file mode 100644 (file)
index 91cdd17..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.mograsim.logic.ui.examples;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIOrGate;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-
-public class RSLatchExample
-{
-       public static void main(String[] args)
-       {
-               SimpleLogicUIStandalone.executeVisualisation(RSLatchExample::createRSLatchExample);
-       }
-
-       @SuppressWarnings("unused") // for GUIWires being created
-       public static void createRSLatchExample(ViewModelModifiable model)
-       {
-               GUIManualSwitch rIn = new GUIManualSwitch(model);
-               rIn.moveTo(100, 100);
-               GUIManualSwitch sIn = new GUIManualSwitch(model);
-               sIn.moveTo(100, 200);
-
-               GUIOrGate or1 = new GUIOrGate(model, 1);
-               or1.moveTo(160, 102.5);
-               new GUIWire(model, rIn.getOutputPin(), or1.getPin("A"));
-
-               GUIOrGate or2 = new GUIOrGate(model, 1);
-               or2.moveTo(160, 192.5);
-               new GUIWire(model, sIn.getOutputPin(), or2.getPin("B"));
-
-               GUINotGate not1 = new GUINotGate(model, 1);
-               not1.moveTo(200, 107.5);
-               new GUIWire(model, or1.getPin("Y"), not1.getPin("A"));
-
-               GUINotGate not2 = new GUINotGate(model, 1);
-               not2.moveTo(200, 197.5);
-               new GUIWire(model, or2.getPin("Y"), not2.getPin("A"));
-
-               WireCrossPoint p1 = new WireCrossPoint(model, 1);
-               p1.moveCenterTo(250, 112.5);
-               new GUIWire(model, not1.getPin("Y"), p1);
-               new GUIWire(model, p1, or2.getPin("A"), new Point(250, 130), new Point(140, 185), new Point(140, 197.5));
-
-               WireCrossPoint p2 = new WireCrossPoint(model, 1);
-               p2.moveCenterTo(250, 202.5);
-               new GUIWire(model, not2.getPin("Y"), p2);
-               new GUIWire(model, p2, or1.getPin("B"), new Point(250, 185), new Point(140, 130), new Point(140, 117.5));
-
-               WireCrossPoint o1 = new WireCrossPoint(model, 1);
-               o1.moveCenterTo(270, 112.5);
-               new GUIWire(model, p1, o1);
-
-               WireCrossPoint o2 = new WireCrossPoint(model, 1);
-               o2.moveCenterTo(270, 202.5);
-               new GUIWire(model, p2, o2);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java
deleted file mode 100644 (file)
index 55402c2..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-package net.mograsim.logic.ui.model;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.function.Consumer;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ViewModel
-{
-       private final List<GUIComponent> components;
-       private final List<GUIComponent> componentsUnmodifiable;
-       private final List<GUIWire> wires;
-       private final List<GUIWire> wiresUnmodifiable;
-
-       private final List<Consumer<? super GUIComponent>> componentAddedListeners;
-       private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
-       private final List<Consumer<? super GUIWire>> wireAddedListeners;
-       private final List<Consumer<? super GUIWire>> wireRemovedListeners;
-       private final List<Runnable> redrawListeners;
-
-       private final Runnable redrawListenerForSubcomponents;
-
-       protected ViewModel()
-       {
-               components = new ArrayList<>();
-               componentsUnmodifiable = Collections.unmodifiableList(components);
-               wires = new ArrayList<>();
-               wiresUnmodifiable = Collections.unmodifiableList(wires);
-
-               componentAddedListeners = new ArrayList<>();
-               componentRemovedListeners = new ArrayList<>();
-               wireAddedListeners = new ArrayList<>();
-               wireRemovedListeners = new ArrayList<>();
-               redrawListeners = new ArrayList<>();
-
-               redrawListenerForSubcomponents = this::callRedrawListeners;
-       }
-
-       /**
-        * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
-        * code as it is automatically called in {@link GUIComponent}'s constructor.
-        */
-       protected void componentCreated(GUIComponent component)
-       {
-               if (components.contains(component))
-                       throw new IllegalStateException("Don't add the same component twice!");
-               components.add(component);
-               callComponentAddedListeners(component);
-               component.addRedrawListener(redrawListenerForSubcomponents);
-               callRedrawListeners();
-       }
-
-       /**
-        * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from
-        * application code as it is automatically called in {@link GUIComponent#destroy()}.
-        */
-       protected void componentDestroyed(GUIComponent component)
-       {
-               if (!components.contains(component))
-                       throw new IllegalStateException("Don't remove the same component twice!");
-               components.remove(component);
-               callComponentRemovedListeners(component);
-               component.removeRedrawListener(redrawListenerForSubcomponents);
-               callRedrawListeners();
-       }
-
-       /**
-        * Adds the given wire to the list of wires and calls all wireAddedListeners. Don't call this method from application code as it is
-        * automatically called in {@link GUIWire}'s constructor(s).
-        */
-       protected void wireCreated(GUIWire wire)
-       {
-               if (wires.contains(wire))
-                       throw new IllegalStateException("Don't add the same wire twice!");
-               wires.add(wire);
-               callWireAddedListeners(wire);
-               wire.addRedrawListener(redrawListenerForSubcomponents);
-               callRedrawListeners();
-       }
-
-       /**
-        * Removes the given wire from the list of wires and calls all wireRemovedListeners. Don't call this method from application code as it
-        * is automatically called in {@link GUIWire#destroy()}.
-        */
-       protected void wireDestroyed(GUIWire wire)
-       {
-               if (!wires.contains(wire))
-                       throw new IllegalStateException("Don't remove the same wire twice!");
-               wires.remove(wire);
-               callWireRemovedListeners(wire);
-               wire.removeRedrawListener(redrawListenerForSubcomponents);
-               callRedrawListeners();
-       }
-
-       public List<GUIComponent> getComponents()
-       {
-               return componentsUnmodifiable;
-       }
-
-       public List<GUIWire> getWires()
-       {
-               return wiresUnmodifiable;
-       }
-
-       // @formatter:off
-       public void addComponentAddedListener     (Consumer<? super GUIComponent> listener) {componentAddedListeners  .add   (listener);}
-       public void addComponentRemovedListener   (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add   (listener);}
-       public void addWireAddedListener          (Consumer<? super GUIWire     > listener) {wireAddedListeners       .add   (listener);}
-       public void addWireRemovedListener        (Consumer<? super GUIWire     > listener) {wireRemovedListeners     .add   (listener);}
-       public void addRedrawListener             (Runnable                       listener) {redrawListeners          .add   (listener);}
-
-       public void removeComponentAddedListener  (Consumer<? super GUIComponent> listener) {componentAddedListeners  .remove(listener);}
-       public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener) {componentRemovedListeners.remove(listener);}
-       public void removeWireAddedListener       (Consumer<? super GUIWire     > listener) {wireAddedListeners       .remove(listener);}
-       public void removeWireRemovedListener     (Consumer<? super GUIWire     > listener) {wireRemovedListeners     .remove(listener);}
-       public void removeRedrawListener          (Runnable                       listener) {redrawListeners          .remove(listener);}
-
-       private void callComponentAddedListeners  (GUIComponent c) {componentAddedListeners  .forEach(l -> l.accept(c));}
-       private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
-       private void callWireAddedListeners       (GUIWire w     ) {wireAddedListeners       .forEach(l -> l.accept(w));}
-       private void callWireRemovedListeners     (GUIWire w     ) {wireRemovedListeners     .forEach(l -> l.accept(w));}
-       private void callRedrawListeners          (              ) {redrawListeners          .forEach(l -> l.run(    ));}
-       // @formatter:on
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java
deleted file mode 100644 (file)
index 21863db..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.mograsim.logic.ui.model;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ViewModelModifiable extends ViewModel
-{
-       @Override
-       public void componentCreated(GUIComponent component)
-       {
-               super.componentCreated(component);
-       }
-
-       @Override
-       public void componentDestroyed(GUIComponent component)
-       {
-               super.componentDestroyed(component);
-       }
-
-       @Override
-       public void wireCreated(GUIWire wire)
-       {
-               super.wireCreated(wire);
-       }
-
-       @Override
-       public void wireDestroyed(GUIWire wire)
-       {
-               super.wireDestroyed(wire);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java
deleted file mode 100644 (file)
index 83e6d61..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-package net.mograsim.logic.ui.model.components;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-/**
- * The base class for all GUI components.<br>
- * A <code>GUIComponent</code> has a position and size. The size can only be modified by subclasses.<br>
- * 
- * @author Daniel Kirschten
- */
-public abstract class GUIComponent
-{
-       /**
-        * The model this component is a part of.
-        */
-       protected final ViewModelModifiable model;
-       private final Rectangle bounds;
-       /**
-        * The list of all pins of this component by name.
-        */
-       private final Map<String, Pin> pinsByName;
-       /**
-        * An unmodifiable view of {@link #pinsByName}.
-        */
-       protected final Map<String, Pin> pinsUnmodifiable;
-
-       private final List<Consumer<? super GUIComponent>> componentMovedListeners;
-       private final List<Consumer<? super GUIComponent>> componentResizedListeners;
-       private final List<Consumer<? super Pin>> pinAddedListeners;
-       private final List<Consumer<? super Pin>> pinRemovedListeners;
-       private final List<Runnable> redrawListeners;
-
-       private final Runnable redrawListenerForSubcomponents;
-       // creation and destruction
-
-       public GUIComponent(ViewModelModifiable model)
-       {
-               this.model = model;
-               this.bounds = new Rectangle(0, 0, 0, 0);
-               this.pinsByName = new HashMap<>();
-               this.pinsUnmodifiable = Collections.unmodifiableMap(pinsByName);
-
-               this.componentMovedListeners = new ArrayList<>();
-               this.componentResizedListeners = new ArrayList<>();
-               this.pinAddedListeners = new ArrayList<>();
-               this.pinRemovedListeners = new ArrayList<>();
-               this.redrawListeners = new ArrayList<>();
-
-               redrawListenerForSubcomponents = this::requestRedraw;
-
-               model.componentCreated(this);
-       }
-
-       /**
-        * Destroys this component. This method implicitly calls {@link ViewModelModifiable#componentDestroyed(GUIComponent)
-        * componentDestroyed()} for the model this component is a part of.
-        * 
-        * @author Daniel Kirschten
-        */
-       public void destroy()
-       {
-               pinsByName.values().forEach(p -> pinRemovedListeners.forEach(l -> l.accept(p)));
-               model.componentDestroyed(this);
-       }
-
-       // pins
-
-       /**
-        * Adds the given pin to this component and calls pinAddedListeners and redrawListeners.
-        * 
-        * @throws IllegalArgumentException if the pin doesn't belong to this component
-        * @throws IllegalArgumentException if there already is a pin with the given name
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void addPin(Pin pin)
-       {
-               if (pin.component != this)
-                       throw new IllegalArgumentException("Can't add a pin not belonging to this component!");
-               if (pinsByName.containsKey(pin.name))
-                       throw new IllegalArgumentException("Duplicate pin name: " + pin.name);
-               pinsByName.put(pin.name, pin);
-               callPinAddedListeners(pin);
-               pin.addRedrawListener(redrawListenerForSubcomponents);
-               requestRedraw();
-       }
-
-       /**
-        * Removes the given pin from this component and calls pinAddedListeners and redrawListeners.
-        * 
-        * @throws NullPointerException if there was no pin with this name
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void removePin(String name)
-       {
-               Pin pin = pinsByName.remove(name);
-               callPinRemovedListeners(pin);
-               pin.removeRedrawListener(redrawListenerForSubcomponents);
-               requestRedraw();
-       }
-
-       /**
-        * Returns a collection of pins of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Map<String, Pin> getPins()
-       {
-               return pinsUnmodifiable;
-       }
-
-       /**
-        * Returns the pin with the given name of this component.
-        * 
-        * @throws IllegalArgumentException if there is no pin with the given name
-        * 
-        * @author Daniel Kirschten
-        */
-       public Pin getPin(String name)
-       {
-               Pin pin = pinsByName.get(name);
-               if (pin == null)
-                       throw new IllegalArgumentException("No pin with the name " + name);
-               return pin;
-       }
-
-       // high-level access
-
-       /**
-        * Sets the given high-level state to the given value. <br>
-        * A high level state ID consists of parts separated by dots ('.').<br>
-        * The last part (the part after the last dot) is called "atomic high level state ID". The parts before that part are called
-        * "subcomponent ID"s.<br>
-        * If there is no dot in a high level state ID, the whole high level state ID is called atomic.<br>
-        * Note that subcomponent IDs don't have to correspond to actual subcomponents. For example, a RAM component may supply subcomponent IDs
-        * "c0000", "c0001" ... "cFFFF" without actually having a subcomponent for each cell. It also is allowed for an atomic high level state
-        * ID to be delegated to a subcomponent.
-        * 
-        * @author Daniel Kirschten
-        */
-       @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
-       public void setHighLevelState(String stateID, Object newState)
-       {
-               throw new IllegalArgumentException("No high level state with ID " + stateID);
-       }
-
-       /**
-        * Gets the current value of the given high-level state. <br>
-        * See {@link #setHighLevelState(String, Object)} for an explanation of high-level state IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       @SuppressWarnings("static-method") // this method is intended to be overridden
-       public Object getHighLevelState(String stateID)
-       {
-               throw new IllegalArgumentException("No high level state with ID " + stateID);
-       }
-
-       // "graphical" operations
-
-       /**
-        * Sets the position of this component and calls componentMovedListeners and redrawListeners.
-        * 
-        * @author Daniel Kirschten
-        */
-       public void moveTo(double x, double y)
-       {
-               bounds.x = x;
-               bounds.y = y;
-               callComponentMovedListeners();
-               requestRedraw();
-       }
-
-       /**
-        * Sets the size of this component and calls redrawListeners.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void setSize(double width, double height)
-       {
-               bounds.width = width;
-               bounds.height = height;
-               callComponentResizedListener();
-               requestRedraw();
-       }
-
-       /**
-        * Returns the bounds of this component. Is a bit slower than {@link #getPosX()}, {@link #getPosY()}, {@link #getWidth},
-        * {@link #getHeight}, because new objects are created.
-        * 
-        * @author Daniel Kirschten
-        */
-       public final Rectangle getBounds()
-       {
-               return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
-       }
-
-       /**
-        * Returns the x coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getPosX()
-       {
-               return bounds.x;
-       }
-
-       /**
-        * Returns the y coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getPosY()
-       {
-               return bounds.y;
-       }
-
-       /**
-        * Returns the (graphical) width of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getWidth()
-       {
-               return bounds.width;
-       }
-
-       /**
-        * Returns the height of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getHeight()
-       {
-               return bounds.height;
-       }
-
-       /**
-        * Called when this component is clicked. Absolute coordinates of the click are given. Returns true if this component consumed this
-        * click.
-        * 
-        * @author Daniel Kirschten
-        */
-       @SuppressWarnings({ "static-method", "unused" }) // this method is inteded to be overridden
-       public boolean clicked(double x, double y)
-       {
-               return false;
-       }
-
-       /**
-        * Render this component to the given gc, in absoulute coordinates.
-        * 
-        * @author Daniel Kirschten
-        */
-       public abstract void render(GeneralGC gc, Rectangle visibleRegion);
-
-       // serializing
-
-       @SuppressWarnings("static-method") // this method is intended to be overridden
-       public JsonElement getParams()
-       {
-               return JsonNull.INSTANCE;
-       }
-
-       // listeners
-
-       /**
-        * Calls redraw listeners.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void requestRedraw()
-       {
-               callRedrawListeners();
-       }
-
-       // @formatter:off
-       public void addComponentMovedListener      (Consumer<? super GUIComponent> listener) {componentMovedListeners  .add   (listener);}
-       public void addComponentResizedListener    (Consumer<? super GUIComponent> listener) {componentResizedListeners.add   (listener);}
-       public void addPinAddedListener            (Consumer<? super Pin         > listener) {pinAddedListeners        .add   (listener);}
-       public void addPinRemovedListener          (Consumer<? super Pin         > listener) {pinRemovedListeners      .add   (listener);}
-       public void addRedrawListener              (Runnable                       listener) {redrawListeners          .add   (listener);}
-
-       public void removeComponentMovedListener   (Consumer<? super GUIComponent> listener) {componentMovedListeners  .remove(listener);}
-       public void removeComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.remove(listener);}
-       public void removePinAddedListener         (Consumer<? super Pin         > listener) {pinAddedListeners        .remove(listener);}
-       public void removePinRemovedListener       (Consumer<? super Pin         > listener) {pinRemovedListeners      .remove(listener);}
-       public void removeRedrawListener           (Runnable                       listener) {redrawListeners          .remove(listener);}
-
-       private void callComponentMovedListeners (     ) {componentMovedListeners  .forEach(l -> l.accept(this));}
-       private void callComponentResizedListener(     ) {componentResizedListeners.forEach(l -> l.accept(this));}
-       private void callPinAddedListeners       (Pin p) {pinAddedListeners        .forEach(l -> l.accept(p   ));}
-       private void callPinRemovedListeners     (Pin p) {pinRemovedListeners      .forEach(l -> l.accept(p   ));}
-       private void callRedrawListeners         (     ) {redrawListeners          .forEach(l -> l.run(       ));}
-       // @formatter:on
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIAndGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIAndGate.java
deleted file mode 100644 (file)
index 0b1a497..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.AndGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAndGate extends SimpleRectangularGUIGate
-{
-       public GUIAndGate(ViewModelModifiable model, int logicWidth)
-       {
-               super(model, logicWidth, "&", false);
-               setInputCount(2);// TODO make variable
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new));
-               IndirectGUIComponentCreator.setComponentProvider(GUIAndGate.class.getCanonicalName(), (m, p) -> new GUIAndGate(m, p.getAsInt()));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIBitDisplay.java
deleted file mode 100644 (file)
index de755cd..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-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.core.LogicObserver;
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-public class GUIBitDisplay extends GUIComponent
-{
-       private static final double width = 20;
-       private static final double height = 15;
-       private static final double fontHeight = 5;
-
-       private final Pin inputPin;
-
-       private final LogicObserver logicObs;
-       private BitDisplay bitDisplay;
-
-       public GUIBitDisplay(ViewModelModifiable model)
-       {
-               super(model);
-               logicObs = (i) -> requestRedraw();
-
-               setSize(width, height);
-               addPin(this.inputPin = new Pin(this, "", 1, 0, height / 2));
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
-               if (foreground != null)
-                       gc.setForeground(foreground);
-               gc.drawRectangle(getBounds());
-               String label = bitDisplay == null ? BitVectorFormatter.formatAsString(null)
-                               : BitVectorFormatter.formatAsString(bitDisplay.getDisplayedValue());
-               Font oldFont = gc.getFont();
-               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
-               gc.setFont(labelFont);
-               Point textExtent = gc.textExtent(label);
-               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-               if (textColor != null)
-                       gc.setForeground(textColor);
-               gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
-               gc.setFont(oldFont);
-       }
-
-       public void setLogicModelBinding(BitDisplay bitDisplay)
-       {
-               if (this.bitDisplay != null)
-                       this.bitDisplay.deregisterObserver(logicObs);
-               this.bitDisplay = bitDisplay;
-               if (bitDisplay != null)
-                       bitDisplay.registerObserver(logicObs);
-       }
-
-       public boolean hasLogicModelBinding()
-       {
-               return bitDisplay != null;
-       }
-
-       public BitDisplay getBitDisplay()
-       {
-               return bitDisplay;
-       }
-
-       public Pin getInputPin()
-       {
-               return inputPin;
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter());
-               IndirectGUIComponentCreator.setComponentProvider(GUIBitDisplay.class.getCanonicalName(), (m, p) -> new GUIBitDisplay(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIManualSwitch.java
deleted file mode 100644 (file)
index 285cd16..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-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.core.LogicObservable;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-public class GUIManualSwitch extends GUIComponent
-{
-       private static final double width = 20;
-       private static final double height = 15;
-       private static final double fontHeight = 5;
-
-       private final Pin outputPin;
-
-       private final LogicObserver logicObs;
-       private ManualSwitch logicSwitch;
-       private ReadEnd end;
-
-       public GUIManualSwitch(ViewModelModifiable model)
-       {
-               super(model);
-               logicObs = (i) -> requestRedraw();
-
-               setSize(width, height);
-               addPin(this.outputPin = new Pin(this, "", 1, width, height / 2));
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               // TODO maybe draw switch state too?
-               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
-               if (foreground != null)
-                       gc.setForeground(foreground);
-               gc.drawRectangle(getBounds());
-               String label = BitVectorFormatter.formatValueAsString(end);
-               Font oldFont = gc.getFont();
-               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
-               gc.setFont(labelFont);
-               Point textExtent = gc.textExtent(label);
-               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-               if (textColor != null)
-                       gc.setForeground(textColor);
-               gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
-               gc.setFont(oldFont);
-       }
-
-       public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)
-       {
-               deregisterLogicObs(this.end);
-               deregisterLogicObs(this.logicSwitch);
-               this.logicSwitch = logicSwitch;
-               this.end = end;
-               registerLogicObs(end);
-               registerLogicObs(logicSwitch);
-       }
-
-       public boolean hasLogicModelBinding()
-       {
-               return logicSwitch != null;
-       }
-
-       @Override
-       public void setHighLevelState(String stateID, Object newState)
-       {
-               switch (stateID)
-               {
-               case "out":
-                       if (logicSwitch != null)
-                               logicSwitch.setToValueOf((Bit) newState);
-                       break;
-               default:
-                       super.setHighLevelState(stateID, newState);
-                       break;
-               }
-       }
-
-       @Override
-       public Object getHighLevelState(String stateID)
-       {
-               switch (stateID)
-               {
-               case "out":
-                       if (logicSwitch != null)
-                               return logicSwitch.getValue();
-                       return null;
-               default:
-                       return super.getHighLevelState(stateID);
-               }
-       }
-
-       private void registerLogicObs(LogicObservable observable)
-       {
-               if (observable != null)
-                       observable.registerObserver(logicObs);
-       }
-
-       private void deregisterLogicObs(LogicObservable observable)
-       {
-               if (observable != null)
-                       observable.deregisterObserver(logicObs);
-       }
-
-       @Override
-       public boolean clicked(double x, double y)
-       {
-               if (logicSwitch != null)
-                       logicSwitch.toggle();
-               return true;
-       }
-
-       public ManualSwitch getManualSwitch()
-       {
-               return logicSwitch;
-       }
-
-       public Pin getOutputPin()
-       {
-               return outputPin;
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter());
-               IndirectGUIComponentCreator.setComponentProvider(GUIManualSwitch.class.getName(), (m, p) -> new GUIManualSwitch(m));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINandGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINandGate.java
deleted file mode 100644 (file)
index f07b432..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.NandGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUINandGate extends SimpleRectangularGUIGate
-{
-       public GUINandGate(ViewModelModifiable model, int logicWidth)
-       {
-               super(model, logicWidth, "&", true);
-               setInputCount(2);// TODO make variable
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new));
-               IndirectGUIComponentCreator.setComponentProvider(GUINandGate.class.getCanonicalName(), (m, p) -> new GUINandGate(m, p.getAsInt()));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINotGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUINotGate.java
deleted file mode 100644 (file)
index f6ef024..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.NotGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUINotGate extends SimpleRectangularGUIGate
-{
-       public GUINotGate(ViewModelModifiable model, int logicWidth)
-       {
-               super(model, logicWidth, "1", true);
-               setInputCount(1);
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o)));
-               IndirectGUIComponentCreator.setComponentProvider(GUINotGate.class.getCanonicalName(), (m, p) -> new GUINotGate(m, p.getAsInt()));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIOrGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/GUIOrGate.java
deleted file mode 100644 (file)
index 50050e0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.OrGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIOrGate extends SimpleRectangularGUIGate
-{
-       public GUIOrGate(ViewModelModifiable model, int logicWidth)
-       {
-               super(model, logicWidth, "\u22651", false);// ">=1"
-               setInputCount(2);
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new));
-               IndirectGUIComponentCreator.setComponentProvider(GUIOrGate.class.getCanonicalName(), (m, p) -> new GUIOrGate(m, p.getAsInt()));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/SimpleRectangularGUIGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/SimpleRectangularGUIGate.java
deleted file mode 100644 (file)
index 7debf23..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-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.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.preferences.Preferences;
-
-public class SimpleRectangularGUIGate extends GUIComponent
-{
-       private static final double width = 20;
-       private static final double pinDistance = 10;
-       private static final double fontHeight = 5;
-       private static final double invertedCircleDiam = 3.5;
-
-       private final String label;
-       protected final int logicWidth;
-       private final boolean isInverted;
-       private final double rectWidth;
-
-       private MovablePin outputPin;
-       private final List<Pin> inputPins;
-
-       protected SimpleRectangularGUIGate(ViewModelModifiable model, int logicWidth, String label, boolean isInverted)
-       {
-               super(model);
-               this.label = label;
-               this.logicWidth = logicWidth;
-               this.isInverted = isInverted;
-               this.rectWidth = width - (isInverted ? invertedCircleDiam : 0);
-               this.outputPin = new MovablePin(this, "Y", logicWidth, width, 0);
-               addPin(outputPin);
-               this.inputPins = new ArrayList<>();
-               setInputCount(1);
-       }
-
-       protected void setInputCount(int inputCount)
-       {
-               int oldInputCount = inputPins.size();
-               setSize(width, inputCount * pinDistance);
-               if (oldInputCount > inputCount)
-                       while (inputPins.size() > inputCount)
-                               removePin(inputPins.remove(inputCount).name);
-               else if (oldInputCount < inputCount)
-                       for (int i = oldInputCount; i < inputCount; i++)
-                       {
-                               // TODO what for more than 24 input pins?
-                               Pin pin = new Pin(this, String.valueOf((char) ('A' + i)), logicWidth, 0, pinDistance / 2 + i * pinDistance);
-                               inputPins.add(pin);
-                               addPin(pin);
-                       }
-               outputPin.setRelPos(width, inputCount * pinDistance / 2);
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
-               if (foreground != null)
-                       gc.setForeground(foreground);
-               double height = (getPins().size() - 1) * pinDistance;
-               gc.drawRectangle(getPosX(), getPosY(), rectWidth, height);
-               if (isInverted)
-                       gc.drawOval(getPosX() + rectWidth, getPosY() + (height - invertedCircleDiam) / 2, invertedCircleDiam, invertedCircleDiam);
-               Font oldFont = gc.getFont();
-               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
-               gc.setFont(labelFont);
-               Point textExtent = gc.textExtent(label);
-               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-               if (textColor != null)
-                       gc.setForeground(textColor);
-               gc.drawText(label, getPosX() + (rectWidth - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
-               gc.setFont(oldFont);
-       }
-
-       // serializing
-
-       /**
-        * {@link SimpleRectangularGUIGate}s implementation returns a {@link JsonPrimitive} of type int containing the {@link #logicWidth} of
-        * this component.
-        * 
-        * @see GUIComponent#getParams()
-        */
-       @Override
-       public JsonElement getParams()
-       {
-               return new JsonPrimitive(logicWidth);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/TextComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/atomic/TextComponent.java
deleted file mode 100644 (file)
index d7255d3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.mograsim.logic.ui.model.components.atomic;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-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.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.NoLogicAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-//TODO clean size calculation mess
-public class TextComponent extends GUIComponent
-{
-       private final String text;
-
-       public TextComponent(ViewModelModifiable model, String text)
-       {
-               super(model);
-               this.text = text;
-               // If size is unset, it defaults to 0, which could prohibit this component from being rendered, which would prohibit the size being
-               // set to a better guess
-               setSize(1, 1);
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               Point textExtent = gc.textExtent(text);
-               setSize(textExtent.x, textExtent.y);
-
-               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-               if (textColor != null)
-                       gc.setForeground(textColor);
-               gc.drawText(text, getPosX(), getPosY(), true);
-       }
-
-       // serializing
-
-       @Override
-       public JsonElement getParams()
-       {
-               return new JsonPrimitive(text);
-       }
-
-       static
-       {
-               ViewLogicModelAdapter.addComponentAdapter(new NoLogicAdapter<>(TextComponent.class));
-               IndirectGUIComponentCreator.setComponentProvider(TextComponent.class.getName(), (m, p) -> new TextComponent(m, p.getAsString()));
-       }
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java
deleted file mode 100644 (file)
index d7ac643..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-package net.mograsim.logic.ui.model.components.submodels;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.function.Function;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonObject;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
-import net.mograsim.preferences.Preferences;
-
-public class SimpleRectangularSubmodelComponent extends SubmodelComponent
-{
-       private static final double width = 35;
-       private static final double pinDistance = 10;
-       private static final double pinNameMargin = .5;
-       private static final double labelFontHeight = 5;
-       private static final double pinNameFontHeight = 3.5;
-
-       private final String label;
-       protected final int logicWidth;
-
-       private final List<String> inputPinNames;
-       private final List<String> inputPinNamesUnmodifiable;
-       private final List<String> outputPinNames;
-       private final List<String> outputPinNamesUnmodifiable;
-
-       private Renderer symbolRenderer;
-
-       public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
-       {
-               super(model);
-               this.label = label;
-               this.logicWidth = logicWidth;
-               this.inputPinNames = new ArrayList<>();
-               this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames);
-               this.outputPinNames = new ArrayList<>();
-               this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames);
-
-               SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
-               rendererParams.centerText = label;
-               rendererParams.centerTextHeight = labelFontHeight;
-               rendererParams.horizontalComponentCenter = getWidth() / 2;
-               rendererParams.pinLabelHeight = pinNameFontHeight;
-               rendererParams.pinLabelMargin = pinNameMargin;
-               symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
-       }
-
-       protected void setInputPins(String... pinNames)
-       {
-               setIOPins(0, inputPinNames, outputPinNames, pinNames);
-       }
-
-       protected void setOutputPins(String... pinNames)
-       {
-               setIOPins(width, outputPinNames, inputPinNames, pinNames);
-       }
-
-       private void setIOPins(double relX, List<String> pinNamesListThisSide, List<String> pinNamesListOtherSide, String... newPinNames)
-       {
-               int inputCount = newPinNames.length;
-               List<String> newPinNamesList = Arrays.asList(newPinNames);
-               if (new HashSet<>(newPinNamesList).size() != inputCount)
-                       throw new IllegalArgumentException("Pin names contain duplicates");
-               for (String pinName : newPinNamesList)
-                       if (pinNamesListOtherSide.contains(pinName))
-                               throw new IllegalArgumentException("Can't add pin. There is a pin on the other side with the same name: " + pinName);
-               super.setSize(width, Math.max(inputCount, pinNamesListOtherSide.size()) * pinDistance);
-               for (int i = 0; i < inputCount; i++)
-               {
-                       String pinName = newPinNames[i];
-                       int oldPinIndex = pinNamesListThisSide.indexOf(pinName);
-                       if (oldPinIndex == -1)
-                               super.addSubmodelInterface(new MovablePin(this, pinName, logicWidth, relX, pinDistance / 2 + i * pinDistance));
-                       else
-                               getSupermodelMovablePin(pinName).setRelPos(relX, pinDistance / 2 + i * pinDistance);
-               }
-               for (String pinName : pinNamesListThisSide)
-                       if (!newPinNamesList.contains(pinName))
-                               super.removeSubmodelInterface(pinName);
-               pinNamesListThisSide.clear();
-               pinNamesListThisSide.addAll(newPinNamesList);
-       }
-
-       public List<String> getInputPinNames()
-       {
-               return inputPinNamesUnmodifiable;
-       }
-
-       public List<String> getOutputPinNames()
-       {
-               return outputPinNamesUnmodifiable;
-       }
-
-       @Override
-       protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
-       {
-               symbolRenderer.render(gc, visibleRegion);
-       }
-
-       @Override
-       protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
-       {
-               Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
-               if (foreground != null)
-                       gc.setForeground(foreground);
-               gc.drawRectangle(getBounds());
-       }
-
-       // serializing
-
-       @Override
-       public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
-       {
-               SubmodelComponentParams params = super.calculateParams(getIdentifier);
-               JsonObject symbolRendererParams = new JsonObject();
-               symbolRendererParams.addProperty("centerText", label);
-               symbolRendererParams.addProperty("horizontalComponentCenter", getWidth() / 2);
-               symbolRendererParams.addProperty("centerTextHeight", labelFontHeight);
-               symbolRendererParams.addProperty("pinLabelHeight", pinNameFontHeight);
-               symbolRendererParams.addProperty("pinLabelMargin", pinNameMargin);
-               params.symbolRendererSnippetID = "SimpleRectangularLikeSymbolRenderer";
-               params.symbolRendererParams = symbolRendererParams;
-               return params;
-       }
-
-       @Override
-       protected Pin addSubmodelInterface(MovablePin supermodelPin)
-       {
-               throw new UnsupportedOperationException(
-                               "Can't add submodel interfaces to a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
-       }
-
-       @Override
-       protected void removeSubmodelInterface(String name)
-       {
-               throw new UnsupportedOperationException(
-                               "Can't remove submodel interfaces of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
-       }
-
-       @Override
-       protected void setSize(double width, double height)
-       {
-               throw new UnsupportedOperationException(
-                               "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelComponent.java
deleted file mode 100644 (file)
index 49c2b5c..0000000
+++ /dev/null
@@ -1,593 +0,0 @@
-package net.mograsim.logic.ui.model.components.submodels;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.function.Function;
-
-import net.haspamelodica.swt.helper.gcs.GCConfig;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.gcs.TranslatedGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.LogicUIRenderer;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.InterfacePinParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams.InnerPinParams;
-
-/**
- * A {@link GUIComponent} consisting of another model. A <code>SubmodelComponent</code> can have so-called "interface pins" connecting the
- * inner and outer models.
- */
-public abstract class SubmodelComponent extends GUIComponent
-{
-       /**
-        * A modifiable view of {@link #submodel}.
-        */
-       protected final ViewModelModifiable submodelModifiable;
-       /**
-        * The model this {@link SubmodelComponent} consists of.
-        */
-       public final ViewModel submodel;
-       /**
-        * The list of all submodel interface pins of this {@link SubmodelComponent} on the submodel side.
-        */
-       private final Map<String, MovablePin> submodelPins;
-       /**
-        * An unmodifiable view of {@link #submodelPins}.
-        */
-       private final Map<String, MovablePin> submodelMovablePinsUnmodifiable;
-       /**
-        * An unmodifiable view of {@link #submodelPins} where pins are not movable.
-        */
-       private final Map<String, Pin> submodelUnmovablePinsUnmodifiable;
-       /**
-        * The list of all submodel interface pins of this {@link SubmodelComponent} on the supermodel side.
-        */
-       private final Map<String, MovablePin> supermodelPins;
-       /**
-        * An unmodifiable view of {@link #supermodelPins}.
-        */
-       private final Map<String, MovablePin> supermodelMovablePinsUnmodifiable;
-       /**
-        * An unmodifiable view of {@link #supermodelPins} where pins are not movable.
-        */
-       private final Map<String, Pin> supermodelUnmovablePinsUnmodifiable;
-       /**
-        * A pseudo-component containing all submodel interface pins on the submodel side.
-        */
-       private final SubmodelInterface submodelInterface;
-
-       /**
-        * The list of all high level state IDs this component supports without delegating to subcomponents.
-        */
-       private final Set<String> highLevelAtomicStates;
-       /**
-        * A map of high level state subcomponent IDs to the {@link GUIComponent} high level state access requests are delegated to.
-        */
-       private final Map<String, GUIComponent> subcomponentsByHighLevelStateSubcomponentID;
-
-       /**
-        * The factor by which the submodel is scaled when rendering.
-        */
-       private double submodelScale;
-       /**
-        * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel starts to
-        * be visible.
-        */
-       private double maxVisibleRegionFillRatioForAlpha0;
-       /**
-        * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is fully
-        * visible.
-        */
-       private double minVisibleRegionFillRatioForAlpha1;
-       /**
-        * The renderer used for rendering the submodel.
-        */
-       private final LogicUIRenderer renderer;
-
-       // creation and destruction
-
-       public SubmodelComponent(ViewModelModifiable model)
-       {
-               super(model);
-               this.submodelModifiable = new ViewModelModifiable();
-               this.submodel = submodelModifiable;
-               this.submodelPins = new HashMap<>();
-               this.submodelMovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
-               this.submodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
-               this.supermodelPins = new HashMap<>();
-               this.supermodelMovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
-               this.supermodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
-               this.submodelInterface = new SubmodelInterface(submodelModifiable);
-
-               this.highLevelAtomicStates = new HashSet<>();
-               this.subcomponentsByHighLevelStateSubcomponentID = new HashMap<>();
-
-               this.submodelScale = 1;
-               this.maxVisibleRegionFillRatioForAlpha0 = 0.4;
-               this.minVisibleRegionFillRatioForAlpha1 = 0.8;
-               this.renderer = new LogicUIRenderer(submodelModifiable);
-
-               submodelModifiable.addRedrawListener(this::requestRedraw);
-       }
-
-       // pins
-
-       /**
-        * Adds a new submodel interface pin.
-        * 
-        * @param supermodelPin the submodel interface pin on the supermodel side
-        * 
-        * @return the submodel interface pin on the submodel side
-        * 
-        * @author Daniel Kirschten
-        */
-       protected Pin addSubmodelInterface(MovablePin supermodelPin)
-       {
-               super.addPin(supermodelPin);// do this first to be fail-fast if the supermodel does not belong to this component
-
-               String name = supermodelPin.name;
-               MovablePin submodelPin = new MovablePin(submodelInterface, name, supermodelPin.logicWidth, supermodelPin.getRelX() / submodelScale,
-                               supermodelPin.getRelY() / submodelScale);
-
-               submodelPin.addPinMovedListener(p ->
-               {
-                       double newRelX = p.getRelX() * submodelScale;
-                       double newRelY = p.getRelY() * submodelScale;
-                       if (supermodelPin.getRelX() != newRelX || supermodelPin.getRelY() != newRelY)
-                               supermodelPin.setRelPos(newRelX, newRelY);
-               });
-               supermodelPin.addPinMovedListener(p ->
-               {
-                       double newRelX = p.getRelX() / submodelScale;
-                       double newRelY = p.getRelY() / submodelScale;
-                       if (submodelPin.getRelX() != newRelX || submodelPin.getRelY() != newRelY)
-                               submodelPin.setRelPos(newRelX, newRelY);
-               });
-
-               submodelInterface.addPin(submodelPin);
-
-               submodelPins.put(name, submodelPin);
-               supermodelPins.put(name, supermodelPin);
-
-               // no need to call requestRedraw() because addPin() will request a redraw
-               return submodelPin;
-       }
-
-       /**
-        * Removes a submodel interface pin.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void removeSubmodelInterface(String name)
-       {
-               super.removePin(name);// do this first to be fail-fast if this component doesn't have a pin with the given name
-               Pin submodelPin = submodelPins.remove(name);
-               submodelInterface.removePin(submodelPin.name);
-               supermodelPins.remove(name);
-
-               // no need to call requestRedraw() because removePin() will request a redraw
-       }
-
-       /**
-        * Returns a collection of submodel interface pins on the submodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Map<String, Pin> getSubmodelPins()
-       {
-               return submodelUnmovablePinsUnmodifiable;
-       }
-
-       /**
-        * Returns the submodel interface pin with the given name on the submodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Pin getSubmodelPin(String name)
-       {
-               return getSubmodelMovablePin(name);
-       }
-
-       /**
-        * Returns a collection of movable submodel interface pins on the submodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected Map<String, MovablePin> getSubmodelMovablePins()
-       {
-               return submodelMovablePinsUnmodifiable;
-       }
-
-       /**
-        * Returns the movable submodel interface pin with the given name on the submodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected MovablePin getSubmodelMovablePin(String name)
-       {
-               return submodelPins.get(name);
-       }
-
-       /**
-        * Returns a collection of submodel interface pins on the supermodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Map<String, Pin> getSupermodelPins()
-       {
-               return supermodelUnmovablePinsUnmodifiable;
-       }
-
-       /**
-        * Returns the submodel interface pin with the given name on the supermodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Pin getSupermodelPin(String name)
-       {
-               return getSupermodelMovablePin(name);
-       }
-
-       /**
-        * Returns a collection of movable submodel interface pins on the supermodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected Map<String, MovablePin> getSupermodelMovablePins()
-       {
-               return supermodelMovablePinsUnmodifiable;
-       }
-
-       /**
-        * Returns the movable submodel interface pin with the given name on the supermodel side of this component.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected MovablePin getSupermodelMovablePin(String name)
-       {
-               return supermodelPins.get(name);
-       }
-
-       // high-level access
-
-       /**
-        * Adds the given subcomponent ID to the set of allowed subcomponent IDs and links the given {@link GUIComponent} as the delegate target
-        * for this subcomponent ID. <br>
-        * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
-        * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called. <br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void addHighLevelStateSubcomponentID(String subcomponentID, GUIComponent subcomponent)
-       {
-               checkHighLevelStateIDPart(subcomponentID);
-               subcomponentsByHighLevelStateSubcomponentID.put(subcomponentID, subcomponent);
-       }
-
-       /**
-        * Removes the given subcomponent ID from the set of allowed subcomponent IDs. <br>
-        * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
-        * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called.<br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void removeHighLevelStateSubcomponentID(String subcomponentID)
-       {
-               subcomponentsByHighLevelStateSubcomponentID.remove(subcomponentID);
-       }
-
-       /**
-        * Adds the given atomic state ID to the set of allowed atomic state IDs. <br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void addAtomicHighLevelStateID(String stateID)
-       {
-               checkHighLevelStateIDPart(stateID);
-               highLevelAtomicStates.add(stateID);
-       }
-
-       /**
-        * Removes the given atomic state ID from the set of allowed atomic state IDs. <br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void removeAtomicHighLevelStateID(String stateID)
-       {
-               highLevelAtomicStates.remove(stateID);
-       }
-
-       @Override
-       public final void setHighLevelState(String stateID, Object newState)
-       {
-               int indexOfDot = stateID.indexOf('.');
-               if (indexOfDot == -1)
-                       if (highLevelAtomicStates.contains(stateID))
-                               setAtomicHighLevelState(stateID, newState);
-                       else
-                               super.setHighLevelState(stateID, newState);
-               else
-                       setSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1), newState);
-       }
-
-       /**
-        * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
-        * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
-        * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to.<br>
-        * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
-        * don't affect whether this method will be called.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
-       {
-               GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
-               if (subcomponent != null)
-                       subcomponent.setHighLevelState(subcomponentHighLevelStateID, newState);
-               else
-                       super.setHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID, newState);
-       }
-
-       /**
-        * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is atomic and in the set of allowed atomic
-        * state IDs. <br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
-       protected void setAtomicHighLevelState(String stateID, Object newState)
-       {
-               throw new IllegalStateException("Unknown high level state ID: " + stateID);
-       }
-
-       @Override
-       public final Object getHighLevelState(String stateID)
-       {
-               int indexOfDot = stateID.indexOf('.');
-               if (indexOfDot == -1)
-               {
-                       if (highLevelAtomicStates.contains(stateID))
-                               return getAtomicHighLevelState(stateID);
-                       return super.getHighLevelState(stateID);
-               }
-               return getSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1));
-       }
-
-       /**
-        * This method is called in {@link #getHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
-        * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
-        * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to. <br>
-        * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
-        * don't affect whether this method will be called.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
-       {
-               GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
-               if (subcomponent != null)
-                       return subcomponent.getHighLevelState(subcomponentHighLevelStateID);
-               return super.getHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID);
-       }
-
-       /**
-        * This method is called in {@link SubmodelComponent#getHighLevelState(String)} when the state ID is in the set of allowed atomic state
-        * IDs. <br>
-        * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
-        * 
-        * @author Daniel Kirschten
-        */
-       @SuppressWarnings("static-method") // this method is intended to be overridden
-       protected Object getAtomicHighLevelState(String stateID)
-       {
-               throw new IllegalStateException("Unknown high level state ID: " + stateID);
-       }
-
-       private static void checkHighLevelStateIDPart(String stateIDPart)
-       {
-               if (stateIDPart.indexOf('.') != -1)
-                       throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
-
-       }
-
-       // "graphical" operations
-
-       /**
-        * Sets the factor by which the submodel is scaled when rendering and calls redrawListeners. Note that the submodel interface pins will
-        * stay at their position relative to the supermodel, which means they will move relative to the submodel.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void setSubmodelScale(double submodelScale)
-       {
-               this.submodelScale = submodelScale;
-
-               for (Entry<String, MovablePin> e : supermodelPins.entrySet())
-                       getSubmodelMovablePin(e.getKey()).setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale);
-
-               requestRedraw();// needed if there is no submodel interface pin
-       }
-
-       /**
-        * Returns the current factor by which the submodel is scaled when rendering.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected double getSubmodelScale()
-       {
-               return submodelScale;
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               GCConfig conf = new GCConfig(gc);
-               TranslatedGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true);
-               conf.reset(tgc);
-               double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height);
-               double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1);
-               alphaFactor = Math.max(0, Math.min(1, alphaFactor));
-               // we need to take the old alpha into account to support nested submodules better.
-               int oldAlpha = gc.getAlpha();
-               int submodelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)));
-               int labelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))));
-               if (submodelAlpha != 0)
-               {
-                       gc.setAlpha(submodelAlpha);
-                       renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale));
-               }
-               if (labelAlpha != 0)
-               {
-                       gc.setAlpha(labelAlpha);
-                       renderSymbol(gc, visibleRegion);
-               }
-               conf.reset(gc);
-               // draw the outline after all other operations to make interface pins look better
-               renderOutline(gc, visibleRegion);
-       }
-
-       // TODO make this a path
-       /**
-        * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected abstract void renderOutline(GeneralGC gc, Rectangle visibleRegion);
-
-       /**
-        * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected abstract void renderSymbol(GeneralGC gc, Rectangle visibleRegion);
-
-       private static double map(double val, double valMin, double valMax, double mapMin, double mapMax)
-       {
-               return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin);
-       }
-
-       @Override
-       public boolean clicked(double x, double y)
-       {
-               double scaledX = (x - getPosX()) / submodelScale;
-               double scaledY = (y - getPosY()) / submodelScale;
-               for (GUIComponent component : submodel.getComponents())
-                       if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
-                               return true;
-               return false;
-       }
-
-       // serializing
-
-       // TODO move the methods below to serializing classes
-
-       public SubmodelComponentParams calculateParams()
-       {
-               return calculateParams(c -> "class:" + c.getClass().getCanonicalName());
-       }
-
-       /**
-        * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}.
-        */
-       public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
-       {
-               SubmodelComponentParams params = new SubmodelComponentParams();
-               params.submodel = calculateSubmodelParams(getIdentifier);
-
-               params.width = getWidth();
-               params.height = getHeight();
-
-               InterfacePinParams[] iPins = new InterfacePinParams[getPins().size()];
-               int i = 0;
-               for (Pin p : getPins().values())
-               {
-                       InterfacePinParams iPinParams = new InterfacePinParams();
-                       iPins[i] = iPinParams;
-                       iPinParams.location = p.getRelPos();
-                       iPinParams.name = p.name;
-                       iPinParams.logicWidth = p.logicWidth;
-                       i++;
-               }
-               params.interfacePins = iPins;
-               return params;
-       }
-
-       private SubmodelParameters calculateSubmodelParams(Function<GUIComponent, String> getIdentifier)
-       {
-               SubmodelParameters params = new SubmodelParameters();
-               params.innerScale = getSubmodelScale();
-
-               List<GUIComponent> compList = submodel.getComponents();
-               Iterator<GUIComponent> componentIt = compList.iterator();
-               componentIt.next(); // Skip inner SubmodelInterface
-               InnerComponentParams[] comps = new InnerComponentParams[compList.size() - 1];
-               int i = 0;
-               while (componentIt.hasNext())
-               {
-                       GUIComponent component = componentIt.next();
-                       InnerComponentParams inner = new InnerComponentParams();
-                       comps[i] = inner;
-                       inner.pos = new Point(component.getPosX(), component.getPosY());
-                       inner.id = getIdentifier.apply(component);
-                       inner.params = component.getParams();
-                       i++;
-               }
-               params.subComps = comps;
-
-               List<GUIWire> wireList = submodel.getWires();
-               InnerWireParams wires[] = new InnerWireParams[wireList.size()];
-               i = 0;
-               for (GUIWire wire : wireList)
-               {
-                       InnerWireParams inner = new InnerWireParams();
-                       wires[i] = inner;
-                       InnerPinParams pin1Params = new InnerPinParams(), pin2Params = new InnerPinParams();
-
-                       pin1Params.pinName = wire.getPin1().name;
-                       pin1Params.compId = compList.indexOf(wire.getPin1().component);
-                       pin2Params.pinName = wire.getPin2().name;
-                       pin2Params.compId = compList.indexOf(wire.getPin2().component);
-                       inner.pin1 = pin1Params;
-                       inner.pin2 = pin2Params;
-                       inner.path = wire.getPath();
-                       i++;
-               }
-               params.innerWires = wires;
-               return params;
-       }
-
-       // operations no longer supported
-
-       @Override
-       protected void addPin(Pin pin)
-       {
-               throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead");
-       }
-
-       @Override
-       protected void removePin(String name)
-       {
-               throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead");
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelInterface.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SubmodelInterface.java
deleted file mode 100644 (file)
index 21b9e13..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.mograsim.logic.ui.model.components.submodels;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class SubmodelInterface extends GUIComponent
-{
-       public SubmodelInterface(ViewModelModifiable model)
-       {
-               super(model);
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {// nothing to do here
-       }
-
-       /**
-        * {@inheritDoc}<br>
-        * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
-        * from a SubmodelInterface.<br>
-        * 
-        * @see GUIComponent#removePin(Pin)
-        * 
-        * @author Daniel Kirschten
-        */
-       @Override
-       public void addPin(Pin pin)
-       {
-               super.addPin(pin);
-       }
-
-       /**
-        * {@inheritDoc}<br>
-        * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
-        * from a SubmodelInterface.<br>
-        * 
-        * @see GUIComponent#removePin(Pin)
-        * 
-        * @author Daniel Kirschten
-        */
-       @Override
-       protected void removePin(String name)
-       {
-               super.removePin(name);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/ConnectionPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/ConnectionPoint.java
deleted file mode 100644 (file)
index ed10286..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.mograsim.logic.ui.model.wires;
-
-public interface ConnectionPoint
-{
-       /**
-        * Retrieves the {@link Pin}, that is used by the {@link GUIWire} to connect to.
-        * 
-        * @return the {@link Pin} for the wire to connect to.
-        * 
-        * @author Christian Femers
-        */
-       Pin getPin();
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java
deleted file mode 100644 (file)
index 2e36c61..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-package net.mograsim.logic.ui.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.ui.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
-{
-       
-       private final Set<PathChangedListener> pathChangedListeners;
-
-       /**
-        * 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}.<br>
-        * Special cases: <code>null</code> 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.
-        */
-       protected double[] effectivePath;
-
-       private final List<Runnable> redrawListeners;
-
-       /**
-        * 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, ConnectionPoint pin1, ConnectionPoint pin2)
-       {
-               this(model, pin1, pin2, (Point[]) null);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} without automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, ConnectionPoint pin1, ConnectionPoint pin2, Point... path)
-       {
-               this(model, pin1.getPin(), pin2.getPin(), path);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} without automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       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)}.<br>
-        * Special cases: <code>null</code> 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.<br>
-        * 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();
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java
deleted file mode 100644 (file)
index f697a22..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.mograsim.logic.ui.model.wires;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-
-/**
- * Exactly like {@link Pin}, but {@link #setRelPos(double, double) setRelPos(...)} is public.
- * 
- * @author Daniel Kirschten
- */
-public class MovablePin extends Pin
-{
-       public MovablePin(GUIComponent component, String name, int logicWidth, double relX, double relY)
-       {
-               super(component, name, logicWidth, relX, relY);
-       }
-
-       @Override
-       public void setRelPos(double relX, double relY)
-       {
-               super.setRelPos(relX, relY);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java
deleted file mode 100644 (file)
index b761c0e..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-package net.mograsim.logic.ui.model.wires;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Consumer;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-
-/**
- * A connection interface between a GUIComponent and the rest of a ViewModel. Pins usually are created by {@link GUIComponent}s themselves.
- * <br>
- * A pin has a name identifying it. Pin names are unique for a {@link GUIComponent}: Every pin of a {@link GUIComponent} has a different
- * name, but different {@link GUIComponent}s can have pins with the same name.
- * 
- * @author Daniel Kirschten
- */
-public class Pin implements ConnectionPoint
-{
-       /**
-        * The {@link GUIComponent} this pin belongs to
-        */
-       public final GUIComponent component;
-       /**
-        * The name identifying this pin. Is unique for a {@link GUIComponent}.
-        */
-       public final String name;
-       /**
-        * The logical width of this pin. Denotes how many bits this pin consists of.
-        */
-       public final int logicWidth;
-
-       /**
-        * The X position of this pin, relative to its component's location.
-        */
-       protected double relX;
-       /**
-        * The Y position of this pin, relative to its component's location.
-        */
-       protected double relY;
-
-       private final List<Consumer<? super Pin>> pinMovedListeners;
-       private final List<Runnable> redrawListeners;
-
-       // creation and destruction
-
-       /**
-        * Creates a new pin. Usually it is not needed to call this constructor manually, as {@link GUIComponent}s create their pins themselves.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY)
-       {
-               this.component = component;
-               this.name = name;
-               this.logicWidth = logicWidth;
-               this.relX = relX;
-               this.relY = relY;
-
-               this.pinMovedListeners = new ArrayList<>();
-               this.redrawListeners = new ArrayList<>();
-
-               component.addComponentMovedListener(c -> callPinMovedListeners());
-       }
-
-       // "graphical" operations
-
-       /**
-        * Returns the X position of this pin relative to the position of its component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getRelX()
-       {
-               return relX;
-       }
-
-       /**
-        * Returns the Y position of this pin relative to the position of its component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public double getRelY()
-       {
-               return relY;
-       }
-
-       /**
-        * Returns the position of this pin relative to the position of its component.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Point getRelPos()
-       {
-               return new Point(relX, relY);
-       }
-
-       /**
-        * Returns the absolute position of this pin.
-        * 
-        * @author Daniel Kirschten
-        */
-       public Point getPos()
-       {
-               return new Point(relX + component.getPosX(), relY + component.getPosY());
-       }
-
-       /**
-        * Sets the position of this pin relative to the position of its component.
-        * 
-        * @author Daniel Kirschten
-        */
-       protected void setRelPos(double relX, double relY)
-       {
-               this.relX = relX;
-               this.relY = relY;
-               callPinMovedListeners();
-               callRedrawListeners();
-       }
-
-       // listeners
-
-       // @formatter:off
-       public void addPinMovedListener   (Consumer<? super Pin> listener){pinMovedListeners.add   (listener);}
-       public void addRedrawListener     (Runnable              listener){redrawListeners  .add   (listener);}
-
-       public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
-       public void removeRedrawListener  (Runnable              listener){redrawListeners  .remove(listener);}
-
-       private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
-       private void callRedrawListeners  () {redrawListeners  .forEach(l -> l.run   (    ));}
-       // @formatter:on
-
-       @Override
-       public String toString()
-       {
-               return "Pin [" + name + ", point=" + getPos() + "]";
-       }
-
-       @Override
-       public Pin getPin()
-       {
-               return this;
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java
deleted file mode 100644 (file)
index 1a3f893..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-package net.mograsim.logic.ui.model.wires;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-
-/**
- * A {@link GUIComponent} with only one pin. Is used to create wires connecting more than two pins. <br>
- * Example: There are three pins <code>P1</code>, <code>P2</code>, <code>P3</code> that need to be connected. Solution: Create a
- * WireCrossPoint (<code>WCP</code>) and create the GUIWires <code>P1</code>-<code>WCP</code>, <code>P2</code>-<code>WCP</code>,
- * <code>P3</code>-<code>WCP</code>.<br>
- * Cross points are drawn as circles. The pin of cross points is in the center of this circle.
- * 
- * @author Daniel Kirschten
- */
-public class WireCrossPoint extends GUIComponent implements ConnectionPoint
-{
-       private static final int CIRCLE_RADIUS = 1;
-       private static final int CIRCLE_DIAM = CIRCLE_RADIUS * 2;
-
-       /**
-        * The (single) pin of this cross point.
-        */
-       private final Pin pin;
-
-       /**
-        * A {@link LogicObserver} calling {@link #requestRedraw()}.
-        */
-       private final LogicObserver logicObs;
-       /**
-        * The {@link ReadEnd} currently bound to this cross point.
-        */
-       private ReadEnd end;
-
-       // creation and destruction
-
-       public WireCrossPoint(ViewModelModifiable model, int logicWidth)
-       {
-               super(model);
-               logicObs = (i) -> requestRedraw();
-
-               setSize(CIRCLE_DIAM, CIRCLE_DIAM);
-               addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));
-       }
-
-       // pins
-
-       @Override
-       public Pin getPin()
-       {
-               return pin;
-       }
-
-       // "graphical" operations
-
-       /**
-        * Moves the center (and therefore the pin) of this {@link WireCrossPoint} to the given location.
-        * 
-        * @author Daniel Kirschten
-        */
-       public void moveCenterTo(double x, double y)
-       {
-               moveTo(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS);
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
-               if (wireColor != null)
-                       gc.setBackground(ColorManager.current().toColor(wireColor));
-               gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
-       }
-
-       // logic model binding
-
-       /**
-        * Binds this {@link WireCrossPoint} to the given {@link ReadEnd}: The color of this {@link WireCrossPoint} 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.<br>
-        * 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 WireCrossPoint} has a logic model binding or not.
-        */
-       public boolean hasLogicModelBinding()
-       {
-               return end != null;
-       }
-
-       // serializing
-
-       @Override
-       public JsonElement getParams()
-       {
-               return new JsonPrimitive(pin.logicWidth);
-       }
-
-       static
-       {
-               IndirectGUIComponentCreator.setComponentProvider(WireCrossPoint.class.getCanonicalName(),
-                               (m, p) -> new WireCrossPoint(m, p.getAsInt()));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/LogicModelParameters.java
deleted file mode 100644 (file)
index d75cb1b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-package net.mograsim.logic.ui.modeladapter;
-
-public class LogicModelParameters
-{
-       public int wireTravelTime;
-       public int gateProcessTime;
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java
deleted file mode 100644 (file)
index 88e7c1b..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-package net.mograsim.logic.ui.modeladapter;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelInterface;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter;
-
-public class ViewLogicModelAdapter
-{
-       private final static Map<Class<? extends GUIComponent>, ComponentAdapter<? extends GUIComponent>> componentAdapters = new HashMap<>();
-
-       public static void addComponentAdapter(ComponentAdapter<? extends GUIComponent> componentAdapter)
-       {
-               componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter);
-       }
-
-       public static Timeline convert(ViewModel viewModel, LogicModelParameters params)
-       {
-               // TODO replace Timeline with LogicModel as soon as it exists
-               Timeline timeline = new Timeline(10);
-
-               convert(viewModel, params, timeline, Map.of());
-
-               return timeline;
-       }
-
-       private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map<Pin, Wire> externalWires)
-       {
-               Map<Pin, Wire> logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline);
-               Map<Pin, Wire> logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin);
-
-               for (GUIComponent guiComp : viewModel.getComponents())
-               {
-                       if (guiComp instanceof SubmodelComponent)
-                       {
-                               SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp;
-                               Map<String, Pin> supermodelPins = guiCompCasted.getSupermodelPins();
-                               Map<Pin, Wire> externalWiresForSubmodel = supermodelPins.entrySet().stream()
-                                               .collect(Collectors.toMap(e -> guiCompCasted.getSubmodelPin(e.getKey()), e -> logicWiresPerPin.get(e.getValue())));
-                               convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel);
-                       } else if (guiComp instanceof WireCrossPoint)
-                       {
-                               WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp;
-                               guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd());
-                       } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces
-                               createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass()));
-               }
-       }
-
-       private static Set<Pin> getAllPins(ViewModel viewModel)
-       {
-               return viewModel.getComponents().stream().flatMap(component -> component.getPins().values().stream()).collect(Collectors.toSet());
-       }
-
-       private static Map<Pin, Wire> convertWires(Set<Pin> allPins, List<GUIWire> wires, Map<Pin, Wire> externalWires,
-                       LogicModelParameters params, Timeline timeline)
-       {
-               Map<Pin, Set<Pin>> connectedPinGroups = getConnectedPinGroups(allPins, wires);
-               Map<Pin, Wire> logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups, externalWires);
-               setGUIWiresLogicModelBinding(wires, logicWiresPerPin);
-               return logicWiresPerPin;
-       }
-
-       private static Map<Pin, Wire> createLogicWires(LogicModelParameters params, Timeline timeline, Map<Pin, Set<Pin>> connectedPinGroups,
-                       Map<Pin, Wire> externalWires)
-       {
-               Map<Pin, Wire> logicWiresPerPin = new HashMap<>();
-               Map<Set<Pin>, Wire> logicWiresPerPinGroup = new HashMap<>();
-               for (Entry<Pin, Set<Pin>> e : connectedPinGroups.entrySet())
-                       logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), set ->
-                       {
-                               Wire externalWire = null;
-                               for (Pin p : set)
-                               {
-                                       Wire externalWireCandidate = externalWires.get(p);
-                                       if (externalWireCandidate != null)
-                                               if (externalWire == null)
-                                                       externalWire = externalWireCandidate;
-                                               else if (externalWire.length == externalWireCandidate.length)
-                                                       Wire.fuse(externalWire, externalWireCandidate);
-                                               else
-                                                       throw new IllegalArgumentException(
-                                                                       "Two pins to external wires with different logicWidths can't be connected directly");
-                               }
-                               return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire;
-                       }));
-               return logicWiresPerPin;
-       }
-
-       private static void setGUIWiresLogicModelBinding(List<GUIWire> wires, Map<Pin, Wire> logicWiresPerPin)
-       {
-               Map<Wire, ReadEnd> guiWireSharedReadEnd = logicWiresPerPin.values().stream().distinct()
-                               .collect(Collectors.toMap(Function.identity(), Wire::createReadOnlyEnd));
-               for (GUIWire guiWire : wires)
-                       guiWire.setLogicModelBinding(guiWireSharedReadEnd.get(logicWiresPerPin.get(guiWire.getPin1())));
-       }
-
-       private static Map<Pin, Set<Pin>> getConnectedPinGroups(Set<Pin> allPins, List<GUIWire> wires)
-       {
-               Map<Pin, Set<Pin>> connectedPinsPerPin = new HashMap<>();
-
-               for (Pin p : allPins)
-               {
-                       HashSet<Pin> connectedPins = new HashSet<>();
-                       connectedPins.add(p);
-                       connectedPinsPerPin.put(p, connectedPins);
-               }
-
-               wires.forEach(wire ->
-               {
-                       Pin pin1 = wire.getPin1();
-                       Pin pin2 = wire.getPin2();
-
-                       Set<Pin> pin1ConnectedPins = connectedPinsPerPin.get(pin1);
-                       Set<Pin> pin2ConnectedPins = connectedPinsPerPin.get(pin2);
-
-                       pin1ConnectedPins.addAll(pin2ConnectedPins);
-                       pin1ConnectedPins.add(pin1);
-                       pin1ConnectedPins.add(pin2);
-
-                       pin2ConnectedPins.forEach(pin -> connectedPinsPerPin.put(pin, pin1ConnectedPins));
-               });
-               return connectedPinsPerPin;
-       }
-
-       @SuppressWarnings("unchecked")
-       private static <G extends GUIComponent> void createAndLinkComponent(Timeline timeline, LogicModelParameters params,
-                       GUIComponent guiComponent, Map<Pin, Wire> logicWiresPerPin, ComponentAdapter<G> adapter)
-       {
-               if (adapter == null)
-                       throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass());
-               adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin);
-       }
-
-       private ViewLogicModelAdapter()
-       {
-               throw new UnsupportedOperationException("No ViewLogicModelConverter instances");
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/BitDisplayAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/BitDisplayAdapter.java
deleted file mode 100644 (file)
index 33d4ac1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class BitDisplayAdapter implements ComponentAdapter<GUIBitDisplay>
-{
-       @Override
-       public Class<GUIBitDisplay> getSupportedClass()
-       {
-               return GUIBitDisplay.class;
-       }
-
-       @Override
-       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent,
-                       Map<Pin, Wire> logicWiresPerPin)
-       {
-               ReadEnd end = logicWiresPerPin.get(guiComponent.getInputPin()).createReadOnlyEnd();
-               BitDisplay bitDisplay = new BitDisplay(timeline, end);
-               guiComponent.setLogicModelBinding(bitDisplay);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java
deleted file mode 100644 (file)
index 85cff71..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public interface ComponentAdapter<G extends GUIComponent>
-{
-       public Class<G> getSupportedClass();
-
-       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin);
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java
deleted file mode 100644 (file)
index d623dab..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class ManualSwitchAdapter implements ComponentAdapter<GUIManualSwitch>
-{
-       @Override
-       public Class<GUIManualSwitch> getSupportedClass()
-       {
-               return GUIManualSwitch.class;
-       }
-
-       @Override
-       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent,
-                       Map<Pin, Wire> logicWiresPerPin)
-       {
-               ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
-               ManualSwitch manualSwitch = new ManualSwitch(timeline, end);
-               guiComponent.setLogicModelBinding(manualSwitch, end);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java
deleted file mode 100644 (file)
index d07da2e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-/**
- * For GUIComponents that do not have any simulation logic behaviour
- *
- * @author Christian Femers
- */
-public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>
-{
-       private final Class<T> guiComponentClass;
-
-       public NoLogicAdapter(Class<T> guiComponentClass)
-       {
-               this.guiComponentClass = guiComponentClass;
-       }
-
-       @Override
-       public Class<T> getSupportedClass()
-       {
-               return guiComponentClass;
-       }
-
-       @Override
-       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)
-       {
-               // do nothing
-       }
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java
deleted file mode 100644 (file)
index 0460906..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.Component;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-import net.mograsim.logic.ui.model.components.atomic.SimpleRectangularGUIGate;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
-{
-       private final Class<G> supportedClass;
-       private final ComponentConstructor constructor;
-
-       public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
-       {
-               this.supportedClass = supportedClass;
-               this.constructor = constructor;
-       }
-
-       @Override
-       public Class<G> getSupportedClass()
-       {
-               return supportedClass;
-       }
-
-       @Override
-       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
-       {
-               ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getPin("Y")).createReadWriteEnd();
-
-               // TODO can we do this prettier?
-               int inputPinCount = guiComponent.getPins().size() - 1;
-               ReadEnd[] ins = new ReadEnd[inputPinCount];
-               for (int i = 0; i < inputPinCount; i++)
-                       ins[i] = logicWiresPerPin.get(guiComponent.getPin(String.valueOf((char) ('A' + i)))).createReadOnlyEnd();
-
-               constructor.newComponent(timeline, params.gateProcessTime, out, ins);
-       }
-
-       public static interface ComponentConstructor
-       {
-               public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
-       }
-
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java
deleted file mode 100644 (file)
index d6bdbb4..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRenderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRenderer;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class CodeSnippetSupplier<S>
-{
-       // public static members
-       public static final CodeSnippetSupplier<Renderer> symbolRendererProviderSupplier;
-       public static final CodeSnippetSupplier<Renderer> outlineRendererProviderSupplier;
-
-       static
-       {
-               symbolRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
-               outlineRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
-       }
-
-       // per-instance members
-
-       private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
-       private final Map<String, SnippetSupplier<?, S>> snippetProvidersForClassNames = new HashMap<>();
-       private final SnippetSupplier<?, S> defaultSnippetProvider;
-
-       private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetProvider)
-       {
-               this.defaultSnippetProvider = defaultSnippetProvider;
-       }
-
-       public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
-       {
-               standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
-       }
-
-       public void setSnippetProvider(String id, SnippetSupplier<?, S> snippetProvider)
-       {
-               snippetProvidersForClassNames.put(id, snippetProvider);
-       }
-
-       // TODO report errors
-       public SnippetSupplier<?, S> getSnippetProvider(String id)
-       {
-               if (id != null)
-               {
-                       String snippetProviderClassName;
-                       if (id.startsWith("class:"))
-                               snippetProviderClassName = id.substring(6);
-                       else
-                               snippetProviderClassName = standardSnippetIDClassNames.get(id);
-                       if (snippetProviderClassName != null)
-                       {
-                               tryLoadSnippetClass(snippetProviderClassName);
-                               SnippetSupplier<?, S> snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
-                               if (snippetProvider != null)
-                                       return snippetProvider;
-                       }
-               }
-               System.err.println("Couldn't load snippet " + id + "; using default");
-               return defaultSnippetProvider;
-       }
-
-       // static helpers
-
-       static
-       {
-               try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json"))
-               {
-                       if (s == null)
-                               throw new IOException("Resource not found");
-                       SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class);
-                       tmp.standardOutlineRendererProviders.forEach(outlineRendererProviderSupplier::addStandardSnippetID);
-                       tmp.standardSymbolRendererProviders.forEach(symbolRendererProviderSupplier::addStandardSnippetID);
-               }
-               catch (Exception e)
-               {
-                       System.err.println("Failed to initialize standard snippet ID mapping: ");
-                       e.printStackTrace();
-               }
-       }
-
-       private static class SnippetIDClassNames
-       {
-               public Map<String, String> standardOutlineRendererProviders;
-               public Map<String, String> standardSymbolRendererProviders;
-       }
-
-       private static void tryLoadSnippetClass(String snippetClassName)
-       {
-               tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n");
-       }
-
-       public static void tryInvokeStaticInitializer(String className, String errorMessageFormat)
-       {
-               try
-               {
-                       Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader());
-               }
-               catch (ClassNotFoundException e)
-               {
-                       System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage());
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/DeserializedSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/DeserializedSubmodelComponent.java
deleted file mode 100644 (file)
index fbcf080..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.mograsim.logic.ui.serializing;
-
-import java.util.Map;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-
-public class DeserializedSubmodelComponent extends SubmodelComponent
-{
-       public Renderer outlineRenderer;
-       public Renderer symbolRenderer;
-
-       public DeserializedSubmodelComponent(ViewModelModifiable model)
-       {
-               super(model);
-       }
-
-       @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 double getSubmodelScale()
-       {
-               return super.getSubmodelScale();
-       }
-
-       @Override
-       public Map<String, MovablePin> getSubmodelMovablePins()
-       {
-               return super.getSubmodelMovablePins();
-       }
-
-       @Override
-       public void setSize(double width, double height)
-       {
-               super.setSize(width, height);
-       }
-
-       @Override
-       public Pin addSubmodelInterface(MovablePin supermodelPin)
-       {
-               return super.addSubmodelInterface(supermodelPin);
-       }
-
-       @Override
-       public void removeSubmodelInterface(String name)
-       {
-               super.removeSubmodelInterface(name);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/IndirectGUIComponentCreator.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/IndirectGUIComponentCreator.java
deleted file mode 100644 (file)
index 5e25c8b..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-package net.mograsim.logic.ui.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 net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class IndirectGUIComponentCreator
-{
-       private static final Map<String, String> standardComponentIDs = new HashMap<>();
-
-       private static final Map<String, ComponentProvider> componentProviders = new HashMap<>();
-
-       static
-       {
-               try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardComponentIDMapping.json"))
-               {
-                       if (s == null)
-                               throw new IOException("Resource not found");
-                       Map<String, String> 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 Collection<String> getStandardComponentIDs()
-       {
-               return standardComponentIDs.keySet();
-       }
-
-       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 void setComponentProvider(String className, ComponentProvider componentProvider)
-       {
-               componentProviders.put(className, componentProvider);
-       }
-
-       public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params)
-       {
-               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);
-                               ComponentProvider componentProvider = componentProviders.get(className);
-                               if (componentProvider != null)
-                                       return componentProvider.create(model, params);
-                       } 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));
-               }
-               throw new RuntimeException("Could not get component provider for ID " + id);
-       }
-
-       private static void tryLoadComponentClass(String componentClassName)
-       {
-               CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n");
-       }
-
-       public static interface ComponentProvider
-       {
-               public GUIComponent create(ViewModelModifiable model, JsonElement params);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentDeserializer.java
deleted file mode 100644 (file)
index 20961a7..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.InterfacePinParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
-
-/**
- * Creates {@link SubmodelComponent}s from {@link SubmodelComponentParams}
- */
-public final class SubmodelComponentDeserializer
-{
-       /**
-        * Creates a {@link SubmodelComponent} from the {@link SubmodelComponentParams}, specified at the given path. The returned
-        * SubmodelComponent can also be e.g. a {@link SimpleRectangularSubmodelComponent}, depending on what the
-        * {@link SubmodelComponentParams} describe.
-        * 
-        * @param path The path of the file describing the {@link SubmodelComponentParams}, which define the new {@link SubmodelComponent}
-        * @return A new SubmodelComponent, as described in the file located at the given path
-        */
-       public static SubmodelComponent create(ViewModelModifiable model, String path)
-       {
-               try
-               {
-                       SubmodelComponentParams params = SubmodelComponentParams.readJson(path);
-                       SubmodelComponent ret = create(model, params);
-                       return ret;
-               }
-               catch (IOException e)
-               {
-                       System.err.println("Failed to construct GUICustomComponent. Parameters were not found.");
-                       e.printStackTrace();
-               }
-               return new SimpleRectangularSubmodelComponent(model, 0, "ERROR");
-       }
-
-       /**
-        * Creates a {@link SubmodelComponent} from the specified {@link SubmodelComponentParams}. The returned SubmodelComponent can also be
-        * e.g. a {@link SimpleRectangularSubmodelComponent}, depending on what the {@link SubmodelComponentParams} describe.
-        * 
-        * @param params The parameters describing the {@link SubmodelComponent}
-        * 
-        * @return A new SubmodelComponent, as described by the {@link SubmodelComponentParams}
-        */
-       public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params)
-       {
-               DeserializedSubmodelComponent comp = createSubmodelComponent(model, params);
-               initSubmodel(comp, params.submodel);
-               return comp;
-       }
-
-       private static DeserializedSubmodelComponent createSubmodelComponent(ViewModelModifiable model, SubmodelComponentParams params)
-       {
-               DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model);
-               comp.setSubmodelScale(params.submodel.innerScale);
-               comp.setOutlineRenderer(CodeSnippetSupplier.outlineRendererProviderSupplier.getSnippetProvider(params.outlineRendererSnippetID)
-                               .create(comp, params.outlineRendererParams));
-               comp.setSymbolRenderer(CodeSnippetSupplier.symbolRendererProviderSupplier.getSnippetProvider(params.symbolRendererSnippetID)
-                               .create(comp, params.symbolRendererParams));
-               // TODO high level states
-               comp.setSize(params.width, params.height);
-               for (InterfacePinParams iPinParams : params.interfacePins)
-                       comp.addSubmodelInterface(
-                                       new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y));
-               return comp;
-       }
-
-       @SuppressWarnings("unused")
-       private static void initSubmodel(DeserializedSubmodelComponent comp, SubmodelParameters params)
-       {
-               GUIComponent[] components = new GUIComponent[params.subComps.length];
-               for (int i = 0; i < components.length; i++)
-               {
-                       InnerComponentParams cParams = params.subComps[i];
-                       String path = cParams.id;
-                       components[i] = IndirectGUIComponentCreator.createComponent(comp.getSubmodelModifiable(), cParams.id, cParams.params);
-                       components[i].moveTo(cParams.pos.x, cParams.pos.y);
-               }
-
-               for (int i = 0; i < params.innerWires.length; i++)
-               {
-                       InnerWireParams innerWire = params.innerWires[i];
-                       new GUIWire(comp.getSubmodelModifiable(),
-                                       comp.getSubmodelModifiable().getComponents().get(innerWire.pin1.compId).getPin(innerWire.pin1.pinName),
-                                       comp.getSubmodelModifiable().getComponents().get(innerWire.pin2.compId).getPin(innerWire.pin2.pinName), innerWire.path);
-               }
-       }
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentParams.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/SubmodelComponentParams.java
deleted file mode 100644 (file)
index e2a0e48..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-
-import com.google.gson.JsonElement;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-/**
- * This class contains all the information necessary to create a new {@link SubmodelComponent}
- */
-public class SubmodelComponentParams
-{
-       // basic stuff
-       public double width, height;
-       public InterfacePinParams[] interfacePins;
-       public SubmodelParameters submodel;
-
-       // functionality that needs to be expressed in Java code
-       public String outlineRendererSnippetID;
-       public JsonElement outlineRendererParams;
-
-       public String symbolRendererSnippetID;
-       public JsonElement symbolRendererParams;
-
-       public static class InterfacePinParams
-       {
-               public Point location;
-               public String name;
-               public int logicWidth;
-       }
-
-       public static class SubmodelParameters
-       {
-               public double innerScale;
-               public InnerComponentParams[] subComps;
-               public InnerWireParams[] innerWires;
-
-               public static class InnerComponentParams
-               {
-                       public Point pos;
-                       public String id;
-                       public JsonElement params;
-               }
-
-               public static class InnerWireParams
-               {
-                       public InnerPinParams pin1, pin2;
-                       public Point[] path;
-
-                       public static class InnerPinParams
-                       {
-                               public int compId;
-                               public String pinName;
-                       }
-               }
-       }
-
-       public static SubmodelComponentParams readJson(String path) throws IOException
-       {
-               return JsonHandler.readJson(path, SubmodelComponentParams.class);
-       }
-
-       /**
-        * Writes this {@link SubmodelComponentParams} object into a file in json format. The correct file extension is important! Check
-        * {@link SubmodelComponentParams}.fileExtension
-        */
-       public void writeJson(String path)
-       {
-               try
-               {
-                       JsonHandler.writeJson(this, path);
-               }
-               catch (IOException e)
-               {
-                       System.err.println("Failed to write SubComponentParams to file");
-                       e.printStackTrace();
-               }
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java
deleted file mode 100644 (file)
index bc0f393..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public interface Renderer
-{
-       public void render(GeneralGC gc, Rectangle visibleRegion);
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java
deleted file mode 100644 (file)
index 3adb9e8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets;
-
-import java.util.function.BiFunction;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-
-public interface SnippetSupplier<P, S>
-{
-       public Class<P> getParamClass();
-
-       public S create(SubmodelComponent component, P params);
-
-       public default S create(SubmodelComponent component, JsonElement params)
-       {
-               return create(component, new Gson().fromJson(params, getParamClass()));
-       }
-
-       public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
-       {
-               return new SnippetSupplier<>()
-               {
-                       @Override
-                       public Class<P> getParamClass()
-                       {
-                               return paramClass;
-                       }
-
-                       @Override
-                       public S create(SubmodelComponent component, P params)
-                       {
-                               return supplier.apply(component, params);
-                       }
-               };
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java
deleted file mode 100644 (file)
index 8fe41c6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.outlinerenderers;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultOutlineRenderer implements Renderer
-{
-       private final GUIComponent component;
-
-       public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
-       {
-               this.component = component;
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
-               if (fg != null)
-                       gc.setForeground(ColorManager.current().toColor(fg));
-               gc.drawRectangle(component.getBounds());
-       }
-
-       static
-       {
-               CodeSnippetSupplier.outlineRendererProviderSupplier.setSnippetProvider(DefaultOutlineRenderer.class.getCanonicalName(),
-                               SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java
deleted file mode 100644 (file)
index 2309f14..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-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.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.
- * 
- * @author Daniel Kirschten
- */
-public class CenteredTextSymbolRenderer implements Renderer
-{
-       private final GUIComponent component;
-       private final CenteredTextParams params;
-
-       public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params)
-       {
-               this.component = component;
-               this.params = params;
-
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               Font oldFont = gc.getFont();
-               gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle()));
-               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
-               if (fg != null)
-                       gc.setForeground(ColorManager.current().toColor(fg));
-               Point idSize = gc.textExtent(params.text);
-               Rectangle bounds = component.getBounds();
-               gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
-               gc.setFont(oldFont);
-       }
-
-       public static class CenteredTextParams
-       {
-               public String text;
-               public double fontHeight;
-       }
-
-       static
-       {
-               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRenderer.class.getCanonicalName(),
-                               SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java
deleted file mode 100644 (file)
index 4600531..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-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.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultSymbolRenderer implements Renderer
-{
-       private static final String id = "<Symbol\nunknown>";
-
-       private final GUIComponent component;
-
-       public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
-       {
-               this.component = component;
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
-               if (fg != null)
-                       gc.setForeground(ColorManager.current().toColor(fg));
-               Point idSize = gc.textExtent(id);
-               Rectangle bounds = component.getBounds();
-               gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
-       }
-
-       static
-       {
-               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(DefaultSymbolRenderer.class.getCanonicalName(),
-                               SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java
deleted file mode 100644 (file)
index 515c9c4..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import java.util.Map.Entry;
-
-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.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
- * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
- * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
- * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.
- * 
- * @author Daniel Kirschten
- */
-public class SimpleRectangularLikeSymbolRenderer implements Renderer
-{
-       private final GUIComponent component;
-       private final SimpleRectangularLikeParams params;
-
-       public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params)
-       {
-               this.component = component;
-               this.params = params;
-       }
-
-       @Override
-       public void render(GeneralGC gc, Rectangle visibleRegion)
-       {
-               double posX = component.getPosX();
-               double posY = component.getPosY();
-               double width = component.getWidth();
-               double height = component.getHeight();
-
-               Font oldFont = gc.getFont();
-               gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle()));
-               Point textExtent = gc.textExtent(params.centerText);
-               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-               if (textColor != null)
-                       gc.setForeground(textColor);
-               gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
-               gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle()));
-               for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
-               {
-                       String pinName = pinEntry.getKey();
-                       Pin pin = pinEntry.getValue();
-                       double pinX = pin.getRelX();
-                       double pinY = posY + pin.getRelY();
-                       textExtent = gc.textExtent(pinName);
-                       gc.drawText(pinName,
-                                       posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin),
-                                       pinY - textExtent.y / 2, true);
-               }
-               gc.setFont(oldFont);
-       }
-
-       public static class SimpleRectangularLikeParams
-       {
-               public String centerText;
-               public double centerTextHeight;
-               public double horizontalComponentCenter;
-               public double pinLabelHeight;
-               public double pinLabelMargin;
-       }
-
-       static
-       {
-               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(),
-                               SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new));
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardComponentIDMapping.json b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardComponentIDMapping.json
deleted file mode 100644 (file)
index 366f9c2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-mograsim version: 0.1.3
-{
-  "GUIAm2901": "file:components/am2901/GUIAm2901.json",
-  "GUIAm2901ALUFuncDecode": "file:components/am2901/GUIAm2901ALUFuncDecode.json",
-  "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
-  "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
-  "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
-  "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
-  "GUIAm2901QReg": "file:components/am2901/GUIAm2901QReg.json",
-  "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
-  "GUIAndGate": "class:net.mograsim.logic.ui.model.components.atomic.GUIAndGate",
-  "GUINandGate": "class:net.mograsim.logic.ui.model.components.atomic.GUINandGate",
-  "GUIOrGate": "class:net.mograsim.logic.ui.model.components.atomic.GUIOrGate",
-  "GUI_rsLatch": "file:components/GUI_rsLatch.json",
-  "GUIand": "file:components/GUIand.json",
-  "GUIand41": "file:components/GUIand41.json",
-  "GUIandor414": "file:components/GUIandor414.json",
-  "GUIdemux2": "file:components/GUIdemux2.json",
-  "GUIdff": "file:components/GUIdff.json",
-  "GUIdlatch": "file:components/GUIdlatch.json",
-  "GUIdlatch4": "file:components/GUIdlatch4.json",
-  "GUIfulladder": "file:components/GUIfulladder.json",
-  "GUIhalfadder": "file:components/GUIhalfadder.json",
-  "GUImux1": "file:components/GUImux1.json",
-  "GUImux1_4": "file:components/GUImux1_4.json",
-  "GUInand3": "file:components/GUInand3.json",
-  "GUInot4": "file:components/GUInot4.json",
-  "GUIor4": "file:components/GUIor4.json",
-  "GUIor_4": "file:components/GUIor_4.json",
-  "GUIram2": "file:components/GUIram2.json",
-  "GUIram4": "file:components/GUIram4.json",
-  "GUIsel2_4": "file:components/GUIsel2_4.json",
-  "GUIsel3_4": "file:components/GUIsel3_4.json",
-  "GUIxor": "file:components/GUIxor.json",
-  "WireCrossPoint": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint"
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json
deleted file mode 100644 (file)
index 7cdc9f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-mograsim version: 0.1.3
-{
-  "standardOutlineRendererProviders": {},
-  "standardSymbolRendererProviders": {
-    "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
-    "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/JsonHandler.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/JsonHandler.java
deleted file mode 100644 (file)
index df48266..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-package net.mograsim.logic.ui.util;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.stream.Collectors;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-public class JsonHandler
-{
-       private static Gson parser = new GsonBuilder().setPrettyPrinting().create();
-
-       public static <T> T readJson(String path, Class<T> type) throws IOException
-       {
-               try (FileInputStream jsonStream = new FileInputStream(path))
-               {
-                       return readJson(jsonStream, type);
-               }
-       }
-
-       /**
-        * @param input The Stream is closed after being read
-        */
-       public static <T> T readJson(InputStream input, Class<T> type) throws IOException
-       {
-               try (InputStreamReader reader = new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader))
-               {
-                       return fromJson(bf.lines().collect(Collectors.joining("\n")), type);
-               }
-       }
-
-       public static <T> T fromJson(String src, Class<T> type)
-       {
-               // TODO actually parse and compare version
-               String rawJson = src.lines().dropWhile(s -> s.length() == 0 || s.charAt(0) != '{').collect(Collectors.joining());
-               return parser.fromJson(rawJson, type);
-       }
-
-       public static void writeJson(Object o, String path) throws IOException
-       {
-               try (FileWriter writer = new FileWriter(path))
-               {
-                       writer.write(toJson(o));
-               }
-       }
-
-       public static String toJson(Object o)
-       {
-               return String.format("mograsim version: %s\n%s", Version.jsonCompVersion.toString(), parser.toJson(o));
-       }
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java
deleted file mode 100644 (file)
index 61252ea..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-package net.mograsim.logic.ui.util;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.ConnectionPoint;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ModellingTool
-{
-       private ViewModelModifiable model;
-
-       ModellingTool(ViewModelModifiable model)
-       {
-               this.model = model;
-       }
-
-       public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)
-       {
-               return connect(a.getPin(pinA), b.getPin(pinB));
-       }
-
-       public GUIWire connect(ConnectionPoint a, GUIComponent b, String pinB)
-       {
-               return connect(a, b.getPin(pinB));
-       }
-
-       public GUIWire connect(ConnectionPoint a, ConnectionPoint b)
-       {
-               return new GUIWire(model, a, b);
-       }
-
-       public static ModellingTool createFor(ViewModelModifiable model)
-       {
-               return new ModellingTool(model);
-       }
-}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/Version.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/Version.java
deleted file mode 100644 (file)
index aa84568..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.mograsim.logic.ui.util;
-
-public final class Version
-{
-       public final static Version jsonCompVersion = new Version(0, 1, 3);
-       public final int major, minor, patch;
-
-       public Version(int major, int minor, int patch)
-       {
-               super();
-               this.major = major;
-               this.minor = minor;
-               this.patch = patch;
-       }
-
-       public int[] getVersionNumbers()
-       {
-               return new int[] { major, minor, patch };
-       }
-
-       @Override
-       public String toString()
-       {
-               return major + "." + minor + "." + patch;
-       }
-
-       @Override
-       public int hashCode()
-       {
-               final int prime = 31;
-               int result = 1;
-               result = prime * result + major;
-               result = prime * result + minor;
-               result = prime * result + patch;
-               return result;
-       }
-
-       @Override
-       public boolean equals(Object obj)
-       {
-               if (this == obj)
-                       return true;
-               if (!(obj instanceof Version))
-                       return false;
-               Version other = (Version) obj;
-               if (major != other.major)
-                       return false;
-               if (minor != other.minor)
-                       return false;
-               if (patch != other.patch)
-                       return false;
-               return true;
-       }
-
-       public boolean is(int major)
-       {
-               return major != this.major;
-       }
-
-       public boolean is(int major, int minor)
-       {
-               return is(major) && this.minor == minor;
-       }
-
-       public boolean is(int major, int minor, int patch)
-       {
-               return is(major, minor) && this.patch == patch;
-       }
-}
\ No newline at end of file
index b125d7e..fa50b3b 100644 (file)
@@ -7,7 +7,6 @@ Export-Package: net.mograsim.plugin;uses:="org.eclipse.ui.themes,org.eclipse.swt
  net.mograsim.plugin.asm,
  net.mograsim.plugin.asm.editor,
  net.mograsim.plugin.asm.editor.rules,
- net.mograsim.plugin.asm.model,
  net.mograsim.plugin.nature,
  net.mograsim.plugin.views
 Require-Bundle: org.eclipse.core.runtime,
@@ -20,8 +19,8 @@ Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.e4.ui.di,
  org.eclipse.e4.ui.model.workbench,
  org.eclipse.ui.themes;bundle-version="1.2.400",
- net.mograsim.logic.ui;bundle-version="0.1.0";visibility:=reexport,
- net.mograsim.logic.ui.am2900;bundle-version="0.1.0";visibility:=reexport,
+ net.mograsim.logic.model;bundle-version="0.1.0";visibility:=reexport,
+ net.mograsim.logic.model.am2900;bundle-version="0.1.0";visibility:=reexport,
  javax.annotation;bundle-version="1.0.0",
  net.mograsim.preferences;bundle-version="0.1.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
index d76cd59..03cdbb4 100644 (file)
@@ -7,16 +7,16 @@ import org.eclipse.ui.themes.IThemePreview;
 
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
 import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.LogicExecuter;
-import net.mograsim.logic.ui.LogicUICanvas;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIOrGate;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.LogicExecuter;
+import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.GUIOrGate;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
 import net.mograsim.preferences.Preferences;
 
 public class SimulationPreview implements IThemePreview
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmElement.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmElement.java
deleted file mode 100644 (file)
index 832984f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-public interface AsmElement
-{
-       // only marker at the moment
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmInstruction.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmInstruction.java
deleted file mode 100644 (file)
index 1591e21..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmInstruction implements AsmElement
-{
-       private final AsmOperation operation;
-       private final AsmOperands operands;
-
-       public AsmInstruction(AsmOperation operation, AsmOperands operands)
-       {
-               this.operation = Objects.requireNonNull(operation);
-               this.operands = Objects.requireNonNull(operands);
-       }
-
-       @Override
-       public int hashCode()
-       {
-               return Objects.hash(operands, operation);
-       }
-
-       @Override
-       public boolean equals(Object obj)
-       {
-               if (this == obj)
-                       return true;
-               if (!(obj instanceof AsmInstruction))
-                       return false;
-               AsmInstruction other = (AsmInstruction) obj;
-               return Objects.equals(operands, other.operands) && Objects.equals(operation, other.operation);
-       }
-
-       @Override
-       public String toString()
-       {
-               return String.format("%s %s", operation, operands).trim();
-       }
-
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmLabel.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmLabel.java
deleted file mode 100644 (file)
index eb25f53..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmLabel implements AsmElement
-{
-       private final String name;
-       private AsmInstruction inst;
-
-       public AsmLabel(String name)
-       {
-               this.name = Objects.requireNonNull(name);
-       }
-
-       public String getName()
-       {
-               return name;
-       }
-
-       public void setInst(AsmInstruction inst)
-       {
-               if (inst != null)
-                       throw new IllegalStateException("Instrution already set for " + name);
-               this.inst = inst;
-       }
-
-       @Override
-       public String toString()
-       {
-               return name + ":";
-       }
-
-       @Override
-       public int hashCode()
-       {
-               return Objects.hash(inst, name);
-       }
-
-       @Override
-       public boolean equals(Object obj)
-       {
-               if (this == obj)
-                       return true;
-               if (!(obj instanceof AsmLabel))
-                       return false;
-               AsmLabel other = (AsmLabel) obj;
-               return Objects.equals(inst, other.inst) && Objects.equals(name, other.name);
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperand.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperand.java
deleted file mode 100644 (file)
index 5c3a202..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-public interface AsmOperand
-{
-
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperands.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperands.java
deleted file mode 100644 (file)
index 8e5b475..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-public final class AsmOperands
-{
-       private final List<AsmOperand> operands;
-
-       public AsmOperands(List<AsmOperand> operands)
-       {
-               this.operands = Objects.requireNonNull(operands);
-       }
-
-       public List<AsmOperand> getOperands()
-       {
-               return operands;
-       }
-
-       @Override
-       public int hashCode()
-       {
-               return operands.hashCode();
-       }
-
-       @Override
-       public boolean equals(Object obj)
-       {
-               if (this == obj)
-                       return true;
-               if (!(obj instanceof AsmOperands))
-                       return false;
-               AsmOperands other = (AsmOperands) obj;
-               return operands.equals(other.operands);
-       }
-
-       @Override
-       public String toString()
-       {
-               return operands.stream().map(AsmOperand::toString).collect(Collectors.joining(", "));
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperation.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/AsmOperation.java
deleted file mode 100644 (file)
index 248fcb1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmOperation
-{
-       private final String mnemonic;
-
-       public AsmOperation(String mnemonic)
-       {
-               this.mnemonic = Objects.requireNonNull(mnemonic.toLowerCase());
-       }
-
-       public String getMnemonic()
-       {
-               return mnemonic;
-       }
-
-       @Override
-       public String toString()
-       {
-               return getMnemonic();
-       }
-
-       @Override
-       public int hashCode()
-       {
-               return mnemonic.hashCode();
-       }
-
-       @Override
-       public boolean equals(Object obj)
-       {
-               if (this == obj)
-                       return true;
-               if (!(obj instanceof AsmOperation))
-                       return false;
-               AsmOperation other = (AsmOperation) obj;
-               return mnemonic.equals(other.mnemonic);
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/NumericOperand.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/model/NumericOperand.java
deleted file mode 100644 (file)
index 8391067..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.mograsim.plugin.asm.model;
-
-public class NumericOperand
-{
-
-}
index 0892f24..33fb725 100644 (file)
@@ -10,16 +10,16 @@ import org.eclipse.ui.part.ViewPart;
 
 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
 import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.LogicExecuter;
-import net.mograsim.logic.ui.LogicUICanvas;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.LogicExecuter;
+import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
 import net.mograsim.plugin.ThemePreferences;
 import net.mograsim.preferences.Preferences;