Merge branch 'development' into fusebug
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Sat, 31 Aug 2019 15:21:42 +0000 (17:21 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Sat, 31 Aug 2019 15:21:42 +0000 (17:21 +0200)
51 files changed:
net.mograsim.logic.model.am2900/GUIAm2904Testbench.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2904/GUIAm2904.json
net.mograsim.logic.model.am2900/components/am2904/GUIAm2904MSR.json
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/am2904/GUIAm2904RegCTInstrDecode.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/am2904/GUIAm2904ShiftInstrDecode.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2904Testbench.java [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2904/GUIAm2904.json
net.mograsim.logic.model.editor/components/am2904/GUIAm2904MSR.json
net.mograsim.logic.model/src/net/mograsim/logic/model/model/ViewModel.java
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java
net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/GenericMemory.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/MainMemory.java
net.mograsim.machine/src/net/mograsim/machine/MainMemoryDefinition.java
net.mograsim.machine/src/net/mograsim/machine/Memory.java
net.mograsim.machine/src/net/mograsim/machine/MemoryDefinition.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/MicroInstruction.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/MicroInstructionDefinition.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/MicroprogramMemory.java [deleted file]
net.mograsim.machine/src/net/mograsim/machine/StandardMainMemoryDefinition.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/BooleanClassification.java
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/IntegerClassification.java
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/ParameterClassification.java
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/UnknownMnemonicException.java [new file with mode: 0644]
net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java [deleted file]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java [new file with mode: 0644]
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java [new file with mode: 0644]

diff --git a/net.mograsim.logic.model.am2900/GUIAm2904Testbench.json b/net.mograsim.logic.model.am2900/GUIAm2904Testbench.json
new file mode 100644 (file)
index 0000000..faea225
--- /dev/null
@@ -0,0 +1,2338 @@
+{
+  "width": 0.0,
+  "height": 0.0,
+  "interfacePins": [],
+  "innerScale": 1.0,
+  "submodel": {
+    "components": [
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#1",
+        "pos": {
+          "x": 140.0,
+          "y": 125.0
+        },
+        "params": "IC"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#4",
+        "pos": {
+          "x": 335.0,
+          "y": 105.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#8",
+        "pos": {
+          "x": 125.0,
+          "y": 230.0
+        },
+        "params": "_EN"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 185.0,
+          "y": 310.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 345.0,
+          "y": 85.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#11",
+        "pos": {
+          "x": 375.0,
+          "y": 190.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#2",
+        "pos": {
+          "x": 391.0,
+          "y": 180.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#6",
+        "pos": {
+          "x": 125.0,
+          "y": 200.0
+        },
+        "params": "_EZ"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#14",
+        "pos": {
+          "x": 40.0,
+          "y": 130.0
+        },
+        "params": "I1"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#13",
+        "pos": {
+          "x": 60.0,
+          "y": 132.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#48",
+        "pos": {
+          "x": 350.0,
+          "y": 220.0
+        },
+        "params": "_OECT"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#3",
+        "pos": {
+          "x": 175.0,
+          "y": 370.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#42",
+        "pos": {
+          "x": 270.0,
+          "y": 135.0
+        },
+        "params": "YOVR"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 355.0,
+          "y": 380.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 85.0,
+          "y": 130.0
+        },
+        "params": 13
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#36",
+        "pos": {
+          "x": 300.0,
+          "y": 77.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#24",
+        "pos": {
+          "x": 55.0,
+          "y": 162.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#31",
+        "pos": {
+          "x": 55.0,
+          "y": 242.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#25",
+        "pos": {
+          "x": 55.0,
+          "y": 182.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#16",
+        "pos": {
+          "x": 35.0,
+          "y": 160.0
+        },
+        "params": "I4"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#12",
+        "pos": {
+          "x": 380.0,
+          "y": 200.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#29",
+        "pos": {
+          "x": 416.0,
+          "y": 195.0
+        },
+        "params": "YOVR"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#23",
+        "pos": {
+          "x": 60.0,
+          "y": 172.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#35",
+        "pos": {
+          "x": 300.0,
+          "y": 122.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#4",
+        "pos": {
+          "x": 170.0,
+          "y": 127.5
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 360.0,
+          "y": 125.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 215.0,
+          "y": 340.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#3",
+        "pos": {
+          "x": 55.0,
+          "y": 122.5
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#10",
+        "pos": {
+          "x": 370.0,
+          "y": 175.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#34",
+        "pos": {
+          "x": 300.0,
+          "y": 92.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#2",
+        "pos": {
+          "x": 170.0,
+          "y": 112.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#44",
+        "pos": {
+          "x": 270.0,
+          "y": 90.0
+        },
+        "params": "YZ"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#32",
+        "pos": {
+          "x": 390.0,
+          "y": 315.0
+        },
+        "params": "SIOn"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#6",
+        "pos": {
+          "x": 170.0,
+          "y": 157.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#39",
+        "pos": {
+          "x": 110.0,
+          "y": 370.0
+        },
+        "params": "SIO0"
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#6",
+        "pos": {
+          "x": 365.0,
+          "y": 370.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#41",
+        "pos": {
+          "x": 110.0,
+          "y": 330.0
+        },
+        "params": "QIOn"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 185.0,
+          "y": 365.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#10",
+        "pos": {
+          "x": 35.0,
+          "y": 120.0
+        },
+        "params": "I0"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#15",
+        "pos": {
+          "x": 140.0,
+          "y": 317.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#20",
+        "pos": {
+          "x": 140.0,
+          "y": 302.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#17",
+        "pos": {
+          "x": 140.0,
+          "y": 387.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#10",
+        "pos": {
+          "x": 160.0,
+          "y": 247.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#11",
+        "pos": {
+          "x": 160.0,
+          "y": 217.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#35",
+        "pos": {
+          "x": 390.0,
+          "y": 385.0
+        },
+        "params": "QIO0"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#30",
+        "pos": {
+          "x": 390.0,
+          "y": 240.0
+        },
+        "params": "CT"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#40",
+        "pos": {
+          "x": 110.0,
+          "y": 315.0
+        },
+        "params": "SIOn"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#12",
+        "pos": {
+          "x": 35.0,
+          "y": 140.0
+        },
+        "params": "I2"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#18",
+        "pos": {
+          "x": 140.0,
+          "y": 372.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#5",
+        "pos": {
+          "x": 170.0,
+          "y": 142.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#8",
+        "pos": {
+          "x": 155.0,
+          "y": 187.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#15",
+        "pos": {
+          "x": 40.0,
+          "y": 150.0
+        },
+        "params": "I3"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#6",
+        "pos": {
+          "x": 335.0,
+          "y": 120.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#43",
+        "pos": {
+          "x": 270.0,
+          "y": 120.0
+        },
+        "params": "YN"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#29",
+        "pos": {
+          "x": 55.0,
+          "y": 222.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#1",
+        "pos": {
+          "x": 175.0,
+          "y": 330.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#45",
+        "pos": {
+          "x": 270.0,
+          "y": 105.0
+        },
+        "params": "YC"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#17",
+        "pos": {
+          "x": 35.0,
+          "y": 180.0
+        },
+        "params": "I6"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 365.0,
+          "y": 160.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#11",
+        "pos": {
+          "x": 35.0,
+          "y": 240.0
+        },
+        "params": "I12"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#7",
+        "pos": {
+          "x": 335.0,
+          "y": 135.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#3",
+        "pos": {
+          "x": 140.0,
+          "y": 155.0
+        },
+        "params": "IOVR"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#36",
+        "pos": {
+          "x": 30.0,
+          "y": 300.0
+        },
+        "params": "enable S/QIOn input"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#19",
+        "pos": {
+          "x": 35.0,
+          "y": 200.0
+        },
+        "params": "I8"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 360.0,
+          "y": 110.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#22",
+        "pos": {
+          "x": 60.0,
+          "y": 152.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#47",
+        "pos": {
+          "x": 145.0,
+          "y": 270.0
+        },
+        "params": "_SE"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#9",
+        "pos": {
+          "x": 160.0,
+          "y": 232.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#9",
+        "pos": {
+          "x": 125.0,
+          "y": 245.0
+        },
+        "params": "_EOVR"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#28",
+        "pos": {
+          "x": 416.0,
+          "y": 180.0
+        },
+        "params": "YN"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#12",
+        "pos": {
+          "x": 160.0,
+          "y": 202.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#27",
+        "pos": {
+          "x": 416.0,
+          "y": 165.0
+        },
+        "params": "YC"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#32",
+        "pos": {
+          "x": 300.0,
+          "y": 107.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#33",
+        "pos": {
+          "x": 300.0,
+          "y": 137.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#37",
+        "pos": {
+          "x": 165.0,
+          "y": 270.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#4",
+        "pos": {
+          "x": 115.0,
+          "y": 170.0
+        },
+        "params": "_CEM"
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#9",
+        "pos": {
+          "x": 365.0,
+          "y": 315.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#0",
+        "pos": {
+          "x": 255.0,
+          "y": 152.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#21",
+        "pos": {
+          "x": 35.0,
+          "y": 220.0
+        },
+        "params": "I10"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#1",
+        "pos": {
+          "x": 170.0,
+          "y": 82.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#16",
+        "pos": {
+          "x": 140.0,
+          "y": 332.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#46",
+        "pos": {
+          "x": 220.0,
+          "y": 75.0
+        },
+        "params": "enable Y input"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#30",
+        "pos": {
+          "x": 60.0,
+          "y": 212.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#0",
+        "pos": {
+          "x": 140.0,
+          "y": 110.0
+        },
+        "params": "IZ"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#14",
+        "pos": {
+          "x": 165.0,
+          "y": 287.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#8",
+        "pos": {
+          "x": 365.0,
+          "y": 330.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#5",
+        "pos": {
+          "x": 115.0,
+          "y": 185.0
+        },
+        "params": "_CEmu"
+      },
+      {
+        "id": "GUIAm2904",
+        "name": "Am2904",
+        "pos": {
+          "x": 220.0,
+          "y": 175.0
+        }
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#7",
+        "pos": {
+          "x": 155.0,
+          "y": 172.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#5",
+        "pos": {
+          "x": 365.0,
+          "y": 275.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#18",
+        "pos": {
+          "x": 40.0,
+          "y": 190.0
+        },
+        "params": "I7"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#37",
+        "pos": {
+          "x": 30.0,
+          "y": 355.0
+        },
+        "params": "enable S/QIO0 input"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#13",
+        "pos": {
+          "x": 40.0,
+          "y": 170.0
+        },
+        "params": "I5"
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 210.0,
+          "y": 325.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#22",
+        "pos": {
+          "x": 40.0,
+          "y": 230.0
+        },
+        "params": "I11"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#19",
+        "pos": {
+          "x": 140.0,
+          "y": 357.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#7",
+        "pos": {
+          "x": 125.0,
+          "y": 215.0
+        },
+        "params": "_EC"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#5",
+        "pos": {
+          "x": 335.0,
+          "y": 90.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 360.0,
+          "y": 390.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#4",
+        "pos": {
+          "x": 365.0,
+          "y": 240.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#25",
+        "pos": {
+          "x": 225.0,
+          "y": 150.0
+        },
+        "params": "_OEY"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#31",
+        "pos": {
+          "x": 390.0,
+          "y": 275.0
+        },
+        "params": "C0"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#28",
+        "pos": {
+          "x": 55.0,
+          "y": 202.5
+        },
+        "params": 1
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#2",
+        "pos": {
+          "x": 175.0,
+          "y": 385.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#23",
+        "pos": {
+          "x": 145.0,
+          "y": 285.0
+        },
+        "params": "CX"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#21",
+        "pos": {
+          "x": 55.0,
+          "y": 142.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#26",
+        "pos": {
+          "x": 416.0,
+          "y": 150.0
+        },
+        "params": "YZ"
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#0",
+        "pos": {
+          "x": 391.0,
+          "y": 150.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#20",
+        "pos": {
+          "x": 40.0,
+          "y": 210.0
+        },
+        "params": "I9"
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#3",
+        "pos": {
+          "x": 391.0,
+          "y": 195.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#1",
+        "pos": {
+          "x": 391.0,
+          "y": 165.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#34",
+        "pos": {
+          "x": 390.0,
+          "y": 370.0
+        },
+        "params": "SIO0"
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#38",
+        "pos": {
+          "x": 110.0,
+          "y": 385.0
+        },
+        "params": "QIO0"
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#27",
+        "pos": {
+          "x": 60.0,
+          "y": 232.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#24",
+        "pos": {
+          "x": 150.0,
+          "y": 80.0
+        },
+        "params": "C"
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
+        "pos": {
+          "x": 175.0,
+          "y": 315.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#26",
+        "pos": {
+          "x": 60.0,
+          "y": 192.5
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#2",
+        "pos": {
+          "x": 140.0,
+          "y": 140.0
+        },
+        "params": "IN"
+      },
+      {
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#7",
+        "pos": {
+          "x": 365.0,
+          "y": 385.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIManualSwitch",
+        "name": "GUIManualSwitch#38",
+        "pos": {
+          "x": 385.0,
+          "y": 220.0
+        },
+        "params": 1
+      },
+      {
+        "id": "TextComponent",
+        "name": "TextComponent#33",
+        "pos": {
+          "x": 390.0,
+          "y": 330.0
+        },
+        "params": "QIOn"
+      }
+    ],
+    "wires": [
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#20",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#62",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "QIO0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#41",
+        "path": [
+          {
+            "x": 360.0,
+            "y": 305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#18",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#6",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#64",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#42",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#33",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 310.0
+          },
+          {
+            "x": 200.0,
+            "y": 335.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#67",
+        "path": [
+          {
+            "x": 365.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "_CEmu"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 185.0,
+            "y": 205.0
+          },
+          {
+            "x": 185.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "YN"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 375.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "IOVR"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 195.0,
+            "y": 200.0
+          },
+          {
+            "x": 195.0,
+            "y": 165.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#6",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#70",
+        "path": [
+          {
+            "x": 375.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#36",
+          "pinName": ""
+        },
+        "name": "unnamedWire#60",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#38",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "_OECT"
+        },
+        "name": "unnamedWire#75",
+        "path": [
+          {
+            "x": 410.0,
+            "y": 230.0
+          },
+          {
+            "x": 410.0,
+            "y": 215.0
+          },
+          {
+            "x": 345.0,
+            "y": 215.0
+          },
+          {
+            "x": 345.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "OUT"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#19",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I8"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#28",
+          "pinName": ""
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#26",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I7"
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#72",
+        "path": [
+          {
+            "x": 380.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#4",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 150.0
+          },
+          {
+            "x": 200.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#35",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#6",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#56",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#31",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I12"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "_OEY"
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 280.0,
+            "y": 160.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#7",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#33",
+          "pinName": ""
+        },
+        "name": "unnamedWire#55",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "Cx"
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 295.0
+          },
+          {
+            "x": 200.0,
+            "y": 285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "_SE"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#37",
+          "pinName": ""
+        },
+        "name": "unnamedWire#74",
+        "path": [
+          {
+            "x": 215.0,
+            "y": 260.0
+          },
+          {
+            "x": 215.0,
+            "y": 280.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#7",
+          "pinName": "EN"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#65",
+        "path": [
+          {
+            "x": 360.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#17",
+          "pinName": ""
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#23",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I5"
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I6"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#25",
+          "pinName": ""
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "_EOVR"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 205.0,
+            "y": 220.0
+          },
+          {
+            "x": 205.0,
+            "y": 255.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "SIOn"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "YC"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#68",
+        "path": [
+          {
+            "x": 370.0,
+            "y": 190.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIBitDisplay#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#35",
+        "path": [
+          {
+            "x": 350.0,
+            "y": 340.0
+          },
+          {
+            "x": 350.0,
+            "y": 380.0
+          },
+          {
+            "x": 215.0,
+            "y": 380.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 215.0,
+            "y": 90.0
+          },
+          {
+            "x": 215.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#22",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#52",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "YOVR"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "C0"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#30",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I9"
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "_CEM"
+        },
+        "name": "unnamedWire#6",
+        "path": [
+          {
+            "x": 190.0,
+            "y": 180.0
+          },
+          {
+            "x": 190.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "IC"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#3",
+        "path": [
+          {
+            "x": 205.0,
+            "y": 190.0
+          },
+          {
+            "x": 205.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#59",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "YZ"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 365.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#30",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 365.0
+          },
+          {
+            "x": 200.0,
+            "y": 390.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "IZ"
+        },
+        "name": "unnamedWire#2",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 120.0
+          },
+          {
+            "x": 210.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#63",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "OUT"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#36",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 380.0
+          },
+          {
+            "x": 210.0,
+            "y": 385.0
+          },
+          {
+            "x": 355.0,
+            "y": 385.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#69",
+        "path": [
+          {
+            "x": 370.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": [
+          {
+            "x": 360.0,
+            "y": 395.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "SIO0"
+        },
+        "name": "unnamedWire#40",
+        "path": [
+          {
+            "x": 355.0,
+            "y": 295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "_EN"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 240.0
+          },
+          {
+            "x": 200.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I10"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#29",
+          "pinName": ""
+        },
+        "name": "unnamedWire#45",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "_EZ"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#12",
+          "pinName": ""
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I4"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#24",
+          "pinName": ""
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "QIOn"
+        },
+        "name": "unnamedWire#22",
+        "path": [
+          {
+            "x": 215.0,
+            "y": 305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#34",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 375.0
+          },
+          {
+            "x": 345.0,
+            "y": 375.0
+          },
+          {
+            "x": 345.0,
+            "y": 325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#66",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#13",
+          "pinName": ""
+        },
+        "name": "unnamedWire#54",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#21",
+          "pinName": ""
+        },
+        "name": "unnamedWire#53",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "Am2904",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 190.0
+          },
+          {
+            "x": 105.0,
+            "y": 265.0
+          },
+          {
+            "x": 210.0,
+            "y": 265.0
+          },
+          {
+            "x": 210.0,
+            "y": 235.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#32",
+          "pinName": ""
+        },
+        "name": "unnamedWire#57",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#7",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#73",
+        "path": [
+          {
+            "x": 380.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#71",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#9",
+        "path": [
+          {
+            "x": 195.0,
+            "y": 215.0
+          },
+          {
+            "x": 195.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "OUT"
+        },
+        "name": "unnamedWire#37",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 390.0
+          },
+          {
+            "x": 210.0,
+            "y": 395.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "Am2904",
+          "pinName": "CT"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 345.0,
+            "y": 235.0
+          },
+          {
+            "x": 345.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
+        "path": [
+          {
+            "x": 360.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIBitDisplay#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#39",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "GUIManualSwitch#27",
+          "pinName": ""
+        },
+        "name": "unnamedWire#44",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIManualSwitch#34",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#58",
+        "path": []
+      }
+    ],
+    "version": "0.1.1"
+  },
+  "symbolRendererSnippetID": "default",
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "default",
+  "version": "0.1.4"
+}
\ No newline at end of file
index 318840b..dd1723b 100644 (file)
@@ -1,4 +1,3 @@
-mograsim version: 0.1.3
 {
   "width": 120.0,
   "height": 178.0,
@@ -19,14 +18,6 @@ mograsim version: 0.1.3
       "name": "_CEM",
       "logicWidth": 1
     },
-    {
-      "location": {
-        "x": 120.0,
-        "y": 11.0
-      },
-      "name": "YZ",
-      "logicWidth": 1
-    },
     {
       "location": {
         "x": 0.0,
@@ -35,22 +26,6 @@ mograsim version: 0.1.3
       "name": "C",
       "logicWidth": 1
     },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 20.0
-      },
-      "name": "IN",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 61.0,
-        "y": 0.0
-      },
-      "name": "_OEY",
-      "logicWidth": 1
-    },
     {
       "location": {
         "x": 0.0,
@@ -85,82 +60,130 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": 120.0,
-        "y": 118.0
+        "x": 0.0,
+        "y": 36.0
       },
-      "name": "SIO0",
+      "name": "_EZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 10.0
+        "y": 110.0
       },
-      "name": "IZ",
+      "name": "Cx",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 120.0,
-        "y": 60.0
+        "y": 21.0
       },
-      "name": "CT",
+      "name": "YN",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 128.0
+        "y": 15.0
       },
-      "name": "QIOn",
+      "name": "IC",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 119.0
+        "y": 42.0
       },
-      "name": "SIOn",
+      "name": "_EOVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 11.0
+      },
+      "name": "YZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 33.0
+        "y": 20.0
       },
-      "name": "_CEmu",
+      "name": "IN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 61.0,
+        "y": 0.0
+      },
+      "name": "_OEY",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 36.0
+        "y": 83.0
       },
-      "name": "_EZ",
+      "name": "_SE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 118.0
+      },
+      "name": "SIO0",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 110.0
+        "y": 10.0
       },
-      "name": "Cx",
+      "name": "IZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 120.0,
-        "y": 21.0
+        "y": 60.0
       },
-      "name": "YN",
+      "name": "CT",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 15.0
+        "y": 128.0
       },
-      "name": "IC",
+      "name": "QIOn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 119.0
+      },
+      "name": "SIOn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 33.0
+      },
+      "name": "_CEmu",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 51.0
+      },
+      "name": "_OECT",
       "logicWidth": 1
     },
     {
@@ -186,27 +209,44 @@ mograsim version: 0.1.3
       },
       "name": "_EC",
       "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 42.0
-      },
-      "name": "_EOVR",
-      "logicWidth": 1
     }
   ],
+  "innerScale": 0.2,
   "submodel": {
-    "innerScale": 0.2,
-    "subComps": [
+    "components": [
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#14",
+        "id": "GUINandGate",
+        "name": "GUINandGate#1",
         "pos": {
-          "x": 520.0,
-          "y": 190.0
+          "x": 130.0,
+          "y": 5.0
         },
-        "params": 4
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#10",
+        "pos": {
+          "x": 340.0,
+          "y": 120.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#21",
+        "pos": {
+          "x": 250.0,
+          "y": 820.0
+        }
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#15",
+        "pos": {
+          "x": 435.0,
+          "y": 575.0
+        }
       },
       {
         "id": "WireCrossPoint",
@@ -219,21 +259,21 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#16",
+        "name": "WireCrossPoint#27",
         "pos": {
-          "x": 255.0,
-          "y": 255.0
+          "x": 440.0,
+          "y": 385.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#15",
+        "name": "WireCrossPoint#6",
         "pos": {
-          "x": 255.0,
-          "y": 265.0
+          "x": 120.0,
+          "y": 15.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
@@ -245,149 +285,123 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#4",
+        "id": "GUIAm2904ShiftInstrDecode",
+        "name": "GUIAm2904ShiftInstrDecode#0",
         "pos": {
-          "x": 565.0,
-          "y": 655.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 50.0,
+          "y": 360.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#17",
-        "pos": {
-          "x": 360.0,
-          "y": 495.0
-        },
-        "params": 1
-      },
-      {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#2",
+        "id": "GUISplitter",
+        "name": "GUISplitter#6",
         "pos": {
-          "x": 10.0,
-          "y": 605.0
+          "x": 285.0,
+          "y": 320.0
         },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
-        }
+        "params": 3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#19",
+        "name": "WireCrossPoint#12",
         "pos": {
-          "x": 35.0,
-          "y": 595.0
+          "x": 195.0,
+          "y": 35.0
         },
         "params": 1
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#3",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#12",
         "pos": {
-          "x": 560.0,
-          "y": 595.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 315.0,
+          "y": 505.0
         }
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#0",
+        "id": "GUIAm2904TestLogic",
+        "name": "DeserializedSubmodelComponent#6",
         "pos": {
-          "x": 530.0,
-          "y": 170.0
-        },
-        "params": {
-          "logicWidth": 4,
-          "orientation": "RIGHT"
+          "x": 225.0,
+          "y": 340.0
         }
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#1",
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#7",
         "pos": {
-          "x": 10.0,
-          "y": 650.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 300.0,
+          "y": 310.0
         }
       },
       {
-        "id": "GUIAm2904muSR",
-        "name": "DeserializedSubmodelComponent#1",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#0",
         "pos": {
-          "x": 270.0,
-          "y": 250.0
-        }
+          "x": 530.0,
+          "y": 70.0
+        },
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#10",
+        "name": "WireCrossPoint#22",
         "pos": {
-          "x": 195.0,
-          "y": 55.0
+          "x": 250.0,
+          "y": 540.0
         },
         "params": 1
       },
       {
-        "id": "GUIAm2904MSR",
-        "name": "DeserializedSubmodelComponent#0",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#14",
         "pos": {
-          "x": 225.0,
-          "y": 95.0
+          "x": 415.0,
+          "y": 465.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#12",
+        "id": "GUINandGate",
+        "name": "GUINandGate#7",
         "pos": {
-          "x": 195.0,
-          "y": 35.0
+          "x": 205.0,
+          "y": 50.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#3",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#17",
         "pos": {
-          "x": 470.0,
-          "y": 160.0
+          "x": 190.0,
+          "y": 460.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#11",
+        "id": "GUISplitter",
+        "name": "GUISplitter#11",
         "pos": {
-          "x": 195.0,
-          "y": 15.0
+          "x": 405.0,
+          "y": 575.0
         },
-        "params": 1
+        "params": 3
       },
       {
-        "id": "GUIand",
-        "name": "DeserializedSubmodelComponent#2",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#10",
         "pos": {
-          "x": 370.0,
-          "y": 130.0
+          "x": 455.0,
+          "y": 355.0
         }
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
         "pos": {
-          "x": 415.0,
-          "y": 210.0
-        }
+          "x": 150.0,
+          "y": 160.0
+        },
+        "params": 1
       },
       {
         "id": "GUInot4",
@@ -398,97 +412,123 @@ mograsim version: 0.1.3
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#4",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#30",
         "pos": {
-          "x": 25.0,
-          "y": 355.0
+          "x": 550.0,
+          "y": 570.0
         },
-        "params": 2
+        "params": 1
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#3",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#2",
         "pos": {
-          "x": 510.0,
-          "y": 165.0
+          "x": 10.0,
+          "y": 605.0
         },
-        "params": 4
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUImux3",
-        "name": "DeserializedSubmodelComponent#7",
+        "id": "GUIAm2904muSR",
+        "name": "DeserializedSubmodelComponent#1",
         "pos": {
-          "x": 300.0,
-          "y": 310.0
+          "x": 270.0,
+          "y": 250.0
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#2",
+        "id": "GUISplitter",
+        "name": "GUISplitter#7",
         "pos": {
-          "x": 15.0,
-          "y": 65.0
+          "x": 420.0,
+          "y": 325.0
         },
         "params": 4
       },
       {
-        "id": "GUIAm2904TestLogic",
-        "name": "DeserializedSubmodelComponent#6",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#15",
         "pos": {
-          "x": 225.0,
-          "y": 340.0
+          "x": 255.0,
+          "y": 265.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIAm2904RegCTInstrDecode",
+        "name": "GUIAm2904RegCTInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 240.0
         }
       },
       {
         "id": "GUIMerger",
-        "name": "GUIMerger#1",
+        "name": "GUIMerger#3",
         "pos": {
-          "x": 25.0,
-          "y": 305.0
+          "x": 510.0,
+          "y": 165.0
         },
-        "params": 5
+        "params": 4
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#9",
+        "id": "GUISplitter",
+        "name": "GUISplitter#10",
         "pos": {
-          "x": 480.0,
-          "y": 305.0
-        }
+          "x": 420.0,
+          "y": 410.0
+        },
+        "params": 4
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#33",
         "pos": {
-          "x": 25.0,
-          "y": 245.0
+          "x": 530.0,
+          "y": 270.0
         },
-        "params": 6
+        "params": 1
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#8",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#3",
         "pos": {
-          "x": 540.0,
-          "y": 295.0
+          "x": 560.0,
+          "y": 595.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
         }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#9",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#11",
         "pos": {
-          "x": 205.0,
-          "y": 10.0
+          "x": 195.0,
+          "y": 15.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#8",
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
         "pos": {
-          "x": 205.0,
-          "y": 30.0
+          "x": 10.0,
+          "y": 245.0
+        },
+        "params": 13
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 215.0,
+          "y": 180.0
         },
         "params": 1
       },
@@ -502,296 +542,318 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#4",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#1",
         "pos": {
-          "x": 225.0,
-          "y": 155.0
+          "x": 565.0,
+          "y": 180.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#7",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#2",
         "pos": {
-          "x": 205.0,
-          "y": 50.0
+          "x": 530.0,
+          "y": 200.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#6",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#21",
         "pos": {
-          "x": 205.0,
-          "y": 70.0
+          "x": 585.0,
+          "y": 640.0
         },
         "params": 1
       },
       {
-        "id": "GUImux3",
-        "name": "DeserializedSubmodelComponent#23",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#16",
         "pos": {
-          "x": 300.0,
-          "y": 715.0
+          "x": 255.0,
+          "y": 255.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#5",
+        "pos": {
+          "x": 560.0,
+          "y": 290.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
         }
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#22",
+        "id": "GUISplitter",
+        "name": "GUISplitter#14",
         "pos": {
-          "x": 120.0,
+          "x": 90.0,
           "y": 720.0
-        }
+        },
+        "params": 3
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#21",
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
         "pos": {
-          "x": 250.0,
-          "y": 820.0
-        }
+          "x": 555.0,
+          "y": 80.0
+        },
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#30",
+        "id": "GUINandGate",
+        "name": "GUINandGate#2",
         "pos": {
-          "x": 550.0,
-          "y": 570.0
+          "x": 225.0,
+          "y": 195.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#32",
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
         "pos": {
-          "x": 85.0,
-          "y": 590.0
+          "x": 450.0,
+          "y": 175.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#31",
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
         "pos": {
-          "x": 120.0,
-          "y": 545.0
+          "x": 190.0,
+          "y": 145.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#25",
+        "id": "GUISplitter",
+        "name": "GUISplitter#9",
         "pos": {
-          "x": 285.0,
-          "y": 755.0
+          "x": 240.0,
+          "y": 475.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#24",
+        "id": "GUISplitter",
+        "name": "GUISplitter#13",
         "pos": {
-          "x": 285.0,
+          "x": 265.0,
           "y": 725.0
         },
-        "params": 1
+        "params": 3
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#27",
+        "id": "GUIMerger",
+        "name": "GUIMerger#2",
         "pos": {
-          "x": 470.0,
-          "y": 385.0
+          "x": 15.0,
+          "y": 65.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#26",
+        "name": "WireCrossPoint#24",
         "pos": {
-          "x": 290.0,
-          "y": 805.0
+          "x": 285.0,
+          "y": 725.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#29",
+        "id": "GUIAm2904MSR",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 225.0,
+          "y": 95.0
+        }
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#8",
         "pos": {
-          "x": 45.0,
-          "y": 580.0
+          "x": 420.0,
+          "y": 365.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#28",
+        "name": "WireCrossPoint#8",
         "pos": {
-          "x": 470.0,
-          "y": 350.0
+          "x": 215.0,
+          "y": 160.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#14",
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#23",
         "pos": {
-          "x": 90.0,
-          "y": 720.0
-        },
-        "params": 3
+          "x": 300.0,
+          "y": 715.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#15",
+        "id": "GUIMerger",
+        "name": "GUIMerger#4",
         "pos": {
-          "x": 120.0,
-          "y": 455.0
+          "x": 25.0,
+          "y": 355.0
         },
         "params": 2
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#12",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
         "pos": {
-          "x": 405.0,
-          "y": 655.0
+          "x": 335.0,
+          "y": 270.0
         },
-        "params": 3
+        "params": 4
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#13",
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
         "pos": {
-          "x": 265.0,
-          "y": 725.0
+          "x": 25.0,
+          "y": 245.0
         },
-        "params": 3
+        "params": 6
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#10",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#9",
         "pos": {
-          "x": 445.0,
-          "y": 410.0
-        },
-        "params": 4
+          "x": 450.0,
+          "y": 310.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#11",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#1",
         "pos": {
-          "x": 405.0,
-          "y": 575.0
+          "x": 10.0,
+          "y": 650.0
         },
-        "params": 3
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#21",
+        "name": "WireCrossPoint#5",
         "pos": {
-          "x": 585.0,
-          "y": 640.0
+          "x": 530.0,
+          "y": 100.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#20",
+        "id": "GUINandGate",
+        "name": "GUINandGate#4",
         "pos": {
-          "x": 585.0,
-          "y": 590.0
+          "x": 225.0,
+          "y": 155.0
         },
         "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#23",
+        "name": "WireCrossPoint#2",
         "pos": {
-          "x": 330.0,
-          "y": 640.0
+          "x": 295.0,
+          "y": 120.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#22",
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
         "pos": {
-          "x": 250.0,
-          "y": 540.0
+          "x": 395.0,
+          "y": 195.0
         },
-        "params": 1
+        "params": 2
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#1",
+        "id": "GUISplitter",
+        "name": "GUISplitter#5",
         "pos": {
-          "x": 180.0,
-          "y": 135.0
+          "x": 395.0,
+          "y": 265.0
         },
         "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#0",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#3",
         "pos": {
-          "x": 165.0,
-          "y": 150.0
-        },
-        "params": 1
+          "x": 470.0,
+          "y": 160.0
+        }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#3",
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#16",
         "pos": {
-          "x": 335.0,
-          "y": 270.0
-        },
-        "params": 4
+          "x": 435.0,
+          "y": 655.0
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#2",
+        "name": "WireCrossPoint#28",
         "pos": {
-          "x": 295.0,
-          "y": 120.0
+          "x": 440.0,
+          "y": 345.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#5",
+        "name": "WireCrossPoint#17",
         "pos": {
-          "x": 530.0,
-          "y": 100.0
+          "x": 360.0,
+          "y": 495.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#4",
+        "name": "WireCrossPoint#26",
         "pos": {
-          "x": 150.0,
-          "y": 160.0
+          "x": 290.0,
+          "y": 805.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#7",
+        "id": "GUISplitter",
+        "name": "GUISplitter#15",
         "pos": {
-          "x": 215.0,
-          "y": 180.0
+          "x": 120.0,
+          "y": 455.0
         },
-        "params": 1
+        "params": 2
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#6",
+        "name": "WireCrossPoint#0",
         "pos": {
-          "x": 120.0,
-          "y": 15.0
+          "x": 165.0,
+          "y": 150.0
         },
         "params": 1
       },
@@ -805,354 +867,427 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#8",
+        "id": "GUINandGate",
+        "name": "GUINandGate#8",
         "pos": {
-          "x": 215.0,
-          "y": 160.0
+          "x": 205.0,
+          "y": 30.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#18",
+        "id": "GUISplitter",
+        "name": "GUISplitter#4",
         "pos": {
-          "x": 135.0,
-          "y": 470.0
-        }
+          "x": 395.0,
+          "y": 225.0
+        },
+        "params": 4
       },
       {
         "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#17",
+        "name": "DeserializedSubmodelComponent#11",
         "pos": {
-          "x": 190.0,
-          "y": 460.0
+          "x": 265.0,
+          "y": 515.0
         }
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#16",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#3",
         "pos": {
-          "x": 435.0,
-          "y": 655.0
-        }
+          "x": 560.0,
+          "y": 150.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#15",
+        "id": "GUINandGate",
+        "name": "GUINandGate#3",
         "pos": {
-          "x": 435.0,
-          "y": 575.0
-        }
+          "x": 225.0,
+          "y": 215.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#14",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#19",
         "pos": {
-          "x": 415.0,
-          "y": 465.0
-        }
+          "x": 35.0,
+          "y": 595.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#13",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#14",
         "pos": {
-          "x": 365.0,
-          "y": 485.0
-        }
+          "x": 520.0,
+          "y": 190.0
+        },
+        "params": 4
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#11",
+        "name": "GUINandGate#9",
         "pos": {
-          "x": 60.0,
-          "y": 570.0
+          "x": 205.0,
+          "y": 10.0
         },
         "params": 1
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#12",
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#2",
         "pos": {
-          "x": 315.0,
-          "y": 505.0
+          "x": 380.0,
+          "y": 125.0
         }
       },
       {
         "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#11",
+        "name": "DeserializedSubmodelComponent#13",
         "pos": {
-          "x": 265.0,
-          "y": 515.0
+          "x": 365.0,
+          "y": 485.0
         }
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#10",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#25",
         "pos": {
-          "x": 500.0,
-          "y": 360.0
-        }
+          "x": 285.0,
+          "y": 755.0
+        },
+        "params": 1
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#10",
+        "name": "GUINandGate#12",
         "pos": {
-          "x": 340.0,
-          "y": 120.0
+          "x": 540.0,
+          "y": 265.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#1",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#4",
         "pos": {
-          "x": 130.0,
-          "y": 5.0
+          "x": 565.0,
+          "y": 655.0
         },
-        "params": 1
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#20",
         "pos": {
-          "x": 190.0,
-          "y": 145.0
+          "x": 585.0,
+          "y": 590.0
         },
         "params": 1
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#3",
+        "name": "GUINandGate#6",
         "pos": {
-          "x": 225.0,
-          "y": 215.0
+          "x": 205.0,
+          "y": 70.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#2",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#10",
         "pos": {
-          "x": 225.0,
-          "y": 195.0
+          "x": 195.0,
+          "y": 55.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#9",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#8",
         "pos": {
-          "x": 240.0,
-          "y": 475.0
-        },
-        "params": 4
+          "x": 495.0,
+          "y": 295.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#4",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#18",
         "pos": {
-          "x": 395.0,
-          "y": 225.0
-        },
-        "params": 4
+          "x": 135.0,
+          "y": 470.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#3",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
         "pos": {
-          "x": 450.0,
-          "y": 175.0
-        },
-        "params": 4
+          "x": 415.0,
+          "y": 210.0
+        }
       },
       {
         "id": "GUISplitter",
-        "name": "GUISplitter#2",
+        "name": "GUISplitter#12",
         "pos": {
-          "x": 395.0,
-          "y": 195.0
+          "x": 405.0,
+          "y": 655.0
         },
-        "params": 2
+        "params": 3
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#1",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
         "pos": {
-          "x": 555.0,
-          "y": 80.0
+          "x": 180.0,
+          "y": 135.0
         },
         "params": 4
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#8",
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#22",
         "pos": {
-          "x": 445.0,
-          "y": 370.0
-        },
-        "params": 4
+          "x": 120.0,
+          "y": 720.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#7",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
         "pos": {
-          "x": 445.0,
-          "y": 330.0
+          "x": 535.0,
+          "y": 165.0
         },
-        "params": 4
+        "params": {
+          "logicWidth": 4,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#6",
+        "id": "GUIMerger",
+        "name": "GUIMerger#1",
         "pos": {
-          "x": 285.0,
-          "y": 320.0
+          "x": 25.0,
+          "y": 305.0
         },
-        "params": 3
+        "params": 5
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#32",
         "pos": {
-          "x": 395.0,
-          "y": 265.0
+          "x": 85.0,
+          "y": 590.0
         },
-        "params": 4
+        "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#23",
         "pos": {
-          "x": 10.0,
-          "y": 245.0
+          "x": 330.0,
+          "y": 640.0
+        },
+        "params": 1
+      }
+    ],
+    "wires": [
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#100",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#22",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#8",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#172",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I01"
+        },
+        "name": "unnamedWire#170",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "OEn"
+        },
+        "name": "unnamedWire#202",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_2"
         },
-        "params": 13
+        "name": "unnamedWire#103",
+        "path": []
       },
       {
-        "id": "GUIAm2904RegCTInstrDecode",
-        "name": "GUIAm2904RegCTInstrDecode#0",
-        "pos": {
-          "x": 50.0,
-          "y": 240.0
-        }
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I010"
+        },
+        "name": "unnamedWire#119",
+        "path": []
       },
-      {
-        "id": "GUIAm2904ShiftInstrDecode",
-        "name": "GUIAm2904ShiftInstrDecode#0",
-        "pos": {
-          "x": 50.0,
-          "y": 360.0
-        }
-      }
-    ],
-    "innerWires": [
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "YOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S1"
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#190",
+        "name": "unnamedWire#52",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I010"
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#191",
+        "name": "unnamedWire#7",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#21",
+          "compName": "GUINandGate#2",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I111"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EN"
         },
-        "name": "unnamedWire#194",
+        "name": "unnamedWire#44",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#27",
-          "pinName": ""
+          "compName": "GUINandGate#10",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#26",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#195",
+        "name": "unnamedWire#81",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIMerger#4",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I011"
+          "compName": "GUISplitter#0",
+          "pinName": "O12"
         },
-        "name": "unnamedWire#192",
+        "name": "unnamedWire#140",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I100"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "CT"
         },
-        "name": "unnamedWire#193",
+        "name": "unnamedWire#236",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I10"
+          "compName": "_submodelinterface",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIMerger#2",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#198",
-        "path": []
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 100.0
+          },
+          {
+            "x": 5.0,
+            "y": 85.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#26",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I101"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
-        "name": "unnamedWire#199",
+        "name": "unnamedWire#26",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I110"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEC"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "O1"
+          "compName": "GUINandGate#5",
+          "pinName": "B"
         },
-        "name": "unnamedWire#196",
+        "name": "unnamedWire#48",
         "path": []
       },
       {
@@ -1169,158 +1304,158 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#18",
-          "pinName": ""
+          "compName": "GUIMerger#3",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I10"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#180",
+        "name": "unnamedWire#93",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
+          "compName": "GUISplitter#4",
           "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#183",
+        "name": "unnamedWire#102",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "GUINandGate#12",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S0"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#184",
+        "name": "unnamedWire#122",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#23",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I11"
+          "compName": "GUINandGate#1",
+          "pinName": "A"
         },
-        "name": "unnamedWire#181",
+        "name": "unnamedWire#55",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I11"
+          "compName": "GUISplitter#5",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_2"
         },
-        "name": "unnamedWire#182",
+        "name": "unnamedWire#108",
         "path": []
       },
       {
         "pin1": {
           "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I001"
+          "pinName": "I110"
         },
         "pin2": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#187",
+        "name": "unnamedWire#196",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "I"
+          "compName": "WireCrossPoint#24",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "SIOn_MUX"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#188",
+        "name": "unnamedWire#184",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUISplitter#4",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#185",
+        "name": "unnamedWire#105",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I000"
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
         },
-        "name": "unnamedWire#186",
+        "name": "unnamedWire#218",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S2"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "B"
         },
-        "name": "unnamedWire#189",
+        "name": "unnamedWire#123",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#22",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#8",
-          "pinName": "O1"
+          "compName": "GUINandGate#8",
+          "pinName": "A"
         },
-        "name": "unnamedWire#172",
+        "name": "unnamedWire#62",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#22",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "S1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "GUISplitter#12",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#173",
+        "name": "unnamedWire#175",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I01"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EOVR"
         },
-        "name": "unnamedWire#170",
+        "name": "unnamedWire#43",
         "path": []
       },
       {
@@ -1332,307 +1467,304 @@ mograsim version: 0.1.3
           "compName": "DeserializedSubmodelComponent#15",
           "pinName": "I10"
         },
-        "name": "unnamedWire#171",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "O0"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I00"
-        },
-        "name": "unnamedWire#176",
+        "name": "unnamedWire#171",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "Y"
+          "compName": "GUIBitDisplay#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "IN"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#177",
+        "name": "unnamedWire#229",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#21",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I111"
         },
-        "name": "unnamedWire#174",
+        "name": "unnamedWire#194",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "S1"
+          "compName": "GUISplitter#6",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUISplitter#12",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S2"
         },
-        "name": "unnamedWire#175",
+        "name": "unnamedWire#127",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "I"
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "QIO0_MUX"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#178",
+        "name": "unnamedWire#219",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I01"
+          "compName": "GUISplitter#0",
+          "pinName": "I"
         },
-        "name": "unnamedWire#179",
+        "name": "unnamedWire#3",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "OUT"
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#18",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#161",
+        "name": "unnamedWire#95",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "OUT"
+          "compName": "GUISplitter#13",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#19",
+          "compName": "WireCrossPoint#24",
           "pinName": ""
         },
-        "name": "unnamedWire#162",
+        "name": "unnamedWire#183",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "QIO0"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "B"
         },
-        "name": "unnamedWire#160",
+        "name": "unnamedWire#200",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "IN"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "Y"
+          "compName": "GUISplitter#4",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#165",
+        "name": "unnamedWire#104",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "SIO0_MUX"
+          "compName": "GUINandGate#8",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "GUISplitter#11",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#166",
+        "name": "unnamedWire#72",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "OUT"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "O"
         },
-        "name": "unnamedWire#163",
-        "path": []
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 395.0
+          },
+          {
+            "x": 40.0,
+            "y": 325.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "OUT"
+          "compName": "_submodelinterface",
+          "pinName": "QIO0"
         },
         "pin2": {
           "compName": "WireCrossPoint#21",
           "pinName": ""
         },
-        "name": "unnamedWire#164",
+        "name": "unnamedWire#160",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "GUISplitter#11",
-          "pinName": "O1"
+          "compName": "GUIMerger#3",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#169",
+        "name": "unnamedWire#91",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#11",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I10"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I00"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
-        "name": "unnamedWire#167",
+        "name": "unnamedWire#198",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#11",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "S1"
+          "compName": "GUINandGate#6",
+          "pinName": "A"
         },
-        "name": "unnamedWire#168",
+        "name": "unnamedWire#60",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "OUT"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y000"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I000"
         },
-        "name": "unnamedWire#79",
+        "name": "unnamedWire#121",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#10",
+          "compName": "DeserializedSubmodelComponent#21",
           "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#81",
+        "name": "unnamedWire#206",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y111"
         },
         "pin2": {
-          "compName": "GUINandGate#10",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I111"
         },
-        "name": "unnamedWire#80",
+        "name": "unnamedWire#114",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#10",
-          "pinName": "Y"
+          "compName": "GUISplitter#10",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "A"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#83",
+        "name": "unnamedWire#144",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
+          "compName": "WireCrossPoint#25",
           "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_OEY"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I000"
         },
-        "name": "unnamedWire#82",
+        "name": "unnamedWire#186",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_1"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I101"
         },
-        "name": "unnamedWire#85",
+        "name": "unnamedWire#199",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_CEmu"
         },
-        "name": "unnamedWire#84",
+        "name": "unnamedWire#35",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I01"
         },
-        "name": "unnamedWire#87",
+        "name": "unnamedWire#179",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_2"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y2"
+          "compName": "GUIBitDisplay#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#86",
+        "name": "unnamedWire#230",
         "path": []
       },
       {
@@ -1649,2198 +1781,2193 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_4"
+          "compName": "GUINandGate#12",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y4"
+          "compName": "WireCrossPoint#33",
+          "pinName": ""
+        },
+        "name": "unnamedWire#234",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#88",
+        "name": "unnamedWire#27",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "I1"
+          "compName": "GUISplitter#12",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y2"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "QIO0_MUX"
         },
-        "name": "unnamedWire#90",
+        "name": "unnamedWire#178",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "I3"
+          "compName": "GUISplitter#14",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#92",
+        "name": "unnamedWire#208",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y3"
+          "compName": "GUIMerger#4",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUIMerger#3",
-          "pinName": "I2"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I12-11"
         },
-        "name": "unnamedWire#91",
+        "name": "unnamedWire#141",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "Y_MUX"
+          "compName": "WireCrossPoint#18",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#2",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I10"
         },
-        "name": "unnamedWire#94",
+        "name": "unnamedWire#180",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "O"
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#93",
+        "name": "unnamedWire#212",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O1"
+          "compName": "GUIMerger#3",
+          "pinName": "I1"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "S0"
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#96",
+        "name": "unnamedWire#90",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O0"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "S0"
+          "compName": "GUINandGate#3",
+          "pinName": "B"
         },
-        "name": "unnamedWire#95",
+        "name": "unnamedWire#59",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_2"
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#98",
+        "name": "unnamedWire#70",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I100"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#97",
+        "name": "unnamedWire#193",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I100"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y100"
         },
-        "name": "unnamedWire#99",
+        "name": "unnamedWire#117",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#2",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A1"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEN"
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#58",
+        "name": "unnamedWire#75",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_CEM"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "C0_MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "GUISplitter#9",
+          "pinName": "I"
         },
-        "name": "unnamedWire#57",
+        "name": "unnamedWire#142",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEOVR"
+          "compName": "_submodelinterface",
+          "pinName": "IZ"
         },
         "pin2": {
-          "compName": "GUINandGate#3",
-          "pinName": "B"
+          "compName": "GUIMerger#2",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#59",
-        "path": []
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 50.0
+          },
+          {
+            "x": 5.0,
+            "y": 65.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUINandGate#7",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I001"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y001"
         },
-        "name": "unnamedWire#61",
+        "name": "unnamedWire#120",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "GUINandGate#6",
-          "pinName": "A"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#60",
+        "name": "unnamedWire#79",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#9",
-          "pinName": "A"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "MSR_MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "MUX"
         },
-        "name": "unnamedWire#63",
+        "name": "unnamedWire#31",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "GUISplitter#14",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUINandGate#8",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#62",
+        "name": "unnamedWire#209",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
+          "compName": "WireCrossPoint#8",
           "pinName": ""
         },
-        "name": "unnamedWire#65",
+        "name": "unnamedWire#36",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Q"
         },
         "pin2": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
-        "name": "unnamedWire#64",
+        "name": "unnamedWire#25",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "GUINandGate#7",
+          "compName": "GUINandGate#5",
           "pinName": "Y"
         },
-        "name": "unnamedWire#67",
+        "name": "unnamedWire#45",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#6",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EOVR"
+          "compName": "_submodelinterface",
+          "pinName": "Cx"
         },
-        "name": "unnamedWire#66",
+        "name": "unnamedWire#152",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#9",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O8"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EZ"
+          "compName": "GUIMerger#1",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#69",
+        "name": "unnamedWire#12",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#8",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#33",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EC"
+          "compName": "_submodelinterface",
+          "pinName": "_OECT"
         },
-        "name": "unnamedWire#68",
+        "name": "unnamedWire#235",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#1",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I4"
         },
-        "name": "unnamedWire#70",
+        "name": "unnamedWire#8",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#8",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y2"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#72",
+        "name": "unnamedWire#153",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y1"
+          "compName": "GUISplitter#8",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUINandGate#9",
-          "pinName": "B"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
-        "name": "unnamedWire#71",
+        "name": "unnamedWire#135",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y4"
+          "compName": "GUINandGate#6",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#6",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EOVR"
         },
-        "name": "unnamedWire#74",
+        "name": "unnamedWire#66",
         "path": []
       },
       {
         "pin1": {
           "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y3"
+          "pinName": "Y4"
         },
         "pin2": {
-          "compName": "GUINandGate#7",
+          "compName": "GUINandGate#6",
           "pinName": "B"
         },
-        "name": "unnamedWire#73",
+        "name": "unnamedWire#74",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EC"
+          "compName": "GUIMerger#0",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A2"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I5-0"
         },
-        "name": "unnamedWire#76",
+        "name": "unnamedWire#15",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_EZ"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "C"
         },
-        "name": "unnamedWire#75",
+        "name": "unnamedWire#29",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EOVR"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A4"
+          "compName": "GUIBitDisplay#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#78",
+        "name": "unnamedWire#232",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A3"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "C"
         },
-        "name": "unnamedWire#77",
+        "name": "unnamedWire#30",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
+          "compName": "WireCrossPoint#30",
           "pinName": ""
         },
-        "name": "unnamedWire#36",
+        "name": "unnamedWire#214",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_CEmu"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#35",
+        "name": "unnamedWire#129",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I001"
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#25",
           "pinName": ""
         },
-        "name": "unnamedWire#38",
+        "name": "unnamedWire#187",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#4",
-          "pinName": "A"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#37",
+        "name": "unnamedWire#84",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#17",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "A"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
-        "name": "unnamedWire#39",
+        "name": "unnamedWire#223",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O3"
+          "compName": "GUINandGate#1",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_4"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
-        "name": "unnamedWire#110",
+        "name": "unnamedWire#56",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "I"
+          "compName": "GUISplitter#9",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#111",
+        "name": "unnamedWire#146",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y111"
+          "compName": "_submodelinterface",
+          "pinName": "_SE"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I111"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "_SE"
         },
-        "name": "unnamedWire#114",
+        "name": "unnamedWire#213",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I110"
+          "compName": "_submodelinterface",
+          "pinName": "YC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y110"
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#115",
+        "name": "unnamedWire#50",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "IN"
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#112",
+        "name": "unnamedWire#5",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y101"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I101"
         },
-        "name": "unnamedWire#113",
+        "name": "unnamedWire#116",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y011"
+          "compName": "GUISplitter#6",
+          "pinName": "O0"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I011"
+          "pinName": "S0"
         },
-        "name": "unnamedWire#118",
+        "name": "unnamedWire#125",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y010"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I010"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#119",
+        "name": "unnamedWire#224",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUIMerger#2",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUINandGate#2",
-          "pinName": "A"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#41",
+        "name": "unnamedWire#22",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y101"
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I101"
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#116",
+        "name": "unnamedWire#4",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#40",
+        "name": "unnamedWire#177",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I100"
+          "compName": "GUINandGate#9",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y100"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#117",
+        "name": "unnamedWire#69",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#3",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EOVR"
+          "compName": "GUIBitDisplay#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#43",
+        "name": "unnamedWire#231",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#3",
-          "pinName": "A"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
           "compName": "WireCrossPoint#9",
           "pinName": ""
         },
-        "name": "unnamedWire#42",
+        "name": "unnamedWire#40",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EC"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#45",
+        "name": "unnamedWire#207",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#2",
-          "pinName": "Y"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_EXP"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#44",
+        "name": "unnamedWire#128",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#4",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "S0"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEZ"
+          "compName": "GUISplitter#11",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#47",
+        "name": "unnamedWire#169",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#4",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EZ"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#46",
+        "name": "unnamedWire#54",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
+          "compName": "GUISplitter#12",
           "pinName": "O0"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "YZ"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#49",
+        "name": "unnamedWire#176",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEC"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "B"
+          "compName": "_submodelinterface",
+          "pinName": "SIO0"
         },
-        "name": "unnamedWire#48",
+        "name": "unnamedWire#159",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#32",
+          "compName": "WireCrossPoint#30",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#11",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#220",
+        "name": "unnamedWire#215",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_4"
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#100",
+        "name": "unnamedWire#98",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "I0"
+          "compName": "GUISplitter#6",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#221",
+        "name": "unnamedWire#126",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_2"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
-        "name": "unnamedWire#103",
+        "name": "unnamedWire#195",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
+          "compName": "WireCrossPoint#7",
           "pinName": ""
         },
-        "name": "unnamedWire#224",
+        "name": "unnamedWire#38",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I110"
         },
         "pin2": {
-          "compName": "GUISplitter#4",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y110"
         },
-        "name": "unnamedWire#104",
+        "name": "unnamedWire#115",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_MUX"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "I1"
+          "compName": "GUISplitter#15",
+          "pinName": "I"
         },
-        "name": "unnamedWire#225",
+        "name": "unnamedWire#226",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "I"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "SIOn"
         },
-        "name": "unnamedWire#101",
+        "name": "unnamedWire#158",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O10"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "COVD_V"
+          "compName": "GUIMerger#1",
+          "pinName": "I4"
         },
-        "name": "unnamedWire#222",
+        "name": "unnamedWire#14",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "S0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_1"
+          "compName": "GUISplitter#9",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#102",
+        "name": "unnamedWire#155",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUINandGate#5",
+          "pinName": "A"
         },
-        "name": "unnamedWire#223",
+        "name": "unnamedWire#39",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "YC"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#50",
+        "name": "unnamedWire#237",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O0"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_1"
+          "compName": "GUINandGate#2",
+          "pinName": "A"
         },
-        "name": "unnamedWire#107",
+        "name": "unnamedWire#41",
         "path": []
       },
       {
         "pin1": {
           "compName": "GUISplitter#15",
-          "pinName": "O1"
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#17",
+          "compName": "DeserializedSubmodelComponent#18",
           "pinName": "S0"
         },
-        "name": "unnamedWire#228",
+        "name": "unnamedWire#227",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O1"
+          "compName": "GUISplitter#14",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_2"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#108",
+        "name": "unnamedWire#211",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "YOVR"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#18",
+          "pinName": ""
         },
-        "name": "unnamedWire#52",
+        "name": "unnamedWire#161",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O3"
+          "compName": "GUISplitter#13",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_4"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#105",
+        "name": "unnamedWire#190",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "MC_MUX"
+          "compName": "GUISplitter#12",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUISplitter#15",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#226",
+        "name": "unnamedWire#174",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
+          "compName": "GUISplitter#0",
           "pinName": "O2"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "YN"
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#51",
+        "name": "unnamedWire#6",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
+          "compName": "GUISplitter#1",
           "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#5",
           "pinName": ""
         },
-        "name": "unnamedWire#106",
+        "name": "unnamedWire#53",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#15",
-          "pinName": "O0"
+          "compName": "GUINandGate#2",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "S0"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEN"
         },
-        "name": "unnamedWire#227",
+        "name": "unnamedWire#58",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#5",
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#132",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "QIOn"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#18",
           "pinName": ""
         },
+        "name": "unnamedWire#157",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EN"
+        },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "GUINandGate#7",
           "pinName": "Y"
         },
-        "name": "unnamedWire#54",
+        "name": "unnamedWire#67",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "I"
+          "compName": "GUINandGate#4",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEZ"
         },
-        "name": "unnamedWire#53",
+        "name": "unnamedWire#47",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#1",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#56",
+        "name": "unnamedWire#87",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUISplitter#5",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#109",
+        "name": "unnamedWire#131",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#6",
+          "compName": "WireCrossPoint#17",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#1",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#55",
+        "name": "unnamedWire#150",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O10"
+          "compName": "GUISplitter#13",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I4"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S2"
         },
-        "name": "unnamedWire#14",
+        "name": "unnamedWire#189",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I3"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O9"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I11"
         },
-        "name": "unnamedWire#13",
+        "name": "unnamedWire#181",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "O"
+          "compName": "_submodelinterface",
+          "pinName": "C0"
         },
-        "name": "unnamedWire#16",
-        "path": [
-          {
-            "x": 40.0,
-            "y": 395.0
-          },
-          {
-            "x": 40.0,
-            "y": 325.0
-          }
-        ]
+        "name": "unnamedWire#156",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "O"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_MUX"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "I5-0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "MUX"
         },
-        "name": "unnamedWire#15",
+        "name": "unnamedWire#1",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IN"
+          "compName": "GUISplitter#0",
+          "pinName": "O6"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I2"
+          "compName": "GUIMerger#1",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#18",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 100.0
-          },
-          {
-            "x": 5.0,
-            "y": 85.0
-          }
-        ]
+        "name": "unnamedWire#10",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IOVR"
+          "compName": "DeserializedSubmodelComponent#17",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_V"
         },
-        "name": "unnamedWire#17",
-        "path": [
-          {
-            "x": 10.0,
-            "y": 125.0
-          },
-          {
-            "x": 10.0,
-            "y": 95.0
-          }
-        ]
+        "name": "unnamedWire#222",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IC"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "Y_MUX"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I1"
+          "compName": "GUISplitter#2",
+          "pinName": "I"
         },
-        "name": "unnamedWire#19",
+        "name": "unnamedWire#94",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "I"
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "QIOn_MUX"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A4"
         },
-        "name": "unnamedWire#210",
+        "name": "unnamedWire#78",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#29",
+          "compName": "WireCrossPoint#3",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#31",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "mu"
         },
-        "name": "unnamedWire#213",
+        "name": "unnamedWire#28",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "EN"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#30",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#214",
+        "name": "unnamedWire#86",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I00"
+          "compName": "DeserializedSubmodelComponent#12",
+          "pinName": "B"
         },
-        "name": "unnamedWire#211",
+        "name": "unnamedWire#147",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "IN"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I010"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#212",
+        "name": "unnamedWire#191",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#31",
+          "compName": "WireCrossPoint#33",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "LSHIFT"
+          "compName": "GUINandGate#12",
+          "pinName": "A"
         },
-        "name": "unnamedWire#217",
+        "name": "unnamedWire#233",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_CEM"
         },
         "pin2": {
-          "compName": "WireCrossPoint#32",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
-        "name": "unnamedWire#218",
+        "name": "unnamedWire#57",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#30",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A3"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
         },
-        "name": "unnamedWire#215",
+        "name": "unnamedWire#77",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#31",
-          "pinName": ""
+          "compName": "GUINandGate#7",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#30",
+          "compName": "WireCrossPoint#10",
           "pinName": ""
         },
-        "name": "unnamedWire#216",
+        "name": "unnamedWire#61",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_CINV"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "CINV"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I"
         },
-        "name": "unnamedWire#21",
+        "name": "unnamedWire#23",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IZ"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#20",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 50.0
-          },
-          {
-            "x": 5.0,
-            "y": 65.0
-          }
-        ]
+        "name": "unnamedWire#225",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#9",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#71",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#28",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#21",
+          "pinName": "A"
         },
-        "name": "unnamedWire#23",
+        "name": "unnamedWire#205",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#32",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "YZ"
         },
-        "name": "unnamedWire#219",
+        "name": "unnamedWire#49",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#2",
-          "pinName": "O"
+          "compName": "GUISplitter#4",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
-        "name": "unnamedWire#22",
+        "name": "unnamedWire#106",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "GUINandGate#7",
+          "pinName": "B"
         },
-        "name": "unnamedWire#25",
+        "name": "unnamedWire#73",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O11"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "GUIMerger#4",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#24",
+        "name": "unnamedWire#139",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#22",
           "pinName": ""
         },
-        "name": "unnamedWire#27",
+        "name": "unnamedWire#143",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#16",
+          "compName": "WireCrossPoint#1",
           "pinName": ""
         },
-        "name": "unnamedWire#26",
+        "name": "unnamedWire#24",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_OVRRET"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "C"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "OVRRET"
         },
-        "name": "unnamedWire#29",
+        "name": "unnamedWire#2",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#14",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "mu"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I"
         },
-        "name": "unnamedWire#28",
+        "name": "unnamedWire#113",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#29",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "OEN"
         },
         "pin2": {
-          "compName": "GUINandGate#11",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "B"
         },
-        "name": "unnamedWire#202",
+        "name": "unnamedWire#138",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#11",
-          "pinName": "B"
+          "compName": "GUINandGate#8",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#29",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EC"
         },
-        "name": "unnamedWire#203",
+        "name": "unnamedWire#68",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#27",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#10",
-          "pinName": "B"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
-        "name": "unnamedWire#200",
+        "name": "unnamedWire#65",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#26",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "IC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I11"
+          "compName": "GUIMerger#2",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#201",
+        "name": "unnamedWire#19",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#21",
-          "pinName": "B"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "OE0"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#30",
+          "pinName": ""
         },
-        "name": "unnamedWire#206",
+        "name": "unnamedWire#203",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#22",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "IN"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#207",
+        "name": "unnamedWire#173",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I11"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "C"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#30",
+        "name": "unnamedWire#182",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#28",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#10",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#204",
+        "name": "unnamedWire#165",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#28",
+          "compName": "WireCrossPoint#4",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#21",
-          "pinName": "A"
+          "compName": "GUINandGate#0",
+          "pinName": "B"
         },
-        "name": "unnamedWire#205",
+        "name": "unnamedWire#34",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "MC_EN"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "COVD_EN"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_INV"
         },
-        "name": "unnamedWire#32",
+        "name": "unnamedWire#130",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "MSR_MUX"
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "MUX"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
-        "name": "unnamedWire#31",
+        "name": "unnamedWire#164",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "GUINandGate#0",
-          "pinName": "B"
+          "compName": "GUISplitter#0",
+          "pinName": "O9"
         },
-        "name": "unnamedWire#34",
+        "name": "unnamedWire#13",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O2"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "S1"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_EN"
         },
-        "name": "unnamedWire#208",
+        "name": "unnamedWire#32",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "A"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "I"
         },
-        "name": "unnamedWire#33",
+        "name": "unnamedWire#133",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "M"
         },
-        "name": "unnamedWire#209",
+        "name": "unnamedWire#136",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "GUISplitter#3",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#150",
+        "name": "unnamedWire#101",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "Y"
+          "compName": "_submodelinterface",
+          "pinName": "C"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
-        "name": "unnamedWire#151",
-        "path": []
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 25.0
+          },
+          {
+            "x": 5.0,
+            "y": 10.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "GUISplitter#5",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#154",
+        "name": "unnamedWire#109",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "S0"
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#155",
+        "name": "unnamedWire#97",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y011"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Cx"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I011"
         },
-        "name": "unnamedWire#152",
+        "name": "unnamedWire#118",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "Y"
+          "compName": "GUISplitter#6",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "I1"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_MUX"
         },
-        "name": "unnamedWire#153",
+        "name": "unnamedWire#124",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "SIOn"
+          "compName": "WireCrossPoint#28",
+          "pinName": ""
         },
-        "name": "unnamedWire#158",
+        "name": "unnamedWire#134",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUIMerger#3",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "SIO0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#159",
+        "name": "unnamedWire#92",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "Y"
+          "compName": "GUISplitter#5",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "C0"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_4"
         },
-        "name": "unnamedWire#156",
+        "name": "unnamedWire#110",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "QIOn"
+          "compName": "GUINandGate#3",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#18",
+          "compName": "WireCrossPoint#9",
           "pinName": ""
         },
-        "name": "unnamedWire#157",
+        "name": "unnamedWire#42",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#4",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#25",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O12"
+          "compName": "WireCrossPoint#24",
+          "pinName": ""
         },
-        "name": "unnamedWire#140",
+        "name": "unnamedWire#185",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I5"
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O5"
+          "compName": "GUINandGate#4",
+          "pinName": "A"
         },
-        "name": "unnamedWire#9",
+        "name": "unnamedWire#37",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#12",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#22",
-          "pinName": ""
+          "compName": "GUISplitter#9",
+          "pinName": "O0"
         },
-        "name": "unnamedWire#143",
+        "name": "unnamedWire#148",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O4"
+          "compName": "GUIMerger#0",
+          "pinName": "I5"
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I4"
+          "compName": "GUISplitter#0",
+          "pinName": "O5"
         },
-        "name": "unnamedWire#8",
+        "name": "unnamedWire#9",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#10",
-          "pinName": "I"
+          "compName": "GUISplitter#9",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#17",
           "pinName": ""
         },
-        "name": "unnamedWire#144",
+        "name": "unnamedWire#149",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I3"
+          "compName": "GUISplitter#14",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O3"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "QIOn_MUX"
         },
-        "name": "unnamedWire#7",
+        "name": "unnamedWire#210",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#4",
-          "pinName": "O"
+          "compName": "GUINandGate#0",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "I12-11"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
-        "name": "unnamedWire#141",
+        "name": "unnamedWire#33",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I2"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#6",
+        "name": "unnamedWire#112",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "C0_MUX"
+          "compName": "_submodelinterface",
+          "pinName": "IOVR"
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "I"
+          "compName": "GUIMerger#2",
+          "pinName": "I3"
         },
-        "name": "unnamedWire#142",
-        "path": []
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 125.0
+          },
+          {
+            "x": 10.0,
+            "y": 95.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "Y"
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A2"
         },
-        "name": "unnamedWire#147",
+        "name": "unnamedWire#76",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "A"
+          "compName": "WireCrossPoint#28",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "A"
         },
-        "name": "unnamedWire#148",
+        "name": "unnamedWire#204",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#10",
-          "pinName": "O1"
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#145",
+        "name": "unnamedWire#163",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#9",
-          "pinName": "O1"
+          "compName": "GUINandGate#9",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#146",
+        "name": "unnamedWire#63",
         "path": []
       },
       {
         "pin1": {
           "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_MUX"
+          "pinName": "muSR_CINV"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "MUX"
+          "pinName": "CINV"
         },
-        "name": "unnamedWire#1",
+        "name": "unnamedWire#21",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "name": "unnamedWire#0",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 25.0
-          },
-          {
-            "x": 5.0,
-            "y": 10.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#9",
-          "pinName": "O2"
+          "compName": "GUINandGate#10",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "A"
         },
-        "name": "unnamedWire#149",
+        "name": "unnamedWire#83",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I1"
+          "compName": "GUISplitter#11",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#5",
+        "name": "unnamedWire#168",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O6"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#17",
+          "pinName": ""
         },
-        "name": "unnamedWire#10",
+        "name": "unnamedWire#154",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#0",
+          "compName": "DeserializedSubmodelComponent#17",
           "pinName": "I0"
         },
-        "name": "unnamedWire#4",
+        "name": "unnamedWire#221",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "I"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I011"
         },
-        "name": "unnamedWire#3",
+        "name": "unnamedWire#192",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O8"
+          "compName": "GUISplitter#11",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I2"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#12",
+        "name": "unnamedWire#167",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I1"
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O7"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#11",
+        "name": "unnamedWire#96",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_OVRRET"
+          "compName": "GUISplitter#5",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "OVRRET"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#2",
+        "name": "unnamedWire#107",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "I"
+          "compName": "_submodelinterface",
+          "pinName": "YN"
         },
-        "name": "unnamedWire#132",
+        "name": "unnamedWire#51",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#133",
+        "name": "unnamedWire#85",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_INV"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#130",
+        "name": "unnamedWire#88",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#10",
+          "compName": "DeserializedSubmodelComponent#12",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "DeserializedSubmodelComponent#13",
           "pinName": "I1"
         },
-        "name": "unnamedWire#131",
+        "name": "unnamedWire#151",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "M"
+          "compName": "GUISplitter#0",
+          "pinName": "O7"
         },
-        "name": "unnamedWire#136",
+        "name": "unnamedWire#11",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "SIO0_MUX"
         },
         "pin2": {
-          "compName": "GUISplitter#8",
+          "compName": "GUISplitter#11",
           "pinName": "I"
         },
-        "name": "unnamedWire#137",
+        "name": "unnamedWire#166",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#7",
-          "pinName": "O2"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#28",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#134",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#8",
-          "pinName": "O2"
-        },
         "pin2": {
-          "compName": "WireCrossPoint#27",
-          "pinName": ""
+          "compName": "GUINandGate#10",
+          "pinName": "A"
         },
-        "name": "unnamedWire#135",
+        "name": "unnamedWire#80",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "OEN"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "B"
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#138",
+        "name": "unnamedWire#99",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O11"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#4",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
-        "name": "unnamedWire#139",
+        "name": "unnamedWire#64",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y000"
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I000"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
-        "name": "unnamedWire#121",
+        "name": "unnamedWire#162",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "Y"
+          "compName": "GUISplitter#13",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "CT"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "SIOn_MUX"
         },
-        "name": "unnamedWire#122",
+        "name": "unnamedWire#188",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I001"
+          "compName": "GUISplitter#5",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y001"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#120",
+        "name": "unnamedWire#111",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "O0"
+          "compName": "GUISplitter#15",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
+          "compName": "DeserializedSubmodelComponent#17",
           "pinName": "S0"
         },
-        "name": "unnamedWire#125",
+        "name": "unnamedWire#228",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S1"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#6",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I11"
         },
-        "name": "unnamedWire#126",
+        "name": "unnamedWire#201",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "GUINandGate#4",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#123",
+        "name": "unnamedWire#46",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "I"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_MUX"
+          "compName": "GUISplitter#8",
+          "pinName": "I"
         },
-        "name": "unnamedWire#124",
+        "name": "unnamedWire#137",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "Y"
+          "compName": "GUISplitter#10",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "DeserializedSubmodelComponent#11",
           "pinName": "I0"
         },
-        "name": "unnamedWire#129",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "O2"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S2"
-        },
-        "name": "unnamedWire#127",
+        "name": "unnamedWire#145",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_EXP"
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
-          "pinName": "S0"
+          "compName": "_submodelinterface",
+          "pinName": "_OEY"
         },
-        "name": "unnamedWire#128",
+        "name": "unnamedWire#82",
         "path": []
       }
-    ]
+    ],
+    "version": "0.1.1"
   },
   "symbolRendererSnippetID": "simpleRectangularLike",
   "symbolRendererParams": {
@@ -3855,5 +3982,6 @@ mograsim version: 0.1.3
   "highLevelStateHandlerParams": {
     "subcomponentHighLevelStates": {},
     "atomicHighLevelStates": {}
-  }
+  },
+  "version": "0.1.4"
 }
\ No newline at end of file
index 3296f39..4a24464 100644 (file)
@@ -1,4 +1,3 @@
-mograsim version: 0.1.3
 {
   "width": 45.0,
   "height": 46.0,
@@ -100,62 +99,78 @@ mograsim version: 0.1.3
       "logicWidth": 1
     }
   ],
+  "innerScale": 0.1,
   "submodel": {
-    "innerScale": 0.1,
-    "subComps": [
+    "components": [
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#14",
+        "name": "WireCrossPoint#2",
         "pos": {
-          "x": 89.0,
-          "y": 104.0
+          "x": 419.0,
+          "y": 184.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#13",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
         "pos": {
-          "x": 194.0,
-          "y": 234.0
-        },
-        "params": 1
+          "x": 55.0,
+          "y": 110.0
+        }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#0",
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
         "pos": {
-          "x": 325.0,
-          "y": 90.0
+          "x": 435.0,
+          "y": 175.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#16",
+        "name": "WireCrossPoint#5",
         "pos": {
-          "x": 319.0,
-          "y": 104.0
+          "x": 84.0,
+          "y": 344.0
         },
         "params": 1
       },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 5.0,
+          "y": 35.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIdff4_finewe",
+        "name": "GUIdff4_finewe#0",
+        "pos": {
+          "x": 375.0,
+          "y": 170.0
+        }
+      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#15",
+        "name": "WireCrossPoint#8",
         "pos": {
-          "x": 319.0,
-          "y": 294.0
+          "x": 74.0,
+          "y": 314.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#3",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
         "pos": {
-          "x": 5.0,
-          "y": 295.0
+          "x": 424.0,
+          "y": 194.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "GUISplitter",
@@ -177,64 +192,103 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#1",
+        "name": "WireCrossPoint#4",
         "pos": {
-          "x": 414.0,
-          "y": 174.0
+          "x": 429.0,
+          "y": 204.0
         },
         "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#0",
+        "name": "WireCrossPoint#11",
         "pos": {
-          "x": 29.0,
-          "y": 284.0
+          "x": 89.0,
+          "y": 94.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#12",
         "pos": {
-          "x": 5.0,
-          "y": 35.0
+          "x": 19.0,
+          "y": 294.0
         },
-        "params": 4
+        "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#3",
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
         "pos": {
-          "x": 424.0,
-          "y": 194.0
+          "x": 325.0,
+          "y": 90.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#2",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
         "pos": {
-          "x": 419.0,
-          "y": 184.0
-        },
-        "params": 1
+          "x": 200.0,
+          "y": 230.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#7",
+        "pos": {
+          "x": 325.0,
+          "y": 290.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 150.0,
+          "y": 280.0
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#5",
+        "name": "WireCrossPoint#0",
         "pos": {
-          "x": 84.0,
-          "y": 344.0
+          "x": 29.0,
+          "y": 284.0
         },
         "params": 1
       },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 35.0,
+          "y": 250.0
+        }
+      },
+      {
+        "id": "GUInot4",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 100.0,
+          "y": 330.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#4",
+        "pos": {
+          "x": 110.0,
+          "y": 60.0
+        }
+      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#4",
+        "name": "WireCrossPoint#1",
         "pos": {
-          "x": 429.0,
-          "y": 204.0
+          "x": 414.0,
+          "y": 174.0
         },
         "params": 1
       },
@@ -258,38 +312,13 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#9",
-        "pos": {
-          "x": 49.0,
-          "y": 114.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#8",
+        "name": "WireCrossPoint#14",
         "pos": {
-          "x": 74.0,
-          "y": 314.0
+          "x": 89.0,
+          "y": 104.0
         },
         "params": 1
       },
-      {
-        "id": "GUIdff4_finewe",
-        "name": "GUIdff4_finewe#0",
-        "pos": {
-          "x": 375.0,
-          "y": 170.0
-        }
-      },
-      {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#1",
-        "pos": {
-          "x": 35.0,
-          "y": 250.0
-        }
-      },
       {
         "id": "WireCrossPoint",
         "name": "WireCrossPoint#10",
@@ -299,70 +328,48 @@ mograsim version: 0.1.3
         },
         "params": 1
       },
-      {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#0",
-        "pos": {
-          "x": 55.0,
-          "y": 110.0
-        }
-      },
-      {
-        "id": "GUInot4",
-        "name": "DeserializedSubmodelComponent#3",
-        "pos": {
-          "x": 100.0,
-          "y": 330.0
-        }
-      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#12",
+        "name": "WireCrossPoint#15",
         "pos": {
-          "x": 19.0,
+          "x": 319.0,
           "y": 294.0
         },
         "params": 1
       },
-      {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#2",
-        "pos": {
-          "x": 150.0,
-          "y": 280.0
-        }
-      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#11",
+        "name": "WireCrossPoint#9",
         "pos": {
-          "x": 89.0,
-          "y": 94.0
+          "x": 49.0,
+          "y": 114.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#16",
         "pos": {
-          "x": 200.0,
-          "y": 230.0
-        }
+          "x": 319.0,
+          "y": 104.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#4",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#13",
         "pos": {
-          "x": 110.0,
-          "y": 60.0
-        }
+          "x": 194.0,
+          "y": 234.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#7",
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#8",
         "pos": {
-          "x": 325.0,
-          "y": 290.0
+          "x": 380.0,
+          "y": 85.0
         }
       },
       {
@@ -374,367 +381,347 @@ mograsim version: 0.1.3
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#0",
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
         "pos": {
-          "x": 435.0,
-          "y": 175.0
+          "x": 5.0,
+          "y": 295.0
         },
         "params": 4
-      },
-      {
-        "id": "GUIand",
-        "name": "DeserializedSubmodelComponent#8",
-        "pos": {
-          "x": 380.0,
-          "y": 85.0
-        }
       }
     ],
-    "innerWires": [
+    "wires": [
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#36",
+        "name": "unnamedWire#12",
         "path": [
           {
-            "x": 425.0,
-            "y": 390.0
-          },
-          {
-            "x": 90.0,
-            "y": 390.0
+            "x": 35.0,
+            "y": 35.0
           },
           {
-            "x": 90.0,
-            "y": 355.0
+            "x": 35.0,
+            "y": 125.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#35",
-        "path": [
-          {
-            "x": 420.0,
-            "y": 385.0
-          },
-          {
-            "x": 85.0,
-            "y": 385.0
-          }
-        ]
+        "name": "unnamedWire#68",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y3"
+          "compName": "_submodelinterface",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "I0_3"
         },
-        "name": "unnamedWire#79",
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
         "path": [
           {
-            "x": 205.0,
-            "y": 85.0
-          },
-          {
-            "x": 205.0,
-            "y": 215.0
+            "x": 75.0,
+            "y": 265.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#7",
           "pinName": ""
         },
-        "name": "unnamedWire#38",
+        "name": "unnamedWire#25",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#37",
+        "name": "unnamedWire#82",
         "path": [
           {
-            "x": 430.0,
-            "y": 395.0
+            "x": 245.0,
+            "y": 445.0
           },
           {
-            "x": 95.0,
-            "y": 395.0
+            "x": 245.0,
+            "y": 185.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_4"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#39",
-        "path": [
-          {
-            "x": 85.0,
-            "y": 325.0
-          }
-        ]
+        "name": "unnamedWire#43",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
-        "name": "unnamedWire#81",
-        "path": [
-          {
-            "x": 215.0,
-            "y": 65.0
-          },
-          {
-            "x": 215.0,
-            "y": 195.0
-          }
-        ]
+        "name": "unnamedWire#21",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_2"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#0",
           "pinName": "Y2"
         },
-        "name": "unnamedWire#80",
-        "path": [
-          {
-            "x": 210.0,
-            "y": 205.0
-          },
-          {
-            "x": 210.0,
-            "y": 75.0
-          }
-        ]
+        "name": "unnamedWire#46",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#15",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#83",
-        "path": []
+        "name": "unnamedWire#67",
+        "path": [
+          {
+            "x": 195.0,
+            "y": 435.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A3"
         },
-        "name": "unnamedWire#82",
+        "name": "unnamedWire#36",
         "path": [
           {
-            "x": 245.0,
-            "y": 445.0
+            "x": 425.0,
+            "y": 390.0
           },
           {
-            "x": 245.0,
-            "y": 185.0
+            "x": 90.0,
+            "y": 390.0
+          },
+          {
+            "x": 90.0,
+            "y": 355.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#41",
+        "name": "unnamedWire#17",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#85",
+        "name": "unnamedWire#48",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#6",
+          "compName": "WireCrossPoint#10",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
+          "compName": "DeserializedSubmodelComponent#4",
           "pinName": "I0_2"
         },
-        "name": "unnamedWire#40",
-        "path": [
-          {
-            "x": 95.0,
-            "y": 305.0
-          }
-        ]
+        "name": "unnamedWire#53",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "C"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "COVD_EN"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "C"
         },
-        "name": "unnamedWire#84",
+        "name": "unnamedWire#0",
         "path": [
           {
-            "x": 275.0,
-            "y": 295.0
+            "x": 140.0,
+            "y": 415.0
+          },
+          {
+            "x": 255.0,
+            "y": 415.0
+          },
+          {
+            "x": 255.0,
+            "y": 280.0
+          },
+          {
+            "x": 340.0,
+            "y": 280.0
+          },
+          {
+            "x": 340.0,
+            "y": 175.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#43",
+        "name": "unnamedWire#31",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#87",
+        "name": "unnamedWire#35",
         "path": [
           {
-            "x": 305.0,
-            "y": 195.0
+            "x": 420.0,
+            "y": 385.0
           },
           {
-            "x": 305.0,
-            "y": 305.0
+            "x": 85.0,
+            "y": 385.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "COVD_EN"
         },
-        "name": "unnamedWire#42",
+        "name": "unnamedWire#84",
         "path": [
           {
-            "x": 30.0,
-            "y": 230.0
-          },
-          {
-            "x": 50.0,
-            "y": 230.0
+            "x": 275.0,
+            "y": 295.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "COVD_V"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_3"
         },
-        "name": "unnamedWire#86",
+        "name": "unnamedWire#79",
         "path": [
           {
-            "x": 375.0,
-            "y": 325.0
-          },
-          {
-            "x": 320.0,
-            "y": 325.0
+            "x": 205.0,
+            "y": 85.0
           },
           {
-            "x": 320.0,
-            "y": 315.0
+            "x": 205.0,
+            "y": 215.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "B"
         },
-        "name": "unnamedWire#45",
+        "name": "unnamedWire#23",
         "path": [
           {
-            "x": 50.0,
-            "y": 105.0
+            "x": 25.0,
+            "y": 305.0
+          },
+          {
+            "x": 25.0,
+            "y": 265.0
           }
         ]
       },
@@ -752,275 +739,281 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#6",
           "pinName": "I1_1"
         },
-        "name": "unnamedWire#44",
+        "name": "unnamedWire#77",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D2"
-        },
-        "name": "unnamedWire#88",
-        "path": [
-          {
-            "x": 365.0,
-            "y": 295.0
-          },
-          {
-            "x": 365.0,
-            "y": 235.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#47",
+        "name": "unnamedWire#57",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_2"
+          "compName": "_submodelinterface",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y2"
+          "compName": "GUISplitter#3",
+          "pinName": "I"
         },
-        "name": "unnamedWire#46",
+        "name": "unnamedWire#22",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_4"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
         },
-        "name": "unnamedWire#49",
-        "path": []
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 55.0
+          },
+          {
+            "x": 25.0,
+            "y": 145.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_4"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#48",
+        "name": "unnamedWire#63",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q2"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#9",
-        "path": []
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 135.0
+          },
+          {
+            "x": 30.0,
+            "y": 45.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#8",
+        "name": "unnamedWire#44",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#14",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#7",
+        "name": "unnamedWire#49",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#6",
-        "path": []
+        "name": "unnamedWire#78",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 225.0
+          },
+          {
+            "x": 200.0,
+            "y": 95.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#90",
+        "name": "unnamedWire#65",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "A"
+          "compName": "_submodelinterface",
+          "pinName": "MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "I"
         },
-        "name": "unnamedWire#92",
+        "name": "unnamedWire#20",
         "path": [
           {
-            "x": 320.0,
-            "y": 95.0
+            "x": 40.0,
+            "y": 435.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
           "pinName": ""
         },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
         "pin2": {
-          "compName": "GUINandGate#0",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#91",
+        "name": "unnamedWire#18",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EOVR"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_1"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE4"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
-        "name": "unnamedWire#1",
+        "name": "unnamedWire#54",
         "path": [
           {
-            "x": 355.0,
-            "y": 30.0
-          },
-          {
-            "x": 355.0,
-            "y": 215.0
+            "x": 90.0,
+            "y": 75.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#50",
+        "name": "unnamedWire#32",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
           "compName": "GUIdff4_finewe#0",
-          "pinName": "C"
+          "pinName": "Q4"
         },
-        "name": "unnamedWire#0",
-        "path": [
-          {
-            "x": 140.0,
-            "y": 415.0
-          },
-          {
-            "x": 255.0,
-            "y": 415.0
-          },
-          {
-            "x": 255.0,
-            "y": 280.0
-          },
-          {
-            "x": 340.0,
-            "y": 280.0
-          },
-          {
-            "x": 340.0,
-            "y": 175.0
-          }
-        ]
+        "name": "unnamedWire#29",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#2",
           "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
+          "compName": "WireCrossPoint#8",
           "pinName": ""
         },
-        "name": "unnamedWire#52",
+        "name": "unnamedWire#41",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
         },
-        "name": "unnamedWire#51",
+        "name": "unnamedWire#19",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "O"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A1"
         },
-        "name": "unnamedWire#5",
-        "path": []
+        "name": "unnamedWire#34",
+        "path": [
+          {
+            "x": 415.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 335.0
+          }
+        ]
       },
       {
         "pin1": {
@@ -1036,331 +1029,306 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_1"
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
-        "name": "unnamedWire#54",
-        "path": [
-          {
-            "x": 90.0,
-            "y": 75.0
-          }
-        ]
+        "name": "unnamedWire#38",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EZ"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE1"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#4",
+        "name": "unnamedWire#45",
         "path": [
           {
-            "x": 55.0,
-            "y": 15.0
-          },
-          {
-            "x": 370.0,
-            "y": 15.0
-          },
-          {
-            "x": 370.0,
-            "y": 185.0
+            "x": 50.0,
+            "y": 105.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_2"
-        },
-        "name": "unnamedWire#53",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O0"
+          "compName": "GUINandGate#0",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
-        "name": "unnamedWire#12",
+        "name": "unnamedWire#92",
         "path": [
           {
-            "x": 35.0,
-            "y": 35.0
-          },
-          {
-            "x": 35.0,
-            "y": 125.0
+            "x": 320.0,
+            "y": 95.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A2"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
+          "compName": "WireCrossPoint#11",
           "pinName": ""
         },
-        "name": "unnamedWire#56",
+        "name": "unnamedWire#52",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EC"
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "A"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
-        "name": "unnamedWire#3",
+        "name": "unnamedWire#24",
         "path": [
           {
-            "x": 155.0,
-            "y": 20.0
+            "x": 60.0,
+            "y": 425.0
           },
           {
-            "x": 365.0,
-            "y": 20.0
+            "x": 60.0,
+            "y": 415.0
           },
           {
-            "x": 365.0,
-            "y": 90.0
+            "x": 30.0,
+            "y": 415.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EN"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE3"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
-        "name": "unnamedWire#2",
+        "name": "unnamedWire#37",
         "path": [
           {
-            "x": 255.0,
-            "y": 25.0
-          },
-          {
-            "x": 360.0,
-            "y": 25.0
+            "x": 430.0,
+            "y": 395.0
           },
           {
-            "x": 360.0,
-            "y": 205.0
+            "x": 95.0,
+            "y": 395.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "Y"
-        },
-        "pin2": {
           "compName": "GUISplitter#1",
-          "pinName": "I"
-        },
-        "name": "unnamedWire#11",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A4"
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#55",
+        "name": "unnamedWire#16",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O2"
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_3"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE4"
         },
-        "name": "unnamedWire#14",
+        "name": "unnamedWire#1",
         "path": [
           {
-            "x": 25.0,
-            "y": 55.0
+            "x": 355.0,
+            "y": 30.0
           },
           {
-            "x": 25.0,
-            "y": 145.0
+            "x": 355.0,
+            "y": 215.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#58",
+        "name": "unnamedWire#93",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_2"
+          "compName": "GUIMerger#0",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "Q"
         },
-        "name": "unnamedWire#13",
-        "path": [
-          {
-            "x": 30.0,
-            "y": 135.0
-          },
-          {
-            "x": 30.0,
-            "y": 45.0
-          }
-        ]
+        "name": "unnamedWire#5",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#57",
+        "name": "unnamedWire#75",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_1"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#16",
+        "name": "unnamedWire#56",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_4"
+          "compName": "_submodelinterface",
+          "pinName": "COVD_V"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#15",
+        "name": "unnamedWire#86",
         "path": [
           {
-            "x": 20.0,
-            "y": 155.0
+            "x": 375.0,
+            "y": 325.0
           },
           {
-            "x": 20.0,
-            "y": 65.0
+            "x": 320.0,
+            "y": 325.0
+          },
+          {
+            "x": 320.0,
+            "y": 315.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_1"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#59",
+        "name": "unnamedWire#69",
         "path": [
           {
-            "x": 20.0,
-            "y": 245.0
+            "x": 105.0,
+            "y": 235.0
+          },
+          {
+            "x": 105.0,
+            "y": 65.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O2"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_3"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#18",
+        "name": "unnamedWire#9",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D4"
+        },
+        "name": "unnamedWire#70",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 215.0
+          },
+          {
+            "x": 295.0,
+            "y": 255.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#17",
+        "name": "unnamedWire#64",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_4"
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#19",
+        "name": "unnamedWire#7",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
+          "compName": "WireCrossPoint#5",
           "pinName": ""
         },
-        "name": "unnamedWire#61",
+        "name": "unnamedWire#39",
         "path": [
-          {
-            "x": 75.0,
-            "y": 265.0
+          {
+            "x": 85.0,
+            "y": 325.0
           }
         ]
       },
@@ -1378,139 +1346,144 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#63",
+        "name": "unnamedWire#85",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O3"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_4"
-        },
-        "name": "unnamedWire#62",
-        "path": [
-          {
-            "x": 80.0,
-            "y": 325.0
-          },
-          {
-            "x": 80.0,
-            "y": 275.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#0",
+          "compName": "WireCrossPoint#3",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#21",
+        "name": "unnamedWire#27",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_3"
+          "compName": "GUINandGate#0",
+          "pinName": "B"
         },
-        "name": "unnamedWire#65",
+        "name": "unnamedWire#91",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "MUX"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#2",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_2"
         },
-        "name": "unnamedWire#20",
+        "name": "unnamedWire#40",
         "path": [
           {
-            "x": 40.0,
-            "y": 435.0
+            "x": 95.0,
+            "y": 305.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_2"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
-        "name": "unnamedWire#64",
-        "path": []
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 230.0
+          },
+          {
+            "x": 50.0,
+            "y": 230.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#67",
+        "name": "unnamedWire#81",
         "path": [
           {
-            "x": 195.0,
-            "y": 435.0
+            "x": 215.0,
+            "y": 65.0
+          },
+          {
+            "x": 215.0,
+            "y": 195.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "B"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE1"
         },
-        "name": "unnamedWire#23",
+        "name": "unnamedWire#4",
         "path": [
           {
-            "x": 25.0,
-            "y": 305.0
+            "x": 55.0,
+            "y": 15.0
           },
           {
-            "x": 25.0,
-            "y": 265.0
+            "x": 370.0,
+            "y": 15.0
+          },
+          {
+            "x": 370.0,
+            "y": 185.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "I"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D1"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y1"
         },
-        "name": "unnamedWire#22",
-        "path": []
+        "name": "unnamedWire#73",
+        "path": [
+          {
+            "x": 310.0,
+            "y": 225.0
+          },
+          {
+            "x": 310.0,
+            "y": 185.0
+          }
+        ]
       },
       {
         "pin1": {
@@ -1526,84 +1499,128 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "S0"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE3"
         },
-        "name": "unnamedWire#69",
+        "name": "unnamedWire#2",
         "path": [
           {
-            "x": 105.0,
-            "y": 235.0
+            "x": 255.0,
+            "y": 25.0
           },
           {
-            "x": 105.0,
-            "y": 65.0
+            "x": 360.0,
+            "y": 25.0
+          },
+          {
+            "x": 360.0,
+            "y": 205.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
-        "name": "unnamedWire#25",
+        "name": "unnamedWire#55",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#24",
+        "name": "unnamedWire#33",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE2"
+        },
+        "name": "unnamedWire#72",
         "path": [
           {
-            "x": 60.0,
-            "y": 425.0
+            "x": 420.0,
+            "y": 90.0
           },
           {
-            "x": 60.0,
-            "y": 415.0
+            "x": 420.0,
+            "y": 110.0
           },
           {
-            "x": 30.0,
-            "y": 415.0
+            "x": 365.0,
+            "y": 110.0
+          },
+          {
+            "x": 365.0,
+            "y": 195.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
+          "compName": "WireCrossPoint#11",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#68",
+        "name": "unnamedWire#51",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I2"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
-        "name": "unnamedWire#27",
+        "name": "unnamedWire#83",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#58",
         "path": []
       },
       {
@@ -1620,263 +1637,258 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D3"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q4"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y3"
         },
-        "name": "unnamedWire#29",
-        "path": []
+        "name": "unnamedWire#71",
+        "path": [
+          {
+            "x": 300.0,
+            "y": 245.0
+          },
+          {
+            "x": 300.0,
+            "y": 205.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I3"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#4",
+          "compName": "WireCrossPoint#1",
           "pinName": ""
         },
-        "name": "unnamedWire#28",
+        "name": "unnamedWire#6",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y4"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D4"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#70",
+        "name": "unnamedWire#59",
         "path": [
           {
-            "x": 295.0,
-            "y": 215.0
-          },
-          {
-            "x": 295.0,
-            "y": 255.0
+            "x": 20.0,
+            "y": 245.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE2"
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#72",
+        "name": "unnamedWire#15",
         "path": [
           {
-            "x": 420.0,
-            "y": 90.0
-          },
-          {
-            "x": 420.0,
-            "y": 110.0
-          },
-          {
-            "x": 365.0,
-            "y": 110.0
+            "x": 20.0,
+            "y": 155.0
           },
           {
-            "x": 365.0,
-            "y": 195.0
+            "x": 20.0,
+            "y": 65.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D3"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y3"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#71",
+        "name": "unnamedWire#80",
         "path": [
           {
-            "x": 300.0,
-            "y": 245.0
+            "x": 210.0,
+            "y": 205.0
           },
           {
-            "x": 300.0,
-            "y": 205.0
+            "x": 210.0,
+            "y": 75.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_1"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D2"
         },
-        "name": "unnamedWire#30",
-        "path": []
+        "name": "unnamedWire#88",
+        "path": [
+          {
+            "x": 365.0,
+            "y": 295.0
+          },
+          {
+            "x": 365.0,
+            "y": 235.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_4"
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y4"
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#74",
-        "path": []
+        "name": "unnamedWire#62",
+        "path": [
+          {
+            "x": 80.0,
+            "y": 325.0
+          },
+          {
+            "x": 80.0,
+            "y": 275.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#73",
+        "name": "unnamedWire#87",
         "path": [
           {
-            "x": 310.0,
-            "y": 225.0
+            "x": 305.0,
+            "y": 195.0
           },
           {
-            "x": 310.0,
-            "y": 185.0
+            "x": 305.0,
+            "y": 305.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_3"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
-        "name": "unnamedWire#32",
+        "name": "unnamedWire#90",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_2"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#76",
+        "name": "unnamedWire#50",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
+          "compName": "DeserializedSubmodelComponent#6",
           "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "Y2"
         },
-        "name": "unnamedWire#31",
+        "name": "unnamedWire#76",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#75",
+        "name": "unnamedWire#30",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A1"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#34",
-        "path": [
-          {
-            "x": 415.0,
-            "y": 380.0
-          },
-          {
-            "x": 80.0,
-            "y": 380.0
-          },
-          {
-            "x": 80.0,
-            "y": 335.0
-          }
-        ]
+        "name": "unnamedWire#74",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_4"
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
         },
-        "name": "unnamedWire#78",
+        "name": "unnamedWire#3",
         "path": [
           {
-            "x": 200.0,
-            "y": 225.0
+            "x": 155.0,
+            "y": 20.0
           },
           {
-            "x": 200.0,
-            "y": 95.0
+            "x": 365.0,
+            "y": 20.0
+          },
+          {
+            "x": 365.0,
+            "y": 90.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_4"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y4"
-        },
-        "name": "unnamedWire#33",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y1"
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_1"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#77",
+        "name": "unnamedWire#8",
         "path": []
       }
-    ]
+    ],
+    "version": "0.1.1"
   },
   "symbolRendererSnippetID": "simpleRectangularLike",
   "symbolRendererParams": {
@@ -1891,5 +1903,6 @@ mograsim version: 0.1.3
   "highLevelStateHandlerParams": {
     "subcomponentHighLevelStates": {},
     "atomicHighLevelStates": {}
-  }
+  },
+  "version": "0.1.4"
 }
\ No newline at end of file
index f0f1818..dc3c479 100644 (file)
@@ -47,7 +47,6 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                // 110: Swap OVR and C
                // 111: _M
                addPin(new Pin(this, "MSR_MUX", 3, 20, 0), Usage.OUTPUT, Position.BOTTOM);
-               // TODO when is this HIGH?
                addPin(new Pin(this, "OEN", 1, 60, 0), Usage.OUTPUT, Position.BOTTOM);
                // Y MUX:
                // 00: mu
@@ -101,7 +100,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                {
                case 0:
                case 2:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
@@ -110,7 +109,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 1:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
@@ -147,7 +146,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 9:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
@@ -165,7 +164,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 11:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
@@ -183,7 +182,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 13:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
@@ -201,7 +200,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 15:
-                       readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
+                       readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
                        readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
@@ -235,10 +234,10 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                switch (IAsInt)
                {
                case 0:
-                       readWriteEnds.get("MSR_MUX").feedSignals(ONE, ONE, ZERO);
+                       readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ONE, ONE);
                        break;
                case 1:
-                       readWriteEnds.get("MSR_MUX").feedSignals(ONE, ZERO, ZERO);
+                       readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ZERO, ONE);
                        break;
                case 2:
                        readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ONE, ZERO);
@@ -247,7 +246,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ZERO, ZERO);
                        break;
                case 4:
-                       readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ONE, ONE);
+                       readWriteEnds.get("MSR_MUX").feedSignals(ONE, ONE, ZERO);
                        break;
                case 5:
                        readWriteEnds.get("MSR_MUX").feedSignals(ONE, ONE, ONE);
@@ -263,9 +262,10 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("MSR_MUX").feedSignals(ONE, ZERO, ONE);
                        break;
                default:
-                       readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ZERO, ONE);
+                       readWriteEnds.get("MSR_MUX").feedSignals(ONE, ZERO, ZERO);
                        break;
                }
+               readWriteEnds.get("OEN").feedSignals(I5_0Bits[0].or(I5_0Bits[1]).or(I5_0Bits[2]).or(I5_0Bits[3]).or(I5_0Bits[4]).or(I5_0Bits[5]));
                readWriteEnds.get("Y_MUX").feedSignals(I5_0Bits[0], I5_0Bits[1]);
                readWriteEnds.get("CT_INV").feedSignals(I5_0Bits[5]);
                readWriteEnds.get("CT_MUX").feedSignals(I5_0Bits[2], I5_0Bits[3], I5_0Bits[4]);
index 0b990db..51b6da0 100644 (file)
@@ -3,6 +3,7 @@ package net.mograsim.logic.model.am2900.components.am2904;
 import static net.mograsim.logic.core.types.Bit.ONE;
 import static net.mograsim.logic.core.types.Bit.U;
 import static net.mograsim.logic.core.types.Bit.X;
+import static net.mograsim.logic.core.types.Bit.Z;
 import static net.mograsim.logic.core.types.Bit.ZERO;
 
 import java.util.Map;
@@ -21,8 +22,9 @@ public class GUIAm2904ShiftInstrDecode extends SimpleRectangularHardcodedGUIComp
        public GUIAm2904ShiftInstrDecode(ViewModelModifiable model, String name)
        {
                super(model, name, "Shift \ninstruction\ndecode");
-               setSize(60, 70);
-               addPin(new Pin(this, "I", 5, 0, 35), Usage.INPUT, Position.RIGHT);
+               setSize(60, 80);
+               addPin(new Pin(this, "I", 5, 0, 25), Usage.INPUT, Position.RIGHT);
+               addPin(new Pin(this, "_SE", 1, 0, 55), Usage.INPUT, Position.RIGHT);
                // SIO0 MUX:
                // 000: 0
                // 001: 1
@@ -54,19 +56,51 @@ public class GUIAm2904ShiftInstrDecode extends SimpleRectangularHardcodedGUIComp
                // 10x: QIO0
                // 11x: MN
                addPin(new Pin(this, "QIOn_MUX", 3, 60, 35), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "LSHIFT", 1, 60, 45), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "OEn", 1, 60, 45), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "OE0", 1, 60, 55), Usage.OUTPUT, Position.LEFT);
                // 00: SIO0
                // 01: QIO0
                // 1x: SIOn
-               addPin(new Pin(this, "MC_MUX", 2, 60, 55), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "MC_EN", 1, 60, 65), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "MC_MUX", 2, 60, 65), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "MC_EN", 1, 60, 75), Usage.OUTPUT, Position.LEFT);
        }
 
        @Override
        protected Object recalculate(Object lastState, Map<String, ReadEnd> readEnds, Map<String, ReadWriteEnd> readWriteEnds)
        {
+               Bit _SE = readEnds.get("_SE").getValue();
                Bit[] IBits = readEnds.get("I").getValues().getBits();
-               readWriteEnds.get("LSHIFT").feedSignals(IBits[0]);
+               readWriteEnds.get("OEn").feedSignals(IBits[0].not().and(_SE.not()));
+               readWriteEnds.get("OE0").feedSignals(IBits[0].and(_SE.not()));
+               if (_SE == Z || _SE == X)
+               {
+                       readWriteEnds.get("SIO0_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("SIOn_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("QIO0_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("QIOn_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("MC_MUX").feedSignals(X, X);
+                       readWriteEnds.get("MC_EN").feedSignals(X);
+                       return null;
+               } else if (_SE == U)
+               {
+
+                       readWriteEnds.get("SIO0_MUX").feedSignals(U, U, U);
+                       readWriteEnds.get("SIOn_MUX").feedSignals(U, U, U);
+                       readWriteEnds.get("QIO0_MUX").feedSignals(U, U, U);
+                       readWriteEnds.get("QIOn_MUX").feedSignals(U, U, U);
+                       readWriteEnds.get("MC_MUX").feedSignals(U, U);
+                       readWriteEnds.get("MC_EN").feedSignals(U);
+                       return null;
+               } else if (_SE == ONE)
+               {
+                       readWriteEnds.get("SIO0_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("SIOn_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("QIO0_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("QIOn_MUX").feedSignals(X, X, X);
+                       readWriteEnds.get("MC_MUX").feedSignals(X, X);
+                       readWriteEnds.get("MC_EN").feedSignals(ZERO);
+                       return null;
+               }
                // TODO move the following loop to BitVector.
                int IAsInt = 0;
                for (int i = 0; i < 5; i++)
diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2904Testbench.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2904Testbench.java
new file mode 100644 (file)
index 0000000..a4c4290
--- /dev/null
@@ -0,0 +1,58 @@
+package net.mograsim.logic.model.examples;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+import net.mograsim.logic.model.serializing.IdentifierGetter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.snippets.Renderer;
+
+public class Am2904Testbench
+{
+       public static void main(String[] args)
+       {
+               SimpleLogicUIStandalone.executeVisualisation(Am2904Testbench::create, Am2904Testbench::beforeRun);
+       }
+
+       public static void create(ViewModelModifiable model)
+       {
+               // TODO use _SE in GUIAm2904.json
+               // TODO replace with proper ViewModel deserialization
+               DeserializedSubmodelComponent testbench = (DeserializedSubmodelComponent) IndirectGUIComponentCreator.createComponent(model,
+                               "file:GUIAm2904Testbench.json", "testbench");
+               testbench.setSize(1000, 1000);
+               testbench.setOutlineRenderer(new Renderer()
+               {
+                       @Override
+                       public Object getParamsForSerializing(IdentifierGetter idGetter)
+                       {
+                               return null;
+                       }
+
+                       @Override
+                       public void render(GeneralGC gc, Rectangle visibleRegion)
+                       {
+                               // do nothing
+                       }
+               });
+       }
+
+       public static void beforeRun(VisualisationObjects vis)
+       {
+               ((SubmodelComponent) vis.model.getComponentsByName().get("testbench")).submodel.getComponentsByName().values().forEach(c ->
+               {
+                       if (c instanceof GUIManualSwitch)
+                       {
+                               GUIManualSwitch cCasted = (GUIManualSwitch) c;
+                               cCasted.setHighLevelState("out", BitVector.of(Bit.ZERO, cCasted.logicWidth));
+                       }
+               });
+       }
+}
\ No newline at end of file
index 318840b..dd1723b 100644 (file)
@@ -1,4 +1,3 @@
-mograsim version: 0.1.3
 {
   "width": 120.0,
   "height": 178.0,
@@ -19,14 +18,6 @@ mograsim version: 0.1.3
       "name": "_CEM",
       "logicWidth": 1
     },
-    {
-      "location": {
-        "x": 120.0,
-        "y": 11.0
-      },
-      "name": "YZ",
-      "logicWidth": 1
-    },
     {
       "location": {
         "x": 0.0,
@@ -35,22 +26,6 @@ mograsim version: 0.1.3
       "name": "C",
       "logicWidth": 1
     },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 20.0
-      },
-      "name": "IN",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 61.0,
-        "y": 0.0
-      },
-      "name": "_OEY",
-      "logicWidth": 1
-    },
     {
       "location": {
         "x": 0.0,
@@ -85,82 +60,130 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": 120.0,
-        "y": 118.0
+        "x": 0.0,
+        "y": 36.0
       },
-      "name": "SIO0",
+      "name": "_EZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 10.0
+        "y": 110.0
       },
-      "name": "IZ",
+      "name": "Cx",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 120.0,
-        "y": 60.0
+        "y": 21.0
       },
-      "name": "CT",
+      "name": "YN",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 128.0
+        "y": 15.0
       },
-      "name": "QIOn",
+      "name": "IC",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 119.0
+        "y": 42.0
       },
-      "name": "SIOn",
+      "name": "_EOVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 11.0
+      },
+      "name": "YZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 33.0
+        "y": 20.0
       },
-      "name": "_CEmu",
+      "name": "IN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 61.0,
+        "y": 0.0
+      },
+      "name": "_OEY",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 36.0
+        "y": 83.0
       },
-      "name": "_EZ",
+      "name": "_SE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 118.0
+      },
+      "name": "SIO0",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 110.0
+        "y": 10.0
       },
-      "name": "Cx",
+      "name": "IZ",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 120.0,
-        "y": 21.0
+        "y": 60.0
       },
-      "name": "YN",
+      "name": "CT",
       "logicWidth": 1
     },
     {
       "location": {
         "x": 0.0,
-        "y": 15.0
+        "y": 128.0
       },
-      "name": "IC",
+      "name": "QIOn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 119.0
+      },
+      "name": "SIOn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 33.0
+      },
+      "name": "_CEmu",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 51.0
+      },
+      "name": "_OECT",
       "logicWidth": 1
     },
     {
@@ -186,27 +209,44 @@ mograsim version: 0.1.3
       },
       "name": "_EC",
       "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 42.0
-      },
-      "name": "_EOVR",
-      "logicWidth": 1
     }
   ],
+  "innerScale": 0.2,
   "submodel": {
-    "innerScale": 0.2,
-    "subComps": [
+    "components": [
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#14",
+        "id": "GUINandGate",
+        "name": "GUINandGate#1",
         "pos": {
-          "x": 520.0,
-          "y": 190.0
+          "x": 130.0,
+          "y": 5.0
         },
-        "params": 4
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#10",
+        "pos": {
+          "x": 340.0,
+          "y": 120.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#21",
+        "pos": {
+          "x": 250.0,
+          "y": 820.0
+        }
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#15",
+        "pos": {
+          "x": 435.0,
+          "y": 575.0
+        }
       },
       {
         "id": "WireCrossPoint",
@@ -219,21 +259,21 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#16",
+        "name": "WireCrossPoint#27",
         "pos": {
-          "x": 255.0,
-          "y": 255.0
+          "x": 440.0,
+          "y": 385.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#15",
+        "name": "WireCrossPoint#6",
         "pos": {
-          "x": 255.0,
-          "y": 265.0
+          "x": 120.0,
+          "y": 15.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
@@ -245,149 +285,123 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#4",
+        "id": "GUIAm2904ShiftInstrDecode",
+        "name": "GUIAm2904ShiftInstrDecode#0",
         "pos": {
-          "x": 565.0,
-          "y": 655.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 50.0,
+          "y": 360.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#17",
-        "pos": {
-          "x": 360.0,
-          "y": 495.0
-        },
-        "params": 1
-      },
-      {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#2",
+        "id": "GUISplitter",
+        "name": "GUISplitter#6",
         "pos": {
-          "x": 10.0,
-          "y": 605.0
+          "x": 285.0,
+          "y": 320.0
         },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
-        }
+        "params": 3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#19",
+        "name": "WireCrossPoint#12",
         "pos": {
-          "x": 35.0,
-          "y": 595.0
+          "x": 195.0,
+          "y": 35.0
         },
         "params": 1
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#3",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#12",
         "pos": {
-          "x": 560.0,
-          "y": 595.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 315.0,
+          "y": 505.0
         }
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#0",
+        "id": "GUIAm2904TestLogic",
+        "name": "DeserializedSubmodelComponent#6",
         "pos": {
-          "x": 530.0,
-          "y": 170.0
-        },
-        "params": {
-          "logicWidth": 4,
-          "orientation": "RIGHT"
+          "x": 225.0,
+          "y": 340.0
         }
       },
       {
-        "id": "GUITriStateBuffer",
-        "name": "GUITriStateBuffer#1",
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#7",
         "pos": {
-          "x": 10.0,
-          "y": 650.0
-        },
-        "params": {
-          "logicWidth": 1,
-          "orientation": "RIGHT"
+          "x": 300.0,
+          "y": 310.0
         }
       },
       {
-        "id": "GUIAm2904muSR",
-        "name": "DeserializedSubmodelComponent#1",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#0",
         "pos": {
-          "x": 270.0,
-          "y": 250.0
-        }
+          "x": 530.0,
+          "y": 70.0
+        },
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#10",
+        "name": "WireCrossPoint#22",
         "pos": {
-          "x": 195.0,
-          "y": 55.0
+          "x": 250.0,
+          "y": 540.0
         },
         "params": 1
       },
       {
-        "id": "GUIAm2904MSR",
-        "name": "DeserializedSubmodelComponent#0",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#14",
         "pos": {
-          "x": 225.0,
-          "y": 95.0
+          "x": 415.0,
+          "y": 465.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#12",
+        "id": "GUINandGate",
+        "name": "GUINandGate#7",
         "pos": {
-          "x": 195.0,
-          "y": 35.0
+          "x": 205.0,
+          "y": 50.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#3",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#17",
         "pos": {
-          "x": 470.0,
-          "y": 160.0
+          "x": 190.0,
+          "y": 460.0
         }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#11",
+        "id": "GUISplitter",
+        "name": "GUISplitter#11",
         "pos": {
-          "x": 195.0,
-          "y": 15.0
+          "x": 405.0,
+          "y": 575.0
         },
-        "params": 1
+        "params": 3
       },
       {
-        "id": "GUIand",
-        "name": "DeserializedSubmodelComponent#2",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#10",
         "pos": {
-          "x": 370.0,
-          "y": 130.0
+          "x": 455.0,
+          "y": 355.0
         }
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
         "pos": {
-          "x": 415.0,
-          "y": 210.0
-        }
+          "x": 150.0,
+          "y": 160.0
+        },
+        "params": 1
       },
       {
         "id": "GUInot4",
@@ -398,97 +412,123 @@ mograsim version: 0.1.3
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#4",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#30",
         "pos": {
-          "x": 25.0,
-          "y": 355.0
+          "x": 550.0,
+          "y": 570.0
         },
-        "params": 2
+        "params": 1
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#3",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#2",
         "pos": {
-          "x": 510.0,
-          "y": 165.0
+          "x": 10.0,
+          "y": 605.0
         },
-        "params": 4
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUImux3",
-        "name": "DeserializedSubmodelComponent#7",
+        "id": "GUIAm2904muSR",
+        "name": "DeserializedSubmodelComponent#1",
         "pos": {
-          "x": 300.0,
-          "y": 310.0
+          "x": 270.0,
+          "y": 250.0
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#2",
+        "id": "GUISplitter",
+        "name": "GUISplitter#7",
         "pos": {
-          "x": 15.0,
-          "y": 65.0
+          "x": 420.0,
+          "y": 325.0
         },
         "params": 4
       },
       {
-        "id": "GUIAm2904TestLogic",
-        "name": "DeserializedSubmodelComponent#6",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#15",
         "pos": {
-          "x": 225.0,
-          "y": 340.0
+          "x": 255.0,
+          "y": 265.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIAm2904RegCTInstrDecode",
+        "name": "GUIAm2904RegCTInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 240.0
         }
       },
       {
         "id": "GUIMerger",
-        "name": "GUIMerger#1",
+        "name": "GUIMerger#3",
         "pos": {
-          "x": 25.0,
-          "y": 305.0
+          "x": 510.0,
+          "y": 165.0
         },
-        "params": 5
+        "params": 4
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#9",
+        "id": "GUISplitter",
+        "name": "GUISplitter#10",
         "pos": {
-          "x": 480.0,
-          "y": 305.0
-        }
+          "x": 420.0,
+          "y": 410.0
+        },
+        "params": 4
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#33",
         "pos": {
-          "x": 25.0,
-          "y": 245.0
+          "x": 530.0,
+          "y": 270.0
         },
-        "params": 6
+        "params": 1
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#8",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#3",
         "pos": {
-          "x": 540.0,
-          "y": 295.0
+          "x": 560.0,
+          "y": 595.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
         }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#9",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#11",
         "pos": {
-          "x": 205.0,
-          "y": 10.0
+          "x": 195.0,
+          "y": 15.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#8",
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
         "pos": {
-          "x": 205.0,
-          "y": 30.0
+          "x": 10.0,
+          "y": 245.0
+        },
+        "params": 13
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 215.0,
+          "y": 180.0
         },
         "params": 1
       },
@@ -502,296 +542,318 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#4",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#1",
         "pos": {
-          "x": 225.0,
-          "y": 155.0
+          "x": 565.0,
+          "y": 180.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#7",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#2",
         "pos": {
-          "x": 205.0,
-          "y": 50.0
+          "x": 530.0,
+          "y": 200.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#6",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#21",
         "pos": {
-          "x": 205.0,
-          "y": 70.0
+          "x": 585.0,
+          "y": 640.0
         },
         "params": 1
       },
       {
-        "id": "GUImux3",
-        "name": "DeserializedSubmodelComponent#23",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#16",
         "pos": {
-          "x": 300.0,
-          "y": 715.0
+          "x": 255.0,
+          "y": 255.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#5",
+        "pos": {
+          "x": 560.0,
+          "y": 290.0
+        },
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
         }
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#22",
+        "id": "GUISplitter",
+        "name": "GUISplitter#14",
         "pos": {
-          "x": 120.0,
+          "x": 90.0,
           "y": 720.0
-        }
+        },
+        "params": 3
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#21",
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
         "pos": {
-          "x": 250.0,
-          "y": 820.0
-        }
+          "x": 555.0,
+          "y": 80.0
+        },
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#30",
+        "id": "GUINandGate",
+        "name": "GUINandGate#2",
         "pos": {
-          "x": 550.0,
-          "y": 570.0
+          "x": 225.0,
+          "y": 195.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#32",
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
         "pos": {
-          "x": 85.0,
-          "y": 590.0
+          "x": 450.0,
+          "y": 175.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#31",
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
         "pos": {
-          "x": 120.0,
-          "y": 545.0
+          "x": 190.0,
+          "y": 145.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#25",
+        "id": "GUISplitter",
+        "name": "GUISplitter#9",
         "pos": {
-          "x": 285.0,
-          "y": 755.0
+          "x": 240.0,
+          "y": 475.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#24",
+        "id": "GUISplitter",
+        "name": "GUISplitter#13",
         "pos": {
-          "x": 285.0,
+          "x": 265.0,
           "y": 725.0
         },
-        "params": 1
+        "params": 3
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#27",
+        "id": "GUIMerger",
+        "name": "GUIMerger#2",
         "pos": {
-          "x": 470.0,
-          "y": 385.0
+          "x": 15.0,
+          "y": 65.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#26",
+        "name": "WireCrossPoint#24",
         "pos": {
-          "x": 290.0,
-          "y": 805.0
+          "x": 285.0,
+          "y": 725.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#29",
+        "id": "GUIAm2904MSR",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 225.0,
+          "y": 95.0
+        }
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#8",
         "pos": {
-          "x": 45.0,
-          "y": 580.0
+          "x": 420.0,
+          "y": 365.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#28",
+        "name": "WireCrossPoint#8",
         "pos": {
-          "x": 470.0,
-          "y": 350.0
+          "x": 215.0,
+          "y": 160.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#14",
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#23",
         "pos": {
-          "x": 90.0,
-          "y": 720.0
-        },
-        "params": 3
+          "x": 300.0,
+          "y": 715.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#15",
+        "id": "GUIMerger",
+        "name": "GUIMerger#4",
         "pos": {
-          "x": 120.0,
-          "y": 455.0
+          "x": 25.0,
+          "y": 355.0
         },
         "params": 2
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#12",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
         "pos": {
-          "x": 405.0,
-          "y": 655.0
+          "x": 335.0,
+          "y": 270.0
         },
-        "params": 3
+        "params": 4
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#13",
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
         "pos": {
-          "x": 265.0,
-          "y": 725.0
+          "x": 25.0,
+          "y": 245.0
         },
-        "params": 3
+        "params": 6
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#10",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#9",
         "pos": {
-          "x": 445.0,
-          "y": 410.0
-        },
-        "params": 4
+          "x": 450.0,
+          "y": 310.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#11",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#1",
         "pos": {
-          "x": 405.0,
-          "y": 575.0
+          "x": 10.0,
+          "y": 650.0
         },
-        "params": 3
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#21",
+        "name": "WireCrossPoint#5",
         "pos": {
-          "x": 585.0,
-          "y": 640.0
+          "x": 530.0,
+          "y": 100.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#20",
+        "id": "GUINandGate",
+        "name": "GUINandGate#4",
         "pos": {
-          "x": 585.0,
-          "y": 590.0
+          "x": 225.0,
+          "y": 155.0
         },
         "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#23",
+        "name": "WireCrossPoint#2",
         "pos": {
-          "x": 330.0,
-          "y": 640.0
+          "x": 295.0,
+          "y": 120.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#22",
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
         "pos": {
-          "x": 250.0,
-          "y": 540.0
+          "x": 395.0,
+          "y": 195.0
         },
-        "params": 1
+        "params": 2
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#1",
+        "id": "GUISplitter",
+        "name": "GUISplitter#5",
         "pos": {
-          "x": 180.0,
-          "y": 135.0
+          "x": 395.0,
+          "y": 265.0
         },
         "params": 4
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#0",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#3",
         "pos": {
-          "x": 165.0,
-          "y": 150.0
-        },
-        "params": 1
+          "x": 470.0,
+          "y": 160.0
+        }
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#3",
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#16",
         "pos": {
-          "x": 335.0,
-          "y": 270.0
-        },
-        "params": 4
+          "x": 435.0,
+          "y": 655.0
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#2",
+        "name": "WireCrossPoint#28",
         "pos": {
-          "x": 295.0,
-          "y": 120.0
+          "x": 440.0,
+          "y": 345.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#5",
+        "name": "WireCrossPoint#17",
         "pos": {
-          "x": 530.0,
-          "y": 100.0
+          "x": 360.0,
+          "y": 495.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#4",
+        "name": "WireCrossPoint#26",
         "pos": {
-          "x": 150.0,
-          "y": 160.0
+          "x": 290.0,
+          "y": 805.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#7",
+        "id": "GUISplitter",
+        "name": "GUISplitter#15",
         "pos": {
-          "x": 215.0,
-          "y": 180.0
+          "x": 120.0,
+          "y": 455.0
         },
-        "params": 1
+        "params": 2
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#6",
+        "name": "WireCrossPoint#0",
         "pos": {
-          "x": 120.0,
-          "y": 15.0
+          "x": 165.0,
+          "y": 150.0
         },
         "params": 1
       },
@@ -805,354 +867,427 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#8",
+        "id": "GUINandGate",
+        "name": "GUINandGate#8",
         "pos": {
-          "x": 215.0,
-          "y": 160.0
+          "x": 205.0,
+          "y": 30.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#18",
+        "id": "GUISplitter",
+        "name": "GUISplitter#4",
         "pos": {
-          "x": 135.0,
-          "y": 470.0
-        }
+          "x": 395.0,
+          "y": 225.0
+        },
+        "params": 4
       },
       {
         "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#17",
+        "name": "DeserializedSubmodelComponent#11",
         "pos": {
-          "x": 190.0,
-          "y": 460.0
+          "x": 265.0,
+          "y": 515.0
         }
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#16",
+        "id": "GUIBitDisplay",
+        "name": "GUIBitDisplay#3",
         "pos": {
-          "x": 435.0,
-          "y": 655.0
-        }
+          "x": 560.0,
+          "y": 150.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux2",
-        "name": "DeserializedSubmodelComponent#15",
+        "id": "GUINandGate",
+        "name": "GUINandGate#3",
         "pos": {
-          "x": 435.0,
-          "y": 575.0
-        }
+          "x": 225.0,
+          "y": 215.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#14",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#19",
         "pos": {
-          "x": 415.0,
-          "y": 465.0
-        }
+          "x": 35.0,
+          "y": 595.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#13",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#14",
         "pos": {
-          "x": 365.0,
-          "y": 485.0
-        }
+          "x": 520.0,
+          "y": 190.0
+        },
+        "params": 4
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#11",
+        "name": "GUINandGate#9",
         "pos": {
-          "x": 60.0,
-          "y": 570.0
+          "x": 205.0,
+          "y": 10.0
         },
         "params": 1
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#12",
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#2",
         "pos": {
-          "x": 315.0,
-          "y": 505.0
+          "x": 380.0,
+          "y": 125.0
         }
       },
       {
         "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#11",
+        "name": "DeserializedSubmodelComponent#13",
         "pos": {
-          "x": 265.0,
-          "y": 515.0
+          "x": 365.0,
+          "y": 485.0
         }
       },
       {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#10",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#25",
         "pos": {
-          "x": 500.0,
-          "y": 360.0
-        }
+          "x": 285.0,
+          "y": 755.0
+        },
+        "params": 1
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#10",
+        "name": "GUINandGate#12",
         "pos": {
-          "x": 340.0,
-          "y": 120.0
+          "x": 540.0,
+          "y": 265.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#1",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#4",
         "pos": {
-          "x": 130.0,
-          "y": 5.0
+          "x": 565.0,
+          "y": 655.0
         },
-        "params": 1
+        "params": {
+          "logicWidth": 1,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#20",
         "pos": {
-          "x": 190.0,
-          "y": 145.0
+          "x": 585.0,
+          "y": 590.0
         },
         "params": 1
       },
       {
         "id": "GUINandGate",
-        "name": "GUINandGate#3",
+        "name": "GUINandGate#6",
         "pos": {
-          "x": 225.0,
-          "y": 215.0
+          "x": 205.0,
+          "y": 70.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#2",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#10",
         "pos": {
-          "x": 225.0,
-          "y": 195.0
+          "x": 195.0,
+          "y": 55.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#9",
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#8",
         "pos": {
-          "x": 240.0,
-          "y": 475.0
-        },
-        "params": 4
+          "x": 495.0,
+          "y": 295.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#4",
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#18",
         "pos": {
-          "x": 395.0,
-          "y": 225.0
-        },
-        "params": 4
+          "x": 135.0,
+          "y": 470.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#3",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
         "pos": {
-          "x": 450.0,
-          "y": 175.0
-        },
-        "params": 4
+          "x": 415.0,
+          "y": 210.0
+        }
       },
       {
         "id": "GUISplitter",
-        "name": "GUISplitter#2",
+        "name": "GUISplitter#12",
         "pos": {
-          "x": 395.0,
-          "y": 195.0
+          "x": 405.0,
+          "y": 655.0
         },
-        "params": 2
+        "params": 3
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#1",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
         "pos": {
-          "x": 555.0,
-          "y": 80.0
+          "x": 180.0,
+          "y": 135.0
         },
         "params": 4
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#8",
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#22",
         "pos": {
-          "x": 445.0,
-          "y": 370.0
-        },
-        "params": 4
+          "x": 120.0,
+          "y": 720.0
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#7",
+        "id": "GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
         "pos": {
-          "x": 445.0,
-          "y": 330.0
+          "x": 535.0,
+          "y": 165.0
         },
-        "params": 4
+        "params": {
+          "logicWidth": 4,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#6",
+        "id": "GUIMerger",
+        "name": "GUIMerger#1",
         "pos": {
-          "x": 285.0,
-          "y": 320.0
+          "x": 25.0,
+          "y": 305.0
         },
-        "params": 3
+        "params": 5
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#32",
         "pos": {
-          "x": 395.0,
-          "y": 265.0
+          "x": 85.0,
+          "y": 590.0
         },
-        "params": 4
+        "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#23",
         "pos": {
-          "x": 10.0,
-          "y": 245.0
+          "x": 330.0,
+          "y": 640.0
+        },
+        "params": 1
+      }
+    ],
+    "wires": [
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#100",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#22",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#8",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#172",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I01"
+        },
+        "name": "unnamedWire#170",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "OEn"
+        },
+        "name": "unnamedWire#202",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_2"
         },
-        "params": 13
+        "name": "unnamedWire#103",
+        "path": []
       },
       {
-        "id": "GUIAm2904RegCTInstrDecode",
-        "name": "GUIAm2904RegCTInstrDecode#0",
-        "pos": {
-          "x": 50.0,
-          "y": 240.0
-        }
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I010"
+        },
+        "name": "unnamedWire#119",
+        "path": []
       },
-      {
-        "id": "GUIAm2904ShiftInstrDecode",
-        "name": "GUIAm2904ShiftInstrDecode#0",
-        "pos": {
-          "x": 50.0,
-          "y": 360.0
-        }
-      }
-    ],
-    "innerWires": [
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "YOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S1"
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#190",
+        "name": "unnamedWire#52",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I010"
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#191",
+        "name": "unnamedWire#7",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#21",
+          "compName": "GUINandGate#2",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I111"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EN"
         },
-        "name": "unnamedWire#194",
+        "name": "unnamedWire#44",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#27",
-          "pinName": ""
+          "compName": "GUINandGate#10",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#26",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#195",
+        "name": "unnamedWire#81",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIMerger#4",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I011"
+          "compName": "GUISplitter#0",
+          "pinName": "O12"
         },
-        "name": "unnamedWire#192",
+        "name": "unnamedWire#140",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I100"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "CT"
         },
-        "name": "unnamedWire#193",
+        "name": "unnamedWire#236",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I10"
+          "compName": "_submodelinterface",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIMerger#2",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#198",
-        "path": []
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 100.0
+          },
+          {
+            "x": 5.0,
+            "y": 85.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#26",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I101"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
-        "name": "unnamedWire#199",
+        "name": "unnamedWire#26",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I110"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEC"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "O1"
+          "compName": "GUINandGate#5",
+          "pinName": "B"
         },
-        "name": "unnamedWire#196",
+        "name": "unnamedWire#48",
         "path": []
       },
       {
@@ -1169,158 +1304,158 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#18",
-          "pinName": ""
+          "compName": "GUIMerger#3",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I10"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#180",
+        "name": "unnamedWire#93",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
+          "compName": "GUISplitter#4",
           "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#183",
+        "name": "unnamedWire#102",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "GUINandGate#12",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S0"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#184",
+        "name": "unnamedWire#122",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#23",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I11"
+          "compName": "GUINandGate#1",
+          "pinName": "A"
         },
-        "name": "unnamedWire#181",
+        "name": "unnamedWire#55",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I11"
+          "compName": "GUISplitter#5",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_2"
         },
-        "name": "unnamedWire#182",
+        "name": "unnamedWire#108",
         "path": []
       },
       {
         "pin1": {
           "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I001"
+          "pinName": "I110"
         },
         "pin2": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#187",
+        "name": "unnamedWire#196",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "I"
+          "compName": "WireCrossPoint#24",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "SIOn_MUX"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#188",
+        "name": "unnamedWire#184",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUISplitter#4",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#24",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#185",
+        "name": "unnamedWire#105",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#25",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "I000"
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
         },
-        "name": "unnamedWire#186",
+        "name": "unnamedWire#218",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#13",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "S2"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "B"
         },
-        "name": "unnamedWire#189",
+        "name": "unnamedWire#123",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#22",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#8",
-          "pinName": "O1"
+          "compName": "GUINandGate#8",
+          "pinName": "A"
         },
-        "name": "unnamedWire#172",
+        "name": "unnamedWire#62",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#22",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "S1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#23",
-          "pinName": ""
+          "compName": "GUISplitter#12",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#173",
+        "name": "unnamedWire#175",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I01"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EOVR"
         },
-        "name": "unnamedWire#170",
+        "name": "unnamedWire#43",
         "path": []
       },
       {
@@ -1332,307 +1467,304 @@ mograsim version: 0.1.3
           "compName": "DeserializedSubmodelComponent#15",
           "pinName": "I10"
         },
-        "name": "unnamedWire#171",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "O0"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I00"
-        },
-        "name": "unnamedWire#176",
+        "name": "unnamedWire#171",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "Y"
+          "compName": "GUIBitDisplay#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "IN"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#177",
+        "name": "unnamedWire#229",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#21",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I111"
         },
-        "name": "unnamedWire#174",
+        "name": "unnamedWire#194",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "S1"
+          "compName": "GUISplitter#6",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUISplitter#12",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S2"
         },
-        "name": "unnamedWire#175",
+        "name": "unnamedWire#127",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#12",
-          "pinName": "I"
+          "compName": "WireCrossPoint#32",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "QIO0_MUX"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#178",
+        "name": "unnamedWire#219",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#16",
-          "pinName": "I01"
+          "compName": "GUISplitter#0",
+          "pinName": "I"
         },
-        "name": "unnamedWire#179",
+        "name": "unnamedWire#3",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "OUT"
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#18",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#161",
+        "name": "unnamedWire#95",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "OUT"
+          "compName": "GUISplitter#13",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#19",
+          "compName": "WireCrossPoint#24",
           "pinName": ""
         },
-        "name": "unnamedWire#162",
+        "name": "unnamedWire#183",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "QIO0"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "B"
         },
-        "name": "unnamedWire#160",
+        "name": "unnamedWire#200",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "IN"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "Y"
+          "compName": "GUISplitter#4",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#165",
+        "name": "unnamedWire#104",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "SIO0_MUX"
+          "compName": "GUINandGate#8",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "GUISplitter#11",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#166",
+        "name": "unnamedWire#72",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "OUT"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "O"
         },
-        "name": "unnamedWire#163",
-        "path": []
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 395.0
+          },
+          {
+            "x": 40.0,
+            "y": 325.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "OUT"
+          "compName": "_submodelinterface",
+          "pinName": "QIO0"
         },
         "pin2": {
           "compName": "WireCrossPoint#21",
           "pinName": ""
         },
-        "name": "unnamedWire#164",
+        "name": "unnamedWire#160",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "GUISplitter#11",
-          "pinName": "O1"
+          "compName": "GUIMerger#3",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#169",
+        "name": "unnamedWire#91",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#11",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I10"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "I00"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
-        "name": "unnamedWire#167",
+        "name": "unnamedWire#198",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#11",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#15",
-          "pinName": "S1"
+          "compName": "GUINandGate#6",
+          "pinName": "A"
         },
-        "name": "unnamedWire#168",
+        "name": "unnamedWire#60",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "OUT"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y000"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I000"
         },
-        "name": "unnamedWire#79",
+        "name": "unnamedWire#121",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#10",
+          "compName": "DeserializedSubmodelComponent#21",
           "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#81",
+        "name": "unnamedWire#206",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y111"
         },
         "pin2": {
-          "compName": "GUINandGate#10",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I111"
         },
-        "name": "unnamedWire#80",
+        "name": "unnamedWire#114",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#10",
-          "pinName": "Y"
+          "compName": "GUISplitter#10",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "A"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#83",
+        "name": "unnamedWire#144",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
+          "compName": "WireCrossPoint#25",
           "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_OEY"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I000"
         },
-        "name": "unnamedWire#82",
+        "name": "unnamedWire#186",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_1"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I101"
         },
-        "name": "unnamedWire#85",
+        "name": "unnamedWire#199",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_CEmu"
         },
-        "name": "unnamedWire#84",
+        "name": "unnamedWire#35",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I01"
         },
-        "name": "unnamedWire#87",
+        "name": "unnamedWire#179",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_2"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y2"
+          "compName": "GUIBitDisplay#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#86",
+        "name": "unnamedWire#230",
         "path": []
       },
       {
@@ -1649,2198 +1781,2193 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I1_4"
+          "compName": "GUINandGate#12",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y4"
+          "compName": "WireCrossPoint#33",
+          "pinName": ""
+        },
+        "name": "unnamedWire#234",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#88",
+        "name": "unnamedWire#27",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "I1"
+          "compName": "GUISplitter#12",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y2"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "QIO0_MUX"
         },
-        "name": "unnamedWire#90",
+        "name": "unnamedWire#178",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "I3"
+          "compName": "GUISplitter#14",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#92",
+        "name": "unnamedWire#208",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y3"
+          "compName": "GUIMerger#4",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUIMerger#3",
-          "pinName": "I2"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I12-11"
         },
-        "name": "unnamedWire#91",
+        "name": "unnamedWire#141",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "Y_MUX"
+          "compName": "WireCrossPoint#18",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#2",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I10"
         },
-        "name": "unnamedWire#94",
+        "name": "unnamedWire#180",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#3",
-          "pinName": "O"
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#93",
+        "name": "unnamedWire#212",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O1"
+          "compName": "GUIMerger#3",
+          "pinName": "I1"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "S0"
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#96",
+        "name": "unnamedWire#90",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O0"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "S0"
+          "compName": "GUINandGate#3",
+          "pinName": "B"
         },
-        "name": "unnamedWire#95",
+        "name": "unnamedWire#59",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_2"
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#98",
+        "name": "unnamedWire#70",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I100"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#97",
+        "name": "unnamedWire#193",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I100"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y100"
         },
-        "name": "unnamedWire#99",
+        "name": "unnamedWire#117",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#2",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A1"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEN"
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#58",
+        "name": "unnamedWire#75",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_CEM"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "C0_MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "GUISplitter#9",
+          "pinName": "I"
         },
-        "name": "unnamedWire#57",
+        "name": "unnamedWire#142",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEOVR"
+          "compName": "_submodelinterface",
+          "pinName": "IZ"
         },
         "pin2": {
-          "compName": "GUINandGate#3",
-          "pinName": "B"
+          "compName": "GUIMerger#2",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#59",
-        "path": []
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 50.0
+          },
+          {
+            "x": 5.0,
+            "y": 65.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUINandGate#7",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I001"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y001"
         },
-        "name": "unnamedWire#61",
+        "name": "unnamedWire#120",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "GUINandGate#6",
-          "pinName": "A"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#60",
+        "name": "unnamedWire#79",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#9",
-          "pinName": "A"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "MSR_MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "MUX"
         },
-        "name": "unnamedWire#63",
+        "name": "unnamedWire#31",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "GUISplitter#14",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUINandGate#8",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#62",
+        "name": "unnamedWire#209",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
+          "compName": "WireCrossPoint#8",
           "pinName": ""
         },
-        "name": "unnamedWire#65",
+        "name": "unnamedWire#36",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Q"
         },
         "pin2": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
-        "name": "unnamedWire#64",
+        "name": "unnamedWire#25",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "GUINandGate#7",
+          "compName": "GUINandGate#5",
           "pinName": "Y"
         },
-        "name": "unnamedWire#67",
+        "name": "unnamedWire#45",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#6",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EOVR"
+          "compName": "_submodelinterface",
+          "pinName": "Cx"
         },
-        "name": "unnamedWire#66",
+        "name": "unnamedWire#152",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#9",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O8"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EZ"
+          "compName": "GUIMerger#1",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#69",
+        "name": "unnamedWire#12",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#8",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#33",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "_EC"
+          "compName": "_submodelinterface",
+          "pinName": "_OECT"
         },
-        "name": "unnamedWire#68",
+        "name": "unnamedWire#235",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#1",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I4"
         },
-        "name": "unnamedWire#70",
+        "name": "unnamedWire#8",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#8",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y2"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#72",
+        "name": "unnamedWire#153",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y1"
+          "compName": "GUISplitter#8",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUINandGate#9",
-          "pinName": "B"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
-        "name": "unnamedWire#71",
+        "name": "unnamedWire#135",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y4"
+          "compName": "GUINandGate#6",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#6",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EOVR"
         },
-        "name": "unnamedWire#74",
+        "name": "unnamedWire#66",
         "path": []
       },
       {
         "pin1": {
           "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y3"
+          "pinName": "Y4"
         },
         "pin2": {
-          "compName": "GUINandGate#7",
+          "compName": "GUINandGate#6",
           "pinName": "B"
         },
-        "name": "unnamedWire#73",
+        "name": "unnamedWire#74",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EC"
+          "compName": "GUIMerger#0",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A2"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I5-0"
         },
-        "name": "unnamedWire#76",
+        "name": "unnamedWire#15",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_EZ"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "C"
         },
-        "name": "unnamedWire#75",
+        "name": "unnamedWire#29",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EOVR"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A4"
+          "compName": "GUIBitDisplay#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#78",
+        "name": "unnamedWire#232",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "A3"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "C"
         },
-        "name": "unnamedWire#77",
+        "name": "unnamedWire#30",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "EN"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
+          "compName": "WireCrossPoint#30",
           "pinName": ""
         },
-        "name": "unnamedWire#36",
+        "name": "unnamedWire#214",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "_CEmu"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#35",
+        "name": "unnamedWire#129",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I001"
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#25",
           "pinName": ""
         },
-        "name": "unnamedWire#38",
+        "name": "unnamedWire#187",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#4",
-          "pinName": "A"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#37",
+        "name": "unnamedWire#84",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#17",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "A"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
-        "name": "unnamedWire#39",
+        "name": "unnamedWire#223",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O3"
+          "compName": "GUINandGate#1",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_4"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
-        "name": "unnamedWire#110",
+        "name": "unnamedWire#56",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "I"
+          "compName": "GUISplitter#9",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#111",
+        "name": "unnamedWire#146",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y111"
+          "compName": "_submodelinterface",
+          "pinName": "_SE"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I111"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "_SE"
         },
-        "name": "unnamedWire#114",
+        "name": "unnamedWire#213",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I110"
+          "compName": "_submodelinterface",
+          "pinName": "YC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y110"
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#115",
+        "name": "unnamedWire#50",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#0",
-          "pinName": "IN"
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#112",
+        "name": "unnamedWire#5",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y101"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I101"
         },
-        "name": "unnamedWire#113",
+        "name": "unnamedWire#116",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y011"
+          "compName": "GUISplitter#6",
+          "pinName": "O0"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I011"
+          "pinName": "S0"
         },
-        "name": "unnamedWire#118",
+        "name": "unnamedWire#125",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y010"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I010"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#119",
+        "name": "unnamedWire#224",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUIMerger#2",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUINandGate#2",
-          "pinName": "A"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#41",
+        "name": "unnamedWire#22",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y101"
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I101"
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#116",
+        "name": "unnamedWire#4",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#40",
+        "name": "unnamedWire#177",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I100"
+          "compName": "GUINandGate#9",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y100"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#117",
+        "name": "unnamedWire#69",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#3",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EOVR"
+          "compName": "GUIBitDisplay#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#43",
+        "name": "unnamedWire#231",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#3",
-          "pinName": "A"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
           "compName": "WireCrossPoint#9",
           "pinName": ""
         },
-        "name": "unnamedWire#42",
+        "name": "unnamedWire#40",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EC"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#45",
+        "name": "unnamedWire#207",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#2",
-          "pinName": "Y"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_EXP"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EN"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#44",
+        "name": "unnamedWire#128",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#4",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "S0"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEZ"
+          "compName": "GUISplitter#11",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#47",
+        "name": "unnamedWire#169",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#4",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "_EZ"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#46",
+        "name": "unnamedWire#54",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
+          "compName": "GUISplitter#12",
           "pinName": "O0"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "YZ"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#49",
+        "name": "unnamedWire#176",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_WEC"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#5",
-          "pinName": "B"
+          "compName": "_submodelinterface",
+          "pinName": "SIO0"
         },
-        "name": "unnamedWire#48",
+        "name": "unnamedWire#159",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#32",
+          "compName": "WireCrossPoint#30",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#11",
-          "pinName": "Y"
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "EN"
         },
-        "name": "unnamedWire#220",
+        "name": "unnamedWire#215",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "I0_4"
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#100",
+        "name": "unnamedWire#98",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "I0"
+          "compName": "GUISplitter#6",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#221",
+        "name": "unnamedWire#126",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#27",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_2"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
-        "name": "unnamedWire#103",
+        "name": "unnamedWire#195",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#20",
+          "compName": "WireCrossPoint#7",
           "pinName": ""
         },
-        "name": "unnamedWire#224",
+        "name": "unnamedWire#38",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I110"
         },
         "pin2": {
-          "compName": "GUISplitter#4",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y110"
         },
-        "name": "unnamedWire#104",
+        "name": "unnamedWire#115",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#21",
-          "pinName": ""
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_MUX"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "I1"
+          "compName": "GUISplitter#15",
+          "pinName": "I"
         },
-        "name": "unnamedWire#225",
+        "name": "unnamedWire#226",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "I"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "SIOn"
         },
-        "name": "unnamedWire#101",
+        "name": "unnamedWire#158",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "Y"
+          "compName": "GUISplitter#0",
+          "pinName": "O10"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "COVD_V"
+          "compName": "GUIMerger#1",
+          "pinName": "I4"
         },
-        "name": "unnamedWire#222",
+        "name": "unnamedWire#14",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "S0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_1"
+          "compName": "GUISplitter#9",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#102",
+        "name": "unnamedWire#155",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#17",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUINandGate#5",
+          "pinName": "A"
         },
-        "name": "unnamedWire#223",
+        "name": "unnamedWire#39",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "YC"
+          "compName": "GUITriStateBuffer#5",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#50",
+        "name": "unnamedWire#237",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O0"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_1"
+          "compName": "GUINandGate#2",
+          "pinName": "A"
         },
-        "name": "unnamedWire#107",
+        "name": "unnamedWire#41",
         "path": []
       },
       {
         "pin1": {
           "compName": "GUISplitter#15",
-          "pinName": "O1"
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#17",
+          "compName": "DeserializedSubmodelComponent#18",
           "pinName": "S0"
         },
-        "name": "unnamedWire#228",
+        "name": "unnamedWire#227",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#5",
-          "pinName": "O1"
+          "compName": "GUISplitter#14",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_2"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#108",
+        "name": "unnamedWire#211",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "YOVR"
+          "compName": "GUITriStateBuffer#1",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#18",
+          "pinName": ""
         },
-        "name": "unnamedWire#52",
+        "name": "unnamedWire#161",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
-          "pinName": "O3"
+          "compName": "GUISplitter#13",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_4"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#105",
+        "name": "unnamedWire#190",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "MC_MUX"
+          "compName": "GUISplitter#12",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUISplitter#15",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#226",
+        "name": "unnamedWire#174",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
+          "compName": "GUISplitter#0",
           "pinName": "O2"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "YN"
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#51",
+        "name": "unnamedWire#6",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#4",
+          "compName": "GUISplitter#1",
           "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#5",
           "pinName": ""
         },
-        "name": "unnamedWire#106",
+        "name": "unnamedWire#53",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#15",
-          "pinName": "O0"
+          "compName": "GUINandGate#2",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#18",
-          "pinName": "S0"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEN"
         },
-        "name": "unnamedWire#227",
+        "name": "unnamedWire#58",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#5",
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#132",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "QIOn"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#18",
           "pinName": ""
         },
+        "name": "unnamedWire#157",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EN"
+        },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "GUINandGate#7",
           "pinName": "Y"
         },
-        "name": "unnamedWire#54",
+        "name": "unnamedWire#67",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "I"
+          "compName": "GUINandGate#4",
+          "pinName": "B"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEZ"
         },
-        "name": "unnamedWire#53",
+        "name": "unnamedWire#47",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#1",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#56",
+        "name": "unnamedWire#87",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUISplitter#5",
-          "pinName": "O2"
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#109",
+        "name": "unnamedWire#131",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#6",
+          "compName": "WireCrossPoint#17",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUINandGate#1",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#13",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#55",
+        "name": "unnamedWire#150",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O10"
+          "compName": "GUISplitter#13",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I4"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "S2"
         },
-        "name": "unnamedWire#14",
+        "name": "unnamedWire#189",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I3"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O9"
+          "compName": "DeserializedSubmodelComponent#16",
+          "pinName": "I11"
         },
-        "name": "unnamedWire#13",
+        "name": "unnamedWire#181",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "O"
+          "compName": "_submodelinterface",
+          "pinName": "C0"
         },
-        "name": "unnamedWire#16",
-        "path": [
-          {
-            "x": 40.0,
-            "y": 395.0
-          },
-          {
-            "x": 40.0,
-            "y": 325.0
-          }
-        ]
+        "name": "unnamedWire#156",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "O"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_MUX"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "I5-0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "MUX"
         },
-        "name": "unnamedWire#15",
+        "name": "unnamedWire#1",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IN"
+          "compName": "GUISplitter#0",
+          "pinName": "O6"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I2"
+          "compName": "GUIMerger#1",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#18",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 100.0
-          },
-          {
-            "x": 5.0,
-            "y": 85.0
-          }
-        ]
+        "name": "unnamedWire#10",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IOVR"
+          "compName": "DeserializedSubmodelComponent#17",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_V"
         },
-        "name": "unnamedWire#17",
-        "path": [
-          {
-            "x": 10.0,
-            "y": 125.0
-          },
-          {
-            "x": 10.0,
-            "y": 95.0
-          }
-        ]
+        "name": "unnamedWire#222",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IC"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "Y_MUX"
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I1"
+          "compName": "GUISplitter#2",
+          "pinName": "I"
         },
-        "name": "unnamedWire#19",
+        "name": "unnamedWire#94",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "I"
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "QIOn_MUX"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A4"
         },
-        "name": "unnamedWire#210",
+        "name": "unnamedWire#78",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#29",
+          "compName": "WireCrossPoint#3",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#31",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "mu"
         },
-        "name": "unnamedWire#213",
+        "name": "unnamedWire#28",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#3",
-          "pinName": "EN"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#30",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#214",
+        "name": "unnamedWire#86",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I00"
+          "compName": "DeserializedSubmodelComponent#12",
+          "pinName": "B"
         },
-        "name": "unnamedWire#211",
+        "name": "unnamedWire#147",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "IN"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I010"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#23",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#212",
+        "name": "unnamedWire#191",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#31",
+          "compName": "WireCrossPoint#33",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "LSHIFT"
+          "compName": "GUINandGate#12",
+          "pinName": "A"
         },
-        "name": "unnamedWire#217",
+        "name": "unnamedWire#233",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUITriStateBuffer#2",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_CEM"
         },
         "pin2": {
-          "compName": "WireCrossPoint#32",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
-        "name": "unnamedWire#218",
+        "name": "unnamedWire#57",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#30",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A3"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#4",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
         },
-        "name": "unnamedWire#215",
+        "name": "unnamedWire#77",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#31",
-          "pinName": ""
+          "compName": "GUINandGate#7",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#30",
+          "compName": "WireCrossPoint#10",
           "pinName": ""
         },
-        "name": "unnamedWire#216",
+        "name": "unnamedWire#61",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_CINV"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "CINV"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I"
         },
-        "name": "unnamedWire#21",
+        "name": "unnamedWire#23",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "IZ"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#2",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#20",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 50.0
-          },
-          {
-            "x": 5.0,
-            "y": 65.0
-          }
-        ]
+        "name": "unnamedWire#225",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#9",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#71",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#28",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#21",
+          "pinName": "A"
         },
-        "name": "unnamedWire#23",
+        "name": "unnamedWire#205",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#32",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "EN"
+          "compName": "_submodelinterface",
+          "pinName": "YZ"
         },
-        "name": "unnamedWire#219",
+        "name": "unnamedWire#49",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#2",
-          "pinName": "O"
+          "compName": "GUISplitter#4",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#2",
           "pinName": ""
         },
-        "name": "unnamedWire#22",
+        "name": "unnamedWire#106",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "GUINandGate#7",
+          "pinName": "B"
         },
-        "name": "unnamedWire#25",
+        "name": "unnamedWire#73",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O11"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "GUIMerger#4",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#24",
+        "name": "unnamedWire#139",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#11",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#22",
           "pinName": ""
         },
-        "name": "unnamedWire#27",
+        "name": "unnamedWire#143",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#16",
+          "compName": "WireCrossPoint#1",
           "pinName": ""
         },
-        "name": "unnamedWire#26",
+        "name": "unnamedWire#24",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_OVRRET"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "C"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "OVRRET"
         },
-        "name": "unnamedWire#29",
+        "name": "unnamedWire#2",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#14",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "mu"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I"
         },
-        "name": "unnamedWire#28",
+        "name": "unnamedWire#113",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#29",
-          "pinName": ""
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "OEN"
         },
         "pin2": {
-          "compName": "GUINandGate#11",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "B"
         },
-        "name": "unnamedWire#202",
+        "name": "unnamedWire#138",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#11",
-          "pinName": "B"
+          "compName": "GUINandGate#8",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#29",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EC"
         },
-        "name": "unnamedWire#203",
+        "name": "unnamedWire#68",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#27",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#10",
-          "pinName": "B"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
-        "name": "unnamedWire#200",
+        "name": "unnamedWire#65",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#26",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "IC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "I11"
+          "compName": "GUIMerger#2",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#201",
+        "name": "unnamedWire#19",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#21",
-          "pinName": "B"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "OE0"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#30",
+          "pinName": ""
         },
-        "name": "unnamedWire#206",
+        "name": "unnamedWire#203",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "Y"
+          "compName": "WireCrossPoint#22",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUITriStateBuffer#1",
-          "pinName": "IN"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#207",
+        "name": "unnamedWire#173",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I11"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "C"
+          "compName": "WireCrossPoint#23",
+          "pinName": ""
         },
-        "name": "unnamedWire#30",
+        "name": "unnamedWire#182",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#28",
-          "pinName": ""
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "IN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#10",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "Y"
         },
-        "name": "unnamedWire#204",
+        "name": "unnamedWire#165",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#28",
+          "compName": "WireCrossPoint#4",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#21",
-          "pinName": "A"
+          "compName": "GUINandGate#0",
+          "pinName": "B"
         },
-        "name": "unnamedWire#205",
+        "name": "unnamedWire#34",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "MC_EN"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "COVD_EN"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_INV"
         },
-        "name": "unnamedWire#32",
+        "name": "unnamedWire#130",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "MSR_MUX"
+          "compName": "GUITriStateBuffer#4",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "MUX"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
-        "name": "unnamedWire#31",
+        "name": "unnamedWire#164",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "GUINandGate#0",
-          "pinName": "B"
+          "compName": "GUISplitter#0",
+          "pinName": "O9"
         },
-        "name": "unnamedWire#34",
+        "name": "unnamedWire#13",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O2"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "S1"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_EN"
         },
-        "name": "unnamedWire#208",
+        "name": "unnamedWire#32",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "A"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "I"
         },
-        "name": "unnamedWire#33",
+        "name": "unnamedWire#133",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#14",
-          "pinName": "O1"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#22",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "M"
         },
-        "name": "unnamedWire#209",
+        "name": "unnamedWire#136",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "GUISplitter#3",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
-        "name": "unnamedWire#150",
+        "name": "unnamedWire#101",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "Y"
+          "compName": "_submodelinterface",
+          "pinName": "C"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
-        "name": "unnamedWire#151",
-        "path": []
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 25.0
+          },
+          {
+            "x": 5.0,
+            "y": 10.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "GUISplitter#5",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#154",
+        "name": "unnamedWire#109",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "S0"
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#155",
+        "name": "unnamedWire#97",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y011"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Cx"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I011"
         },
-        "name": "unnamedWire#152",
+        "name": "unnamedWire#118",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#13",
-          "pinName": "Y"
+          "compName": "GUISplitter#6",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "I1"
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_MUX"
         },
-        "name": "unnamedWire#153",
+        "name": "unnamedWire#124",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#19",
-          "pinName": ""
+          "compName": "GUISplitter#7",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "SIOn"
+          "compName": "WireCrossPoint#28",
+          "pinName": ""
         },
-        "name": "unnamedWire#158",
+        "name": "unnamedWire#134",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#20",
-          "pinName": ""
+          "compName": "GUIMerger#3",
+          "pinName": "I3"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "SIO0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#159",
+        "name": "unnamedWire#92",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#14",
-          "pinName": "Y"
+          "compName": "GUISplitter#5",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "C0"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_4"
         },
-        "name": "unnamedWire#156",
+        "name": "unnamedWire#110",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "QIOn"
+          "compName": "GUINandGate#3",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#18",
+          "compName": "WireCrossPoint#9",
           "pinName": ""
         },
-        "name": "unnamedWire#157",
+        "name": "unnamedWire#42",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#4",
-          "pinName": "I1"
+          "compName": "WireCrossPoint#25",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O12"
+          "compName": "WireCrossPoint#24",
+          "pinName": ""
         },
-        "name": "unnamedWire#140",
+        "name": "unnamedWire#185",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I5"
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O5"
+          "compName": "GUINandGate#4",
+          "pinName": "A"
         },
-        "name": "unnamedWire#9",
+        "name": "unnamedWire#37",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#12",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#22",
-          "pinName": ""
+          "compName": "GUISplitter#9",
+          "pinName": "O0"
         },
-        "name": "unnamedWire#143",
+        "name": "unnamedWire#148",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O4"
+          "compName": "GUIMerger#0",
+          "pinName": "I5"
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I4"
+          "compName": "GUISplitter#0",
+          "pinName": "O5"
         },
-        "name": "unnamedWire#8",
+        "name": "unnamedWire#9",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#10",
-          "pinName": "I"
+          "compName": "GUISplitter#9",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#3",
+          "compName": "WireCrossPoint#17",
           "pinName": ""
         },
-        "name": "unnamedWire#144",
+        "name": "unnamedWire#149",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I3"
+          "compName": "GUISplitter#14",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O3"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "QIOn_MUX"
         },
-        "name": "unnamedWire#7",
+        "name": "unnamedWire#210",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#4",
-          "pinName": "O"
+          "compName": "GUINandGate#0",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "I12-11"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
-        "name": "unnamedWire#141",
+        "name": "unnamedWire#33",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I2"
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
         },
-        "name": "unnamedWire#6",
+        "name": "unnamedWire#112",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "C0_MUX"
+          "compName": "_submodelinterface",
+          "pinName": "IOVR"
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "I"
+          "compName": "GUIMerger#2",
+          "pinName": "I3"
         },
-        "name": "unnamedWire#142",
-        "path": []
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 125.0
+          },
+          {
+            "x": 10.0,
+            "y": 95.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "Y"
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A2"
         },
-        "name": "unnamedWire#147",
+        "name": "unnamedWire#76",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#12",
-          "pinName": "A"
+          "compName": "WireCrossPoint#28",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#9",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "A"
         },
-        "name": "unnamedWire#148",
+        "name": "unnamedWire#204",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#10",
-          "pinName": "O1"
+          "compName": "GUITriStateBuffer#3",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#20",
+          "pinName": ""
         },
-        "name": "unnamedWire#145",
+        "name": "unnamedWire#163",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#9",
-          "pinName": "O1"
+          "compName": "GUINandGate#9",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#11",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#146",
+        "name": "unnamedWire#63",
         "path": []
       },
       {
         "pin1": {
           "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_MUX"
+          "pinName": "muSR_CINV"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "MUX"
+          "pinName": "CINV"
         },
-        "name": "unnamedWire#1",
+        "name": "unnamedWire#21",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "name": "unnamedWire#0",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 25.0
-          },
-          {
-            "x": 5.0,
-            "y": 10.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#9",
-          "pinName": "O2"
+          "compName": "GUINandGate#10",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "WireCrossPoint#17",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "A"
         },
-        "name": "unnamedWire#149",
+        "name": "unnamedWire#83",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I1"
+          "compName": "GUISplitter#11",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "S1"
         },
-        "name": "unnamedWire#5",
+        "name": "unnamedWire#168",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O6"
+          "compName": "DeserializedSubmodelComponent#14",
+          "pinName": "I0"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#17",
+          "pinName": ""
         },
-        "name": "unnamedWire#10",
+        "name": "unnamedWire#154",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#18",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "GUIMerger#0",
+          "compName": "DeserializedSubmodelComponent#17",
           "pinName": "I0"
         },
-        "name": "unnamedWire#4",
+        "name": "unnamedWire#221",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "I"
+          "compName": "WireCrossPoint#21",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#23",
+          "pinName": "I011"
         },
-        "name": "unnamedWire#3",
+        "name": "unnamedWire#192",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O8"
+          "compName": "GUISplitter#11",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I2"
+          "compName": "DeserializedSubmodelComponent#15",
+          "pinName": "I00"
         },
-        "name": "unnamedWire#12",
+        "name": "unnamedWire#167",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I1"
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O7"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#11",
+        "name": "unnamedWire#96",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "muSR_OVRRET"
+          "compName": "GUISplitter#5",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "OVRRET"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#2",
+        "name": "unnamedWire#107",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "I"
+          "compName": "_submodelinterface",
+          "pinName": "YN"
         },
-        "name": "unnamedWire#132",
+        "name": "unnamedWire#51",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "GUISplitter#7",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#133",
+        "name": "unnamedWire#85",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_INV"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#130",
+        "name": "unnamedWire#88",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#10",
+          "compName": "DeserializedSubmodelComponent#12",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "DeserializedSubmodelComponent#13",
           "pinName": "I1"
         },
-        "name": "unnamedWire#131",
+        "name": "unnamedWire#151",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUIMerger#1",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "M"
+          "compName": "GUISplitter#0",
+          "pinName": "O7"
         },
-        "name": "unnamedWire#136",
+        "name": "unnamedWire#11",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "SIO0_MUX"
         },
         "pin2": {
-          "compName": "GUISplitter#8",
+          "compName": "GUISplitter#11",
           "pinName": "I"
         },
-        "name": "unnamedWire#137",
+        "name": "unnamedWire#166",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#7",
-          "pinName": "O2"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#28",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#134",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#8",
-          "pinName": "O2"
-        },
         "pin2": {
-          "compName": "WireCrossPoint#27",
-          "pinName": ""
+          "compName": "GUINandGate#10",
+          "pinName": "A"
         },
-        "name": "unnamedWire#135",
+        "name": "unnamedWire#80",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "OEN"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "B"
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
         },
-        "name": "unnamedWire#138",
+        "name": "unnamedWire#99",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O11"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#4",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
-        "name": "unnamedWire#139",
+        "name": "unnamedWire#64",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y000"
+          "compName": "GUITriStateBuffer#2",
+          "pinName": "OUT"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I000"
+          "compName": "WireCrossPoint#19",
+          "pinName": ""
         },
-        "name": "unnamedWire#121",
+        "name": "unnamedWire#162",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "Y"
+          "compName": "GUISplitter#13",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "CT"
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "SIOn_MUX"
         },
-        "name": "unnamedWire#122",
+        "name": "unnamedWire#188",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I001"
+          "compName": "GUISplitter#5",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y001"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
-        "name": "unnamedWire#120",
+        "name": "unnamedWire#111",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "O0"
+          "compName": "GUISplitter#15",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
+          "compName": "DeserializedSubmodelComponent#17",
           "pinName": "S0"
         },
-        "name": "unnamedWire#125",
+        "name": "unnamedWire#228",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S1"
+          "compName": "WireCrossPoint#26",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#6",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#22",
+          "pinName": "I11"
         },
-        "name": "unnamedWire#126",
+        "name": "unnamedWire#201",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "GUINandGate#4",
           "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#123",
+        "name": "unnamedWire#46",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "I"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_MUX"
+          "compName": "GUISplitter#8",
+          "pinName": "I"
         },
-        "name": "unnamedWire#124",
+        "name": "unnamedWire#137",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "Y"
+          "compName": "GUISplitter#10",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
+          "compName": "DeserializedSubmodelComponent#11",
           "pinName": "I0"
         },
-        "name": "unnamedWire#129",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#6",
-          "pinName": "O2"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S2"
-        },
-        "name": "unnamedWire#127",
+        "name": "unnamedWire#145",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "CT_EXP"
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#9",
-          "pinName": "S0"
+          "compName": "_submodelinterface",
+          "pinName": "_OEY"
         },
-        "name": "unnamedWire#128",
+        "name": "unnamedWire#82",
         "path": []
       }
-    ]
+    ],
+    "version": "0.1.1"
   },
   "symbolRendererSnippetID": "simpleRectangularLike",
   "symbolRendererParams": {
@@ -3855,5 +3982,6 @@ mograsim version: 0.1.3
   "highLevelStateHandlerParams": {
     "subcomponentHighLevelStates": {},
     "atomicHighLevelStates": {}
-  }
+  },
+  "version": "0.1.4"
 }
\ No newline at end of file
index 3296f39..4a24464 100644 (file)
@@ -1,4 +1,3 @@
-mograsim version: 0.1.3
 {
   "width": 45.0,
   "height": 46.0,
@@ -100,62 +99,78 @@ mograsim version: 0.1.3
       "logicWidth": 1
     }
   ],
+  "innerScale": 0.1,
   "submodel": {
-    "innerScale": 0.1,
-    "subComps": [
+    "components": [
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#14",
+        "name": "WireCrossPoint#2",
         "pos": {
-          "x": 89.0,
-          "y": 104.0
+          "x": 419.0,
+          "y": 184.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#13",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
         "pos": {
-          "x": 194.0,
-          "y": 234.0
-        },
-        "params": 1
+          "x": 55.0,
+          "y": 110.0
+        }
       },
       {
-        "id": "GUINandGate",
-        "name": "GUINandGate#0",
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
         "pos": {
-          "x": 325.0,
-          "y": 90.0
+          "x": 435.0,
+          "y": 175.0
         },
-        "params": 1
+        "params": 4
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#16",
+        "name": "WireCrossPoint#5",
         "pos": {
-          "x": 319.0,
-          "y": 104.0
+          "x": 84.0,
+          "y": 344.0
         },
         "params": 1
       },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 5.0,
+          "y": 35.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIdff4_finewe",
+        "name": "GUIdff4_finewe#0",
+        "pos": {
+          "x": 375.0,
+          "y": 170.0
+        }
+      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#15",
+        "name": "WireCrossPoint#8",
         "pos": {
-          "x": 319.0,
-          "y": 294.0
+          "x": 74.0,
+          "y": 314.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#3",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
         "pos": {
-          "x": 5.0,
-          "y": 295.0
+          "x": 424.0,
+          "y": 194.0
         },
-        "params": 4
+        "params": 1
       },
       {
         "id": "GUISplitter",
@@ -177,64 +192,103 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#1",
+        "name": "WireCrossPoint#4",
         "pos": {
-          "x": 414.0,
-          "y": 174.0
+          "x": 429.0,
+          "y": 204.0
         },
         "params": 1
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#0",
+        "name": "WireCrossPoint#11",
         "pos": {
-          "x": 29.0,
-          "y": 284.0
+          "x": 89.0,
+          "y": 94.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
-        "name": "GUISplitter#0",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#12",
         "pos": {
-          "x": 5.0,
-          "y": 35.0
+          "x": 19.0,
+          "y": 294.0
         },
-        "params": 4
+        "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#3",
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
         "pos": {
-          "x": 424.0,
-          "y": 194.0
+          "x": 325.0,
+          "y": 90.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#2",
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
         "pos": {
-          "x": 419.0,
-          "y": 184.0
-        },
-        "params": 1
+          "x": 200.0,
+          "y": 230.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#7",
+        "pos": {
+          "x": 325.0,
+          "y": 290.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 150.0,
+          "y": 280.0
+        }
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#5",
+        "name": "WireCrossPoint#0",
         "pos": {
-          "x": 84.0,
-          "y": 344.0
+          "x": 29.0,
+          "y": 284.0
         },
         "params": 1
       },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 35.0,
+          "y": 250.0
+        }
+      },
+      {
+        "id": "GUInot4",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 100.0,
+          "y": 330.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#4",
+        "pos": {
+          "x": 110.0,
+          "y": 60.0
+        }
+      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#4",
+        "name": "WireCrossPoint#1",
         "pos": {
-          "x": 429.0,
-          "y": 204.0
+          "x": 414.0,
+          "y": 174.0
         },
         "params": 1
       },
@@ -258,38 +312,13 @@ mograsim version: 0.1.3
       },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#9",
-        "pos": {
-          "x": 49.0,
-          "y": 114.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#8",
+        "name": "WireCrossPoint#14",
         "pos": {
-          "x": 74.0,
-          "y": 314.0
+          "x": 89.0,
+          "y": 104.0
         },
         "params": 1
       },
-      {
-        "id": "GUIdff4_finewe",
-        "name": "GUIdff4_finewe#0",
-        "pos": {
-          "x": 375.0,
-          "y": 170.0
-        }
-      },
-      {
-        "id": "GUIxor",
-        "name": "DeserializedSubmodelComponent#1",
-        "pos": {
-          "x": 35.0,
-          "y": 250.0
-        }
-      },
       {
         "id": "WireCrossPoint",
         "name": "WireCrossPoint#10",
@@ -299,70 +328,48 @@ mograsim version: 0.1.3
         },
         "params": 1
       },
-      {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#0",
-        "pos": {
-          "x": 55.0,
-          "y": 110.0
-        }
-      },
-      {
-        "id": "GUInot4",
-        "name": "DeserializedSubmodelComponent#3",
-        "pos": {
-          "x": 100.0,
-          "y": 330.0
-        }
-      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#12",
+        "name": "WireCrossPoint#15",
         "pos": {
-          "x": 19.0,
+          "x": 319.0,
           "y": 294.0
         },
         "params": 1
       },
-      {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#2",
-        "pos": {
-          "x": 150.0,
-          "y": 280.0
-        }
-      },
       {
         "id": "WireCrossPoint",
-        "name": "WireCrossPoint#11",
+        "name": "WireCrossPoint#9",
         "pos": {
-          "x": 89.0,
-          "y": 94.0
+          "x": 49.0,
+          "y": 114.0
         },
         "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#5",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#16",
         "pos": {
-          "x": 200.0,
-          "y": 230.0
-        }
+          "x": 319.0,
+          "y": 104.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#4",
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#13",
         "pos": {
-          "x": 110.0,
-          "y": 60.0
-        }
+          "x": 194.0,
+          "y": 234.0
+        },
+        "params": 1
       },
       {
-        "id": "GUImux1",
-        "name": "DeserializedSubmodelComponent#7",
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#8",
         "pos": {
-          "x": 325.0,
-          "y": 290.0
+          "x": 380.0,
+          "y": 85.0
         }
       },
       {
@@ -374,367 +381,347 @@ mograsim version: 0.1.3
         }
       },
       {
-        "id": "GUIMerger",
-        "name": "GUIMerger#0",
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
         "pos": {
-          "x": 435.0,
-          "y": 175.0
+          "x": 5.0,
+          "y": 295.0
         },
         "params": 4
-      },
-      {
-        "id": "GUIand",
-        "name": "DeserializedSubmodelComponent#8",
-        "pos": {
-          "x": 380.0,
-          "y": 85.0
-        }
       }
     ],
-    "innerWires": [
+    "wires": [
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#36",
+        "name": "unnamedWire#12",
         "path": [
           {
-            "x": 425.0,
-            "y": 390.0
-          },
-          {
-            "x": 90.0,
-            "y": 390.0
+            "x": 35.0,
+            "y": 35.0
           },
           {
-            "x": 90.0,
-            "y": 355.0
+            "x": 35.0,
+            "y": 125.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#2",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#35",
-        "path": [
-          {
-            "x": 420.0,
-            "y": 385.0
-          },
-          {
-            "x": 85.0,
-            "y": 385.0
-          }
-        ]
+        "name": "unnamedWire#68",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y3"
+          "compName": "_submodelinterface",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "I0_3"
         },
-        "name": "unnamedWire#79",
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
         "path": [
           {
-            "x": 205.0,
-            "y": 85.0
-          },
-          {
-            "x": 205.0,
-            "y": 215.0
+            "x": 75.0,
+            "y": 265.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#7",
           "pinName": ""
         },
-        "name": "unnamedWire#38",
+        "name": "unnamedWire#25",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#37",
+        "name": "unnamedWire#82",
         "path": [
           {
-            "x": 430.0,
-            "y": 395.0
+            "x": 245.0,
+            "y": 445.0
           },
           {
-            "x": 95.0,
-            "y": 395.0
+            "x": 245.0,
+            "y": 185.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_4"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#39",
-        "path": [
-          {
-            "x": 85.0,
-            "y": 325.0
-          }
-        ]
+        "name": "unnamedWire#43",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
-        "name": "unnamedWire#81",
-        "path": [
-          {
-            "x": 215.0,
-            "y": 65.0
-          },
-          {
-            "x": 215.0,
-            "y": 195.0
-          }
-        ]
+        "name": "unnamedWire#21",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_2"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#0",
           "pinName": "Y2"
         },
-        "name": "unnamedWire#80",
-        "path": [
-          {
-            "x": 210.0,
-            "y": 205.0
-          },
-          {
-            "x": 210.0,
-            "y": 75.0
-          }
-        ]
+        "name": "unnamedWire#46",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#15",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
-        "name": "unnamedWire#83",
-        "path": []
+        "name": "unnamedWire#67",
+        "path": [
+          {
+            "x": 195.0,
+            "y": 435.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A3"
         },
-        "name": "unnamedWire#82",
+        "name": "unnamedWire#36",
         "path": [
           {
-            "x": 245.0,
-            "y": 445.0
+            "x": 425.0,
+            "y": 390.0
           },
           {
-            "x": 245.0,
-            "y": 185.0
+            "x": 90.0,
+            "y": 390.0
+          },
+          {
+            "x": 90.0,
+            "y": 355.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#41",
+        "name": "unnamedWire#17",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#85",
+        "name": "unnamedWire#48",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#6",
+          "compName": "WireCrossPoint#10",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
+          "compName": "DeserializedSubmodelComponent#4",
           "pinName": "I0_2"
         },
-        "name": "unnamedWire#40",
-        "path": [
-          {
-            "x": 95.0,
-            "y": 305.0
-          }
-        ]
+        "name": "unnamedWire#53",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "C"
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "COVD_EN"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "C"
         },
-        "name": "unnamedWire#84",
+        "name": "unnamedWire#0",
         "path": [
           {
-            "x": 275.0,
-            "y": 295.0
+            "x": 140.0,
+            "y": 415.0
+          },
+          {
+            "x": 255.0,
+            "y": 415.0
+          },
+          {
+            "x": 255.0,
+            "y": 280.0
+          },
+          {
+            "x": 340.0,
+            "y": 280.0
+          },
+          {
+            "x": 340.0,
+            "y": 175.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "S0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#43",
+        "name": "unnamedWire#31",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I0"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#87",
+        "name": "unnamedWire#35",
         "path": [
           {
-            "x": 305.0,
-            "y": 195.0
+            "x": 420.0,
+            "y": 385.0
           },
           {
-            "x": 305.0,
-            "y": 305.0
+            "x": 85.0,
+            "y": 385.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "COVD_EN"
         },
-        "name": "unnamedWire#42",
+        "name": "unnamedWire#84",
         "path": [
           {
-            "x": 30.0,
-            "y": 230.0
-          },
-          {
-            "x": 50.0,
-            "y": 230.0
+            "x": 275.0,
+            "y": 295.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "COVD_V"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_3"
         },
-        "name": "unnamedWire#86",
+        "name": "unnamedWire#79",
         "path": [
           {
-            "x": 375.0,
-            "y": 325.0
-          },
-          {
-            "x": 320.0,
-            "y": 325.0
+            "x": 205.0,
+            "y": 85.0
           },
           {
-            "x": 320.0,
-            "y": 315.0
+            "x": 205.0,
+            "y": 215.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#9",
-          "pinName": ""
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "B"
         },
-        "name": "unnamedWire#45",
+        "name": "unnamedWire#23",
         "path": [
           {
-            "x": 50.0,
-            "y": 105.0
+            "x": 25.0,
+            "y": 305.0
+          },
+          {
+            "x": 25.0,
+            "y": 265.0
           }
         ]
       },
@@ -752,275 +739,281 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#6",
           "pinName": "I1_1"
         },
-        "name": "unnamedWire#44",
+        "name": "unnamedWire#77",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#7",
-          "pinName": "Y"
-        },
-        "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D2"
-        },
-        "name": "unnamedWire#88",
-        "path": [
-          {
-            "x": 365.0,
-            "y": 295.0
-          },
-          {
-            "x": 365.0,
-            "y": 235.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#47",
+        "name": "unnamedWire#57",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_2"
+          "compName": "_submodelinterface",
+          "pinName": "I"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y2"
+          "compName": "GUISplitter#3",
+          "pinName": "I"
         },
-        "name": "unnamedWire#46",
+        "name": "unnamedWire#22",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_4"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
         },
-        "name": "unnamedWire#49",
-        "path": []
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 55.0
+          },
+          {
+            "x": 25.0,
+            "y": 145.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I1_4"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#48",
+        "name": "unnamedWire#63",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q2"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
         },
-        "name": "unnamedWire#9",
-        "path": []
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 135.0
+          },
+          {
+            "x": 30.0,
+            "y": 45.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#8",
+        "name": "unnamedWire#44",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
+          "compName": "WireCrossPoint#14",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#7",
+        "name": "unnamedWire#49",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#6",
-        "path": []
+        "name": "unnamedWire#78",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 225.0
+          },
+          {
+            "x": 200.0,
+            "y": 95.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#15",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#90",
+        "name": "unnamedWire#65",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUINandGate#0",
-          "pinName": "A"
+          "compName": "_submodelinterface",
+          "pinName": "MUX"
         },
         "pin2": {
-          "compName": "WireCrossPoint#16",
-          "pinName": ""
+          "compName": "GUISplitter#2",
+          "pinName": "I"
         },
-        "name": "unnamedWire#92",
+        "name": "unnamedWire#20",
         "path": [
           {
-            "x": 320.0,
-            "y": 95.0
+            "x": 40.0,
+            "y": 435.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#16",
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
           "pinName": ""
         },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
         "pin2": {
-          "compName": "GUINandGate#0",
-          "pinName": "B"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#91",
+        "name": "unnamedWire#18",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EOVR"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_1"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE4"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
-        "name": "unnamedWire#1",
+        "name": "unnamedWire#54",
         "path": [
           {
-            "x": 355.0,
-            "y": 30.0
-          },
-          {
-            "x": 355.0,
-            "y": 215.0
+            "x": 90.0,
+            "y": 75.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#50",
+        "name": "unnamedWire#32",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
           "compName": "GUIdff4_finewe#0",
-          "pinName": "C"
+          "pinName": "Q4"
         },
-        "name": "unnamedWire#0",
-        "path": [
-          {
-            "x": 140.0,
-            "y": 415.0
-          },
-          {
-            "x": 255.0,
-            "y": 415.0
-          },
-          {
-            "x": 255.0,
-            "y": 280.0
-          },
-          {
-            "x": 340.0,
-            "y": 280.0
-          },
-          {
-            "x": 340.0,
-            "y": 175.0
-          }
-        ]
+        "name": "unnamedWire#29",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
+          "compName": "DeserializedSubmodelComponent#2",
           "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#11",
+          "compName": "WireCrossPoint#8",
           "pinName": ""
         },
-        "name": "unnamedWire#52",
+        "name": "unnamedWire#41",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#11",
-          "pinName": ""
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#14",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
         },
-        "name": "unnamedWire#51",
+        "name": "unnamedWire#19",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "O"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Q"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A1"
         },
-        "name": "unnamedWire#5",
-        "path": []
+        "name": "unnamedWire#34",
+        "path": [
+          {
+            "x": 415.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 335.0
+          }
+        ]
       },
       {
         "pin1": {
@@ -1036,331 +1029,306 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_1"
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#10",
+          "compName": "WireCrossPoint#12",
           "pinName": ""
         },
-        "name": "unnamedWire#54",
-        "path": [
-          {
-            "x": 90.0,
-            "y": 75.0
-          }
-        ]
+        "name": "unnamedWire#38",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EZ"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE1"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#4",
+        "name": "unnamedWire#45",
         "path": [
           {
-            "x": 55.0,
-            "y": 15.0
-          },
-          {
-            "x": 370.0,
-            "y": 15.0
-          },
-          {
-            "x": 370.0,
-            "y": 185.0
+            "x": 50.0,
+            "y": 105.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#10",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "I0_2"
-        },
-        "name": "unnamedWire#53",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O0"
+          "compName": "GUINandGate#0",
+          "pinName": "A"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_1"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
-        "name": "unnamedWire#12",
+        "name": "unnamedWire#92",
         "path": [
           {
-            "x": 35.0,
-            "y": 35.0
-          },
-          {
-            "x": 35.0,
-            "y": 125.0
+            "x": 320.0,
+            "y": 95.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A2"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_3"
         },
         "pin2": {
-          "compName": "WireCrossPoint#5",
+          "compName": "WireCrossPoint#11",
           "pinName": ""
         },
-        "name": "unnamedWire#56",
+        "name": "unnamedWire#52",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EC"
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "A"
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
         },
-        "name": "unnamedWire#3",
+        "name": "unnamedWire#24",
         "path": [
           {
-            "x": 155.0,
-            "y": 20.0
+            "x": 60.0,
+            "y": 425.0
           },
           {
-            "x": 365.0,
-            "y": 20.0
+            "x": 60.0,
+            "y": 415.0
           },
           {
-            "x": 365.0,
-            "y": 90.0
+            "x": 30.0,
+            "y": 415.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "_EN"
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE3"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
-        "name": "unnamedWire#2",
+        "name": "unnamedWire#37",
         "path": [
           {
-            "x": 255.0,
-            "y": 25.0
-          },
-          {
-            "x": 360.0,
-            "y": 25.0
+            "x": 430.0,
+            "y": 395.0
           },
           {
-            "x": 360.0,
-            "y": 205.0
+            "x": 95.0,
+            "y": 395.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "Y"
-        },
-        "pin2": {
           "compName": "GUISplitter#1",
-          "pinName": "I"
-        },
-        "name": "unnamedWire#11",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A4"
+          "pinName": "O0"
         },
         "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#55",
+        "name": "unnamedWire#16",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O2"
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_3"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE4"
         },
-        "name": "unnamedWire#14",
+        "name": "unnamedWire#1",
         "path": [
           {
-            "x": 25.0,
-            "y": 55.0
+            "x": 355.0,
+            "y": 30.0
           },
           {
-            "x": 25.0,
-            "y": 145.0
+            "x": 355.0,
+            "y": 215.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O2"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#58",
+        "name": "unnamedWire#93",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_2"
+          "compName": "GUIMerger#0",
+          "pinName": "O"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "Q"
         },
-        "name": "unnamedWire#13",
-        "path": [
-          {
-            "x": 30.0,
-            "y": 135.0
-          },
-          {
-            "x": 30.0,
-            "y": 45.0
-          }
-        ]
+        "name": "unnamedWire#5",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I0_1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_3"
         },
-        "name": "unnamedWire#57",
+        "name": "unnamedWire#75",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_1"
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
         },
-        "name": "unnamedWire#16",
+        "name": "unnamedWire#56",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_4"
+          "compName": "_submodelinterface",
+          "pinName": "COVD_V"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O3"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I1"
         },
-        "name": "unnamedWire#15",
+        "name": "unnamedWire#86",
         "path": [
           {
-            "x": 20.0,
-            "y": 155.0
+            "x": 375.0,
+            "y": 325.0
           },
           {
-            "x": 20.0,
-            "y": 65.0
+            "x": 320.0,
+            "y": 325.0
+          },
+          {
+            "x": 320.0,
+            "y": 315.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#12",
+          "compName": "WireCrossPoint#13",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_1"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#59",
+        "name": "unnamedWire#69",
         "path": [
           {
-            "x": 20.0,
-            "y": 245.0
+            "x": 105.0,
+            "y": 235.0
+          },
+          {
+            "x": 105.0,
+            "y": 65.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O2"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_3"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#18",
+        "name": "unnamedWire#9",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D4"
+        },
+        "name": "unnamedWire#70",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 215.0
+          },
+          {
+            "x": 295.0,
+            "y": 255.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "GUISplitter#1",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#17",
+        "name": "unnamedWire#64",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#1",
-          "pinName": "O3"
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_4"
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#19",
+        "name": "unnamedWire#7",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#8",
+          "compName": "WireCrossPoint#5",
           "pinName": ""
         },
-        "name": "unnamedWire#61",
+        "name": "unnamedWire#39",
         "path": [
-          {
-            "x": 75.0,
-            "y": 265.0
+          {
+            "x": 85.0,
+            "y": 325.0
           }
         ]
       },
@@ -1378,139 +1346,144 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y1"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S0"
         },
-        "name": "unnamedWire#63",
+        "name": "unnamedWire#85",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O3"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I0_4"
-        },
-        "name": "unnamedWire#62",
-        "path": [
-          {
-            "x": 80.0,
-            "y": 325.0
-          },
-          {
-            "x": 80.0,
-            "y": 275.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#0",
+          "compName": "WireCrossPoint#3",
           "pinName": ""
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
-          "pinName": ""
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
         },
-        "name": "unnamedWire#21",
+        "name": "unnamedWire#27",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_3"
+          "compName": "GUINandGate#0",
+          "pinName": "B"
         },
-        "name": "unnamedWire#65",
+        "name": "unnamedWire#91",
         "path": []
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "MUX"
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUISplitter#2",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_2"
         },
-        "name": "unnamedWire#20",
+        "name": "unnamedWire#40",
         "path": [
           {
-            "x": 40.0,
-            "y": 435.0
+            "x": 95.0,
+            "y": 305.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "I1_2"
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
         },
-        "name": "unnamedWire#64",
-        "path": []
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 230.0
+          },
+          {
+            "x": 50.0,
+            "y": 230.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O1"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#67",
+        "name": "unnamedWire#81",
         "path": [
           {
-            "x": 195.0,
-            "y": 435.0
+            "x": 215.0,
+            "y": 65.0
+          },
+          {
+            "x": 215.0,
+            "y": 195.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUISplitter#3",
-          "pinName": "O1"
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "B"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE1"
         },
-        "name": "unnamedWire#23",
+        "name": "unnamedWire#4",
         "path": [
           {
-            "x": 25.0,
-            "y": 305.0
+            "x": 55.0,
+            "y": 15.0
           },
           {
-            "x": 25.0,
-            "y": 265.0
+            "x": 370.0,
+            "y": 15.0
+          },
+          {
+            "x": 370.0,
+            "y": 185.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "I"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D1"
         },
         "pin2": {
-          "compName": "GUISplitter#3",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y1"
         },
-        "name": "unnamedWire#22",
-        "path": []
+        "name": "unnamedWire#73",
+        "path": [
+          {
+            "x": 310.0,
+            "y": 225.0
+          },
+          {
+            "x": 310.0,
+            "y": 185.0
+          }
+        ]
       },
       {
         "pin1": {
@@ -1526,84 +1499,128 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "S0"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE3"
         },
-        "name": "unnamedWire#69",
+        "name": "unnamedWire#2",
         "path": [
           {
-            "x": 105.0,
-            "y": 235.0
+            "x": 255.0,
+            "y": 25.0
           },
           {
-            "x": 105.0,
-            "y": 65.0
+            "x": 360.0,
+            "y": 25.0
+          },
+          {
+            "x": 360.0,
+            "y": 205.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#1",
-          "pinName": "A"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#7",
+          "compName": "WireCrossPoint#6",
           "pinName": ""
         },
-        "name": "unnamedWire#25",
+        "name": "unnamedWire#55",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#2",
-          "pinName": "O0"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#24",
+        "name": "unnamedWire#33",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE2"
+        },
+        "name": "unnamedWire#72",
         "path": [
           {
-            "x": 60.0,
-            "y": 425.0
+            "x": 420.0,
+            "y": 90.0
           },
           {
-            "x": 60.0,
-            "y": 415.0
+            "x": 420.0,
+            "y": 110.0
           },
           {
-            "x": 30.0,
-            "y": 415.0
+            "x": 365.0,
+            "y": 110.0
+          },
+          {
+            "x": 365.0,
+            "y": 195.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#13",
+          "compName": "WireCrossPoint#11",
           "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "S0"
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
         },
-        "name": "unnamedWire#68",
+        "name": "unnamedWire#51",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#3",
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I2"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
-        "name": "unnamedWire#27",
+        "name": "unnamedWire#83",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#58",
         "path": []
       },
       {
@@ -1620,263 +1637,258 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D3"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "Q4"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y3"
         },
-        "name": "unnamedWire#29",
-        "path": []
+        "name": "unnamedWire#71",
+        "path": [
+          {
+            "x": 300.0,
+            "y": 245.0
+          },
+          {
+            "x": 300.0,
+            "y": 205.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I3"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q1"
         },
         "pin2": {
-          "compName": "WireCrossPoint#4",
+          "compName": "WireCrossPoint#1",
           "pinName": ""
         },
-        "name": "unnamedWire#28",
+        "name": "unnamedWire#6",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y4"
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D4"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
         },
-        "name": "unnamedWire#70",
+        "name": "unnamedWire#59",
         "path": [
           {
-            "x": 295.0,
-            "y": 215.0
-          },
-          {
-            "x": 295.0,
-            "y": 255.0
+            "x": 20.0,
+            "y": 245.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#8",
-          "pinName": "Y"
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "_WE2"
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
         },
-        "name": "unnamedWire#72",
+        "name": "unnamedWire#15",
         "path": [
           {
-            "x": 420.0,
-            "y": 90.0
-          },
-          {
-            "x": 420.0,
-            "y": 110.0
-          },
-          {
-            "x": 365.0,
-            "y": 110.0
+            "x": 20.0,
+            "y": 155.0
           },
           {
-            "x": 365.0,
-            "y": 195.0
+            "x": 20.0,
+            "y": 65.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D3"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y3"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
         },
-        "name": "unnamedWire#71",
+        "name": "unnamedWire#80",
         "path": [
           {
-            "x": 300.0,
-            "y": 245.0
+            "x": 210.0,
+            "y": 205.0
           },
           {
-            "x": 300.0,
-            "y": 205.0
+            "x": 210.0,
+            "y": 75.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_1"
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D2"
         },
-        "name": "unnamedWire#30",
-        "path": []
+        "name": "unnamedWire#88",
+        "path": [
+          {
+            "x": 365.0,
+            "y": 295.0
+          },
+          {
+            "x": 365.0,
+            "y": 235.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_4"
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
         },
         "pin2": {
           "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y4"
+          "pinName": "I0_4"
         },
-        "name": "unnamedWire#74",
-        "path": []
+        "name": "unnamedWire#62",
+        "path": [
+          {
+            "x": 80.0,
+            "y": 325.0
+          },
+          {
+            "x": 80.0,
+            "y": 275.0
+          }
+        ]
       },
       {
         "pin1": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "D1"
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "Y1"
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I0"
         },
-        "name": "unnamedWire#73",
+        "name": "unnamedWire#87",
         "path": [
           {
-            "x": 310.0,
-            "y": 225.0
+            "x": 305.0,
+            "y": 195.0
           },
           {
-            "x": 310.0,
-            "y": 185.0
+            "x": 305.0,
+            "y": 305.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y3"
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_3"
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
         },
-        "name": "unnamedWire#32",
+        "name": "unnamedWire#90",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_2"
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y2"
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
         },
-        "name": "unnamedWire#76",
+        "name": "unnamedWire#50",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
+          "compName": "DeserializedSubmodelComponent#6",
           "pinName": "I1_2"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
+          "compName": "DeserializedSubmodelComponent#5",
           "pinName": "Y2"
         },
-        "name": "unnamedWire#31",
+        "name": "unnamedWire#76",
         "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y3"
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_3"
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_1"
         },
-        "name": "unnamedWire#75",
+        "name": "unnamedWire#30",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_4"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "A1"
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
         },
-        "name": "unnamedWire#34",
-        "path": [
-          {
-            "x": 415.0,
-            "y": 380.0
-          },
-          {
-            "x": 80.0,
-            "y": 380.0
-          },
-          {
-            "x": 80.0,
-            "y": 335.0
-          }
-        ]
+        "name": "unnamedWire#74",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I0_4"
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#4",
-          "pinName": "Y4"
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
         },
-        "name": "unnamedWire#78",
+        "name": "unnamedWire#3",
         "path": [
           {
-            "x": 200.0,
-            "y": 225.0
+            "x": 155.0,
+            "y": 20.0
           },
           {
-            "x": 200.0,
-            "y": 95.0
+            "x": 365.0,
+            "y": 20.0
+          },
+          {
+            "x": 365.0,
+            "y": 90.0
           }
         ]
       },
       {
         "pin1": {
-          "compName": "DeserializedSubmodelComponent#2",
-          "pinName": "I1_4"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#3",
-          "pinName": "Y4"
-        },
-        "name": "unnamedWire#33",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#5",
-          "pinName": "Y1"
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
         },
         "pin2": {
-          "compName": "DeserializedSubmodelComponent#6",
-          "pinName": "I1_1"
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
         },
-        "name": "unnamedWire#77",
+        "name": "unnamedWire#8",
         "path": []
       }
-    ]
+    ],
+    "version": "0.1.1"
   },
   "symbolRendererSnippetID": "simpleRectangularLike",
   "symbolRendererParams": {
@@ -1891,5 +1903,6 @@ mograsim version: 0.1.3
   "highLevelStateHandlerParams": {
     "subcomponentHighLevelStates": {},
     "atomicHighLevelStates": {}
-  }
+  },
+  "version": "0.1.4"
 }
\ No newline at end of file
index c60de3e..c85f1fd 100644 (file)
@@ -21,6 +21,7 @@ public class ViewModel
        private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
        private final List<Consumer<? super GUIWire>> wireAddedListeners;
        private final List<Consumer<? super GUIWire>> wireRemovedListeners;
+       private final List<Consumer<? super Runnable>> redrawHandlerChangedListeners;
 
        private Runnable redrawHandler;
 
@@ -35,6 +36,7 @@ public class ViewModel
                componentRemovedListeners = new ArrayList<>();
                wireAddedListeners = new ArrayList<>();
                wireRemovedListeners = new ArrayList<>();
+               redrawHandlerChangedListeners = new ArrayList<>();
        }
 
        /**
@@ -100,25 +102,29 @@ public class ViewModel
        }
 
        // @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 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);}
-
-       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));}
+       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 addRedrawHandlerChangedListener   (Consumer<? super Runnable    > listener) {redrawHandlerChangedListeners.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 removeRedrawHandlerChangedListener(Consumer<? super Runnable    > listener) {redrawHandlerChangedListeners.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 callRedrawHandlerChangedListener(Runnable     r) {redrawHandlerChangedListeners.forEach(l -> l.accept(r));}
        // @formatter:on
 
        public void setRedrawHandler(Runnable handler)
        {
                this.redrawHandler = handler;
+               callRedrawHandlerChangedListener(handler);
        }
 
        public Runnable getRedrawHandler()
index 1818dc6..6ca7705 100644 (file)
@@ -4,6 +4,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.function.Consumer;
 
 import net.haspamelodica.swt.helper.gcs.GCConfig;
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
@@ -110,6 +111,13 @@ public abstract class SubmodelComponent extends GUIComponent
                this.minVisibleRegionFillRatioForAlpha1 = 0.0;
                this.renderer = new LogicUIRenderer(submodelModifiable);
 
+               Consumer<Runnable> redrawHandlerChangedListener = submodelModifiable::setRedrawHandler;
+               model.addRedrawHandlerChangedListener(redrawHandlerChangedListener);
+               model.addComponentRemovedListener(c ->
+               {
+                       if (c == this)
+                               model.removeRedrawHandlerChangedListener(redrawHandlerChangedListener);
+               });
                submodelModifiable.setRedrawHandler(model.getRedrawHandler());
        }
 
diff --git a/net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/DefaultMainMemoryDefinition.java
deleted file mode 100644 (file)
index 2431b65..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.mograsim.machine;
-
-public class DefaultMainMemoryDefinition implements MainMemoryDefinition {
-       private final int memoryAddressBits, cellWidth;
-       private final long minimalAddress, maximalAddress;
-       
-       public DefaultMainMemoryDefinition(int memoryAddressBits, int cellWidth, long minimalAddress, long maximalAddress)
-       {
-               super();
-               this.memoryAddressBits = memoryAddressBits;
-               this.cellWidth = cellWidth;
-               this.minimalAddress = minimalAddress;
-               this.maximalAddress = maximalAddress;
-       }
-
-       public DefaultMainMemoryDefinition(MainMemoryDefinition definition)
-       {
-               this(definition.getMemoryAddressBits(), definition.getCellWidth(), definition.getMinimalAddress(), definition.getMaximalAddress());
-       }
-
-       @Override
-       public int getMemoryAddressBits()
-       {
-               return memoryAddressBits;
-       }
-
-       @Override
-       public int getCellWidth()
-       {
-               return cellWidth;
-       }
-
-       @Override
-       public long getMinimalAddress()
-       {
-               return minimalAddress;
-       }
-
-       @Override
-       public long getMaximalAddress()
-       {
-               return maximalAddress;
-       }
-       
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/GenericMemory.java b/net.mograsim.machine/src/net/mograsim/machine/GenericMemory.java
new file mode 100644 (file)
index 0000000..f01f9df
--- /dev/null
@@ -0,0 +1,119 @@
+package net.mograsim.machine;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+public abstract class GenericMemory<T> implements Memory<T>
+{
+       private final long minimalAddress, maximalAddress;
+       private final MemoryDefinition definition;
+       private final int pageSize = 64;
+       private Set<MemoryObserver> observers = new HashSet<>();
+
+       private HashMap<Long, Page> pages;
+
+       public GenericMemory(MemoryDefinition definition)
+       {
+               super();
+               this.definition = definition;
+               this.minimalAddress = definition.getMinimalAddress();
+               this.maximalAddress = definition.getMaximalAddress();
+               this.pages = new HashMap<>();
+       }
+       
+       private void inBoundsCheck(long address)
+       {
+               if (address < minimalAddress || address > maximalAddress)
+                       throw new IndexOutOfBoundsException(String.format("Memory address out of bounds! Minimum: %d Maximum: %d Actual: %d",
+                                       minimalAddress, maximalAddress, address));
+       }
+
+       private long page(long address)
+       {
+               return address / pageSize;
+       }
+       
+       private int offset(long address)
+       {
+               return (int) (address % pageSize);
+       }
+       
+       @Override
+       public void setCell(long address, T data)
+       {
+               inBoundsCheck(address);
+               long page = page(address);
+               int offset = offset(address);
+               Page p = pages.get(Long.valueOf(page));
+               if (p == null)
+                       pages.put(page, p = new Page());
+               p.setCell(offset, data);
+               notifyObservers(address);
+       }
+
+       @Override
+       public T getCell(long address)
+       {
+               inBoundsCheck(address);
+               long page = page(address);
+               int offset = offset(address);
+               Page p = pages.get(Long.valueOf(page));
+               if (p == null)
+                       return null;
+               return p.getCell(offset);
+       }
+
+       private class Page
+       {
+               private Object[] memory;
+
+               public Page()
+               {
+                       memory = new Object[pageSize];
+               }
+
+               public T getCell(int index)
+               {
+                       @SuppressWarnings("unchecked")
+                       T data = (T) memory[index];
+                       return data;
+               }
+
+               public void setCell(int index, T data)
+               {
+                       memory[index] = data;
+               }
+
+               @Override
+               public String toString()
+               {
+                       return Arrays.deepToString(memory);
+               }
+       }
+
+       @Override
+       public void registerObserver(MemoryObserver ob)
+       {
+               observers.add(ob);
+       }
+
+       @Override
+       public void deregisterObserver(MemoryObserver ob)
+       {
+               observers.remove(ob);
+       }
+
+       @Override
+       public void notifyObservers(long address)
+       {
+               observers.forEach(ob -> ob.update(address));
+       }
+       
+       @Override
+       public MemoryDefinition getDefinition()
+       {
+               return definition;
+       }
+}
index dcd3ee2..94140b7 100644 (file)
@@ -4,13 +4,11 @@ import java.math.BigInteger;
 
 import net.mograsim.logic.core.types.BitVector;
 
-public interface MainMemory extends Memory<BitVector> {
-       
+public interface MainMemory extends Memory<BitVector>
+{
        public BigInteger getCellAsBigInteger(long address);
+
        public void setCellAsBigInteger(long address, BigInteger word);
+
        public MainMemoryDefinition getDefinition();
-       public default long size()
-       {
-               return getDefinition().size();
-       }
 }
index f01d119..4f69673 100644 (file)
@@ -7,17 +7,8 @@ package net.mograsim.machine;
  * @author Christian Femers
  *
  */
-public interface MainMemoryDefinition {
-
-       /**
-        * The number of bits that the main memory uses to address cells. Note that this
-        * does not need to equal {@link MachineDefinition#getAddressBits()}.
-        * 
-        * @return the number of bits used to address a memory cell
-        * @author Christian Femers
-        */
-       int getMemoryAddressBits();
-
+public interface MainMemoryDefinition extends MemoryDefinition
+{
        /**
         * The width in bits of an addressable memory cell/unit. This is often 8 (= one
         * byte). The actual cells/lines of the memory may be a lot larger.
@@ -26,30 +17,9 @@ public interface MainMemoryDefinition {
         * @author Christian Femers
         */
        int getCellWidth();
-
-       /**
-        * The minimal address possible to address/use. This is usually 0.
-        * 
-        * @return the minimal possible address.
-        * @author Christian Femers
-        */
-       long getMinimalAddress();
-
-       /**
-        * The maximal address possible to address/use.
-        * 
-        * @return the maximal possible address as <b>unsigned long</b>
-        * @author Christian Femers
-        */
-       long getMaximalAddress();
        
-       /**
-        * The size of the MainMemory as the amount of addressable memory cells.
-        * 
-        * @return the amount of addressable memory cells
-        */
-       default long size()
+       public static MainMemoryDefinition create(int memoryAddressBits, int cellWidth, long minimalAddress, long maximalAddress)
        {
-               return getMaximalAddress() - getMinimalAddress();
+               return new StandardMainMemoryDefinition(memoryAddressBits, cellWidth, minimalAddress, maximalAddress);
        }
 }
index e421e47..58798c3 100644 (file)
@@ -16,7 +16,11 @@ public interface Memory<T>
         */
        public void setCell(long address, T data);
        
-       public long size();
+       public default long size()
+       {
+               MemoryDefinition def = getDefinition();
+               return Long.max(0, def.getMaximalAddress() - def.getMinimalAddress());
+       }
        
        /**
         * Registers an observer to be notified when a memory cell is modified
@@ -26,4 +30,6 @@ public interface Memory<T>
        public void deregisterObserver(MemoryObserver ob);
        
        public void notifyObservers(long address);
+       
+       public MemoryDefinition getDefinition();
 }
diff --git a/net.mograsim.machine/src/net/mograsim/machine/MemoryDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/MemoryDefinition.java
new file mode 100644 (file)
index 0000000..5f42d10
--- /dev/null
@@ -0,0 +1,44 @@
+package net.mograsim.machine;
+
+public interface MemoryDefinition {
+
+       /**
+        * The number of bits that the main memory uses to address cells. Note that this
+        * does not need to equal {@link MachineDefinition#getAddressBits()}.
+        * 
+        * @return the number of bits used to address a memory cell
+        * @author Christian Femers
+        */
+       int getMemoryAddressBits();
+
+       /**
+        * The minimal address possible to address/use. This is usually 0.
+        * 
+        * @return the minimal possible address.
+        * @author Christian Femers
+        */
+       long getMinimalAddress();
+
+       /**
+        * The maximal address possible to address/use.
+        * 
+        * @return the maximal possible address as <b>unsigned long</b>
+        * @author Christian Femers
+        */
+       long getMaximalAddress();
+       
+       /**
+        * The size of the MainMemory as the amount of addressable memory cells.
+        * 
+        * @return the amount of addressable memory cells
+        */
+       default long size()
+       {
+               return getMaximalAddress() - getMinimalAddress();
+       }
+       
+       public static MemoryDefinition create(int memoryAddressBits, long minimalAddress, long maximalAddress)
+       {
+               return new StandardMemoryDefinition(memoryAddressBits, minimalAddress, maximalAddress);
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/MicroInstruction.java b/net.mograsim.machine/src/net/mograsim/machine/MicroInstruction.java
deleted file mode 100644 (file)
index 9f16320..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.mograsim.machine;
-
-import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
-import net.mograsim.machine.mi.parameters.Mnemonic;
-
-public interface MicroInstruction {
-       
-       public MicroInstructionParameter getParameter(int index);
-       
-       /**
-        * @return The amount of {@link Mnemonic}s, the instruction is composed of
-        */
-       public int getSize();
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/MicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/MicroInstructionDefinition.java
deleted file mode 100644 (file)
index 63134a0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-package net.mograsim.machine;
-
-import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
-import net.mograsim.machine.mi.parameters.ParameterClassification;
-
-public interface MicroInstructionDefinition
-{
-       /**
-        * @return The {@link ParameterClassification}s of which a MicroInstruction is composed.
-        */
-       public ParameterClassification[] getParameterClassifications();
-       
-       /**
-        * @return The amount of {@link MicroInstructionParameter}s in a {@link MicroInstruction} that follows this definition.
-        */
-       public default int size()
-       {
-               return getParameterClassifications().length;
-       }
-       
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/MicroprogramMemory.java b/net.mograsim.machine/src/net/mograsim/machine/MicroprogramMemory.java
deleted file mode 100644 (file)
index 333f8a6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.mograsim.machine;
-
-public interface MicroprogramMemory extends Memory<MicroInstruction>
-{
-}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/StandardMainMemoryDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/StandardMainMemoryDefinition.java
new file mode 100644 (file)
index 0000000..1e3bd50
--- /dev/null
@@ -0,0 +1,17 @@
+package net.mograsim.machine;
+
+class StandardMainMemoryDefinition extends StandardMemoryDefinition implements MainMemoryDefinition {
+       private final int cellWidth;
+       
+       StandardMainMemoryDefinition(int memoryAddressBits, int cellWidth, long minimalAddress, long maximalAddress)
+       {
+               super(memoryAddressBits, minimalAddress, maximalAddress);
+               this.cellWidth = cellWidth;
+       }
+
+       @Override
+       public int getCellWidth()
+       {
+               return cellWidth;
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java
new file mode 100644 (file)
index 0000000..7ba5fb8
--- /dev/null
@@ -0,0 +1,42 @@
+package net.mograsim.machine;
+
+class StandardMemoryDefinition implements MemoryDefinition {
+       private final int memoryAddressBits;
+       private final long minimalAddress, maximalAddress;
+       
+       StandardMemoryDefinition(int memoryAddressBits, long minimalAddress, long maximalAddress)
+       {
+               super();
+               this.memoryAddressBits = memoryAddressBits;
+               this.minimalAddress = minimalAddress;
+               this.maximalAddress = maximalAddress;
+       }
+
+       public StandardMemoryDefinition(MainMemoryDefinition definition)
+       {
+               this(definition.getMemoryAddressBits(), definition.getMinimalAddress(), definition.getMaximalAddress());
+       }
+
+       @Override
+       public int getMemoryAddressBits()
+       {
+               return memoryAddressBits;
+       }
+
+       @Override
+       public long getMinimalAddress()
+       {
+               return minimalAddress;
+       }
+
+       @Override
+       public long getMaximalAddress()
+       {
+               return maximalAddress;
+       }
+       
+       public static MemoryDefinition create(int memoryAddressBits, long minimalAddress, long maximalAddress)
+       {
+               return new StandardMemoryDefinition(memoryAddressBits, minimalAddress, maximalAddress);
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstruction.java
new file mode 100644 (file)
index 0000000..07a15d2
--- /dev/null
@@ -0,0 +1,20 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
+import net.mograsim.machine.mi.parameters.Mnemonic;
+
+public interface MicroInstruction {
+       
+       public MicroInstructionParameter getParameter(int index);
+       public void setParameter(int index, MicroInstructionParameter param);
+       
+       /**
+        * @return The amount of {@link Mnemonic}s, the instruction is composed of
+        */
+       public int getSize();
+       
+       public static MicroInstruction create(MicroInstructionParameter... parameters)
+       {
+               return new StandardMicroInstruction(parameters);
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionDefinition.java
new file mode 100644 (file)
index 0000000..b940e65
--- /dev/null
@@ -0,0 +1,31 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
+import net.mograsim.machine.mi.parameters.ParameterClassification;
+
+public interface MicroInstructionDefinition
+{
+       /**
+        * @return The {@link ParameterClassification}s of which a MicroInstruction is composed.
+        */
+       public ParameterClassification[] getParameterClassifications();
+       
+       /**
+        * @throws IndexOutOfBoundsException
+        */
+       public ParameterClassification getParameterClassification(int index);
+       
+       
+       /**
+        * @return The amount of {@link MicroInstructionParameter}s in a {@link MicroInstruction} that follows this definition.
+        */
+       public default int size()
+       {
+               return getParameterClassifications().length;
+       }
+       
+       public static MicroInstructionDefinition create(ParameterClassification... classes)
+       {
+               return new StandardMicroInstructionDefinition(classes);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemory.java
new file mode 100644 (file)
index 0000000..e31ce77
--- /dev/null
@@ -0,0 +1,12 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.Memory;
+import net.mograsim.machine.MemoryDefinition;
+
+public interface MicroprogramMemory extends Memory<MicroInstruction>
+{
+       public static MicroprogramMemory create(MemoryDefinition def)
+       {
+               return new StandardMicroprogramMemory(def);
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroprogramMemoryParser.java
new file mode 100644 (file)
index 0000000..065ba15
--- /dev/null
@@ -0,0 +1,94 @@
+package net.mograsim.machine.mi;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.math.BigInteger;
+
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.machine.MemoryDefinition;
+import net.mograsim.machine.mi.parameters.BooleanClassification;
+import net.mograsim.machine.mi.parameters.BooleanImmediate;
+import net.mograsim.machine.mi.parameters.IntegerClassification;
+import net.mograsim.machine.mi.parameters.IntegerImmediate;
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
+import net.mograsim.machine.mi.parameters.MnemonicFamily;
+import net.mograsim.machine.mi.parameters.MnemonicFamily.MnemonicPair;
+import net.mograsim.machine.mi.parameters.ParameterClassification;
+
+public class MicroprogramMemoryParser
+{
+       public static void parse(MicroprogramMemory memory, long startAddress, MicroInstructionDefinition definition, String input) throws IOException
+       {
+               try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(input))))
+               {
+                       parse(memory, startAddress, definition, reader);
+               }
+       }
+
+       public static void parse(MicroprogramMemory memory, long startAddress, MicroInstructionDefinition definition,
+                       BufferedReader input)
+       {
+               MemoryDefinition def = memory.getDefinition();
+               long minAddress = Long.max(startAddress, def.getMinimalAddress()), maxAddress = def.getMaximalAddress();
+               try
+               {
+                       String line;
+                       for (long i = minAddress; i < maxAddress && input.ready() && !"".equals((line = input.readLine())); i++)
+                               memory.setCell(i, parse(definition, line));
+               } catch (IOException e)
+               {
+                       e.printStackTrace();
+               }
+       }
+
+       public static MicroInstruction parse(MicroInstructionDefinition definition, String toParse)
+       {
+               int size = definition.size();
+               String[] strings = toParse.split(",");
+               if (size != strings.length)
+                       throw new IllegalArgumentException(
+                                       "String does not match definition! The number of parameters does not match.");
+               MicroInstructionParameter[] params = new MicroInstructionParameter[size];
+               ParameterClassification[] classes = definition.getParameterClassifications();
+               for (int i = 0; i < size; i++)
+               {
+                       params[i] = classes[i].parse(strings[i]);
+               }
+               return new StandardMicroInstruction(params);
+       }
+       
+       public static void write(MicroprogramMemory memory, long startAddress, long endAddress, String output) throws IOException
+       {
+               try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(output)))
+               {
+                       write(memory, startAddress, endAddress, writer);
+               }
+       }
+       
+       public static void write(MicroprogramMemory memory, long startAddress, long endAddress, OutputStreamWriter output) throws IOException
+       {
+               MemoryDefinition def = memory.getDefinition();
+               long min = Long.max(def.getMinimalAddress(), startAddress), max = Long.min(def.getMaximalAddress(), endAddress) + 1;
+               for(long i = min; i < max; i++)
+               {
+                       output.write(toCSV(memory.getCell(i)) + "\n");
+               }
+       }
+       
+       private static String toCSV(MicroInstruction inst)
+       {
+               int max = inst.getSize() - 1;
+               StringBuilder sb = new StringBuilder();
+               for(int i = 0; i < max; i++)
+               {
+                       sb.append(inst.getParameter(i).toString());
+                       sb.append(",");
+               }
+               sb.append(inst.getParameter(max).toString());
+               return sb.toString();
+       }
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstruction.java
new file mode 100644 (file)
index 0000000..e40350d
--- /dev/null
@@ -0,0 +1,38 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
+
+class StandardMicroInstruction implements MicroInstruction
+{
+       private MicroInstructionParameter[] parameters;
+
+       StandardMicroInstruction(MicroInstructionParameter... parameters)
+       {
+               this.parameters = parameters;
+       }
+       
+       /**
+        * @throws IndexOutOfBoundsException
+        */
+       @Override
+       public MicroInstructionParameter getParameter(int index)
+       {
+               return parameters[index];
+       }
+
+       @Override
+       public int getSize()
+       {
+               return parameters.length;
+       }
+
+       /**
+        * @throws IndexOutOfBoundsException
+        */
+       @Override
+       public void setParameter(int index, MicroInstructionParameter param)
+       {
+               parameters[index] = param;
+       }
+
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionDefinition.java
new file mode 100644 (file)
index 0000000..2def5e1
--- /dev/null
@@ -0,0 +1,26 @@
+package net.mograsim.machine.mi;
+
+import net.mograsim.machine.mi.parameters.ParameterClassification;
+
+class StandardMicroInstructionDefinition implements MicroInstructionDefinition
+{
+       private ParameterClassification[] classes;
+       
+       public StandardMicroInstructionDefinition(ParameterClassification... classes)
+       {
+               this.classes = classes;
+       }
+
+       @Override
+       public ParameterClassification[] getParameterClassifications()
+       {
+               return classes.clone();
+       }
+
+       @Override
+       public ParameterClassification getParameterClassification(int index)
+       {
+               return classes[index];
+       }
+
+}
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroprogramMemory.java
new file mode 100644 (file)
index 0000000..a253f22
--- /dev/null
@@ -0,0 +1,64 @@
+package net.mograsim.machine.mi;
+
+import java.util.HashSet;
+
+import net.mograsim.machine.MemoryDefinition;
+import net.mograsim.machine.MemoryObserver;
+import net.mograsim.machine.standard.memory.MemoryException;
+
+class StandardMicroprogramMemory implements MicroprogramMemory
+{
+       private MicroInstruction[] data;
+       private MemoryDefinition definition;
+       private HashSet<MemoryObserver> observers;
+       
+       StandardMicroprogramMemory(MemoryDefinition definition)
+       {
+               if(definition.size() > Integer.MAX_VALUE)
+                       throw new MemoryException("Size of MicroprogramMemory must be an int, not a long");
+               this.definition = definition;
+               data = new MicroInstruction[(int) definition.size()];
+       }
+       
+       private int translate(long address)
+       {
+               return (int) (address - definition.getMinimalAddress());
+       }
+       
+       @Override
+       public MicroInstruction getCell(long address)
+       {
+               return data[translate(address)];
+       }
+
+       @Override
+       public void setCell(long address, MicroInstruction data)
+       {
+               this.data[translate(address)] = data;
+       }
+
+       @Override
+       public void registerObserver(MemoryObserver ob)
+       {
+               observers.add(ob);
+       }
+
+       @Override
+       public void deregisterObserver(MemoryObserver ob)
+       {
+               observers.remove(ob);
+       }
+
+       @Override
+       public void notifyObservers(long address)
+       {
+               observers.forEach(ob -> ob.update(address));
+       }
+
+       @Override
+       public MemoryDefinition getDefinition()
+       {
+               return definition;
+       }
+
+}
index abe552f..1689cff 100644 (file)
@@ -15,4 +15,10 @@ public class BooleanClassification implements ParameterClassification
        {
                return 1;
        }
+       
+       @Override
+       public BooleanImmediate parse(String toParse)
+       {
+               return new BooleanImmediate("H".equals(toParse));
+       }
 }
index d5ba964..b28a436 100644 (file)
@@ -1,5 +1,7 @@
 package net.mograsim.machine.mi.parameters;
 
+import java.math.BigInteger;
+
 import net.mograsim.machine.mi.parameters.MicroInstructionParameter.ParameterType;
 
 public class IntegerClassification implements ParameterClassification
@@ -22,4 +24,10 @@ public class IntegerClassification implements ParameterClassification
        {
                return bits;
        }
+       
+       @Override
+       public IntegerImmediate parse(String toParse)
+       {
+               return new IntegerImmediate(new BigInteger(toParse), bits);
+       }
 }
index b9c1373..a513b60 100644 (file)
@@ -104,8 +104,6 @@ public class MnemonicFamily implements ParameterClassification
                return stringValues.clone();
        }
        
-       
-       
        @Override
        public int hashCode()
        {
@@ -120,8 +118,15 @@ public class MnemonicFamily implements ParameterClassification
        {
                return this == obj;
        }
-
-
+       
+       @Override
+       public Mnemonic parse(String toParse)
+       {
+               Mnemonic parsed = get(toParse);
+               if(parsed == null)
+                       throw new UnknownMnemonicException(toParse);
+               return parsed;
+       }
 
        public static class MnemonicPair
        {
index 3b3f1a2..3373401 100644 (file)
@@ -22,4 +22,6 @@ public interface ParameterClassification
         * @return The number of bits of the parameters in this classification.
         */
        public int getExpectedBits();
+       
+       public MicroInstructionParameter parse(String toParse);
 }
diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/UnknownMnemonicException.java b/net.mograsim.machine/src/net/mograsim/machine/mi/parameters/UnknownMnemonicException.java
new file mode 100644 (file)
index 0000000..9b23236
--- /dev/null
@@ -0,0 +1,26 @@
+package net.mograsim.machine.mi.parameters;
+
+import net.mograsim.machine.MachineException;
+
+public class UnknownMnemonicException extends MachineException
+{
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 701558899889830975L;
+
+       public UnknownMnemonicException()
+       {
+               super();
+       }
+       
+       public UnknownMnemonicException(String message)
+       {
+               super(message);
+       }
+       
+       public UnknownMnemonicException(Throwable cause)
+       {
+               super(cause);
+       }
+}
index 1632c8e..079c7e5 100644 (file)
@@ -2,8 +2,8 @@ package net.mograsim.machine.standard.memory;
 
 import org.eclipse.swt.graphics.Color;
 
-import com.google.gson.Gson;
 import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
@@ -16,7 +16,6 @@ import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
 import net.mograsim.logic.model.serializing.IdentifierGetter;
 import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
-import net.mograsim.machine.DefaultMainMemoryDefinition;
 import net.mograsim.machine.MainMemoryDefinition;
 import net.mograsim.machine.standard.memory.WordAddressableMemoryComponent;
 import net.mograsim.preferences.Preferences;
@@ -27,6 +26,8 @@ public class GUIMemoryWA extends GUIComponent
        private final Pin addrPin, dataPin, rWPin;
        private WordAddressableMemoryComponent memory;
        private final static int width = 100, height = 300;
+       
+       private final static String addrKey = "addrBits", cellWidthKey = "cellWidth", minAddrKey = "minAddr", maxAddrKey = "maxAddr";
 
        public GUIMemoryWA(ViewModelModifiable model, MainMemoryDefinition definition, String name)
        {
@@ -91,7 +92,12 @@ public class GUIMemoryWA extends GUIComponent
        @Override
        public JsonElement getParamsForSerializing(IdentifierGetter idGetter)
        {
-               return new Gson().toJsonTree(new DefaultMainMemoryDefinition(definition));
+               JsonObject o = new JsonObject();
+               o.addProperty(addrKey, definition.getMemoryAddressBits());
+               o.addProperty(cellWidthKey, definition.getCellWidth());
+               o.addProperty(maxAddrKey, definition.getMaximalAddress());
+               o.addProperty(minAddrKey, definition.getMinimalAddress());
+               return o;
        }
 
        static
@@ -99,7 +105,12 @@ public class GUIMemoryWA extends GUIComponent
                ViewLogicModelAdapter.addComponentAdapter(new WordAddressableMemoryAdapter());
                IndirectGUIComponentCreator.setComponentSupplier(GUIAndGate.class.getCanonicalName(), (m, p, n) ->
                {
-                       return new GUIMemoryWA(m, new Gson().fromJson(p, DefaultMainMemoryDefinition.class), n);
+                       JsonObject o = (JsonObject) p;
+                       int addressBits = o.get(addrKey).getAsInt();
+                       int cellWidth = o.get(cellWidthKey).getAsInt();
+                       long maxAddr = o.get(maxAddrKey).getAsLong();
+                       long minAddr = o.get(minAddrKey).getAsLong();
+                       return new GUIMemoryWA(m, MainMemoryDefinition.create(addressBits, cellWidth, minAddr, maxAddr), n);
                });
        }
 }
index 516b01f..3dddc2e 100644 (file)
 package net.mograsim.machine.standard.memory;
 
 import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
 
 import net.mograsim.logic.core.types.Bit;
 import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.machine.GenericMemory;
 import net.mograsim.machine.MainMemory;
 import net.mograsim.machine.MainMemoryDefinition;
-import net.mograsim.machine.MemoryObserver;
 
-public class WordAddressableMemory implements MainMemory
+public class WordAddressableMemory extends GenericMemory<BitVector> implements MainMemory
 {
        private final int cellWidth;
-       private final long minimalAddress, maximalAddress;
        private final MainMemoryDefinition definition;
-       private final int pageSize = 64;
-       private Set<MemoryObserver> observers = new HashSet<>();
-
-       private HashMap<Long, Page> pages;
 
        public WordAddressableMemory(MainMemoryDefinition definition)
        {
-               super();
+               super(definition);
                this.cellWidth = definition.getCellWidth();
-               this.minimalAddress = definition.getMinimalAddress();
-               this.maximalAddress = definition.getMaximalAddress();
                this.definition = definition;
-               this.pages = new HashMap<>();
-       }
-       
-       private void inBoundsCheck(long address)
-       {
-               if (address < minimalAddress || address > maximalAddress)
-                       throw new IndexOutOfBoundsException(String.format("Memory address out of bounds! Minimum: %d Maximum: %d Actual: %d",
-                                       minimalAddress, maximalAddress, address));
-       }
-
-       private long page(long address)
-       {
-               return address / pageSize;
-       }
-       
-       private int offset(long address)
-       {
-               return (int) (address % pageSize);
-       }
-       
-       @Override
-       public void setCell(long address, BitVector b)
-       {
-               inBoundsCheck(address);
-               long page = page(address);
-               int offset = offset(address);
-               Page p = pages.get(Long.valueOf(page));
-               if (p == null)
-                       pages.put(page, p = new Page());
-               p.setCell(offset, b);
-               notifyObservers(address);
        }
 
        @Override
        public BitVector getCell(long address)
        {
-               inBoundsCheck(address);
-               long page = page(address);
-               int offset = offset(address);
-               Page p = pages.get(Long.valueOf(page));
-               if (p == null)
-                       return BitVector.of(Bit.ZERO, cellWidth);
-               return p.getCell(offset);
+               BitVector data = super.getCell(address);
+               return data == null ? BitVector.of(Bit.ZERO, cellWidth) : data;
        }
        
        @Override
        public BigInteger getCellAsBigInteger(long address)
        {
-               inBoundsCheck(address);
-               long page = page(address);
-               int offset = offset(address);
-               Page p = pages.get(Long.valueOf(page));
-               if (p == null)
-                       return BigInteger.valueOf(0L);
-               return p.getCellAsBigInteger(offset);
+               BitVector data = getCell(address);
+               return data == null ? BigInteger.valueOf(0) : data.getUnsignedValue();
        }
 
        @Override
-       public void setCellAsBigInteger(long address, BigInteger word)
-       {
-               inBoundsCheck(address);
-               long page = page(address);
-               int offset = offset(address);
-               Page p = pages.get(Long.valueOf(page));
-               if (p == null)
-                       pages.put(page, p = new Page());
-               p.setCellAsBigInteger(offset, word);
-               notifyObservers(address);
-       }
-
-       private class Page
+       public void setCellAsBigInteger(long address, BigInteger data)
        {
-               private BitVector[] memory;
-
-               public Page()
-               {
-                       memory = new BitVector[pageSize];
-               }
-
-               public BitVector getCell(int index)
-               {
-                       BitVector b = memory[index];
-                       if (b == null)
-                               return BitVector.of(Bit.ZERO, cellWidth);
-                       return memory[index];
-               }
-
-               public void setCell(int index, BitVector bits)
-               {
-                       if (bits.length() != cellWidth)
-                               throw new IllegalArgumentException(String.format(
-                                               "BitVector to be saved in memory cell has unexpected width. Expected: %d Actual: %d", cellWidth, bits.length()));
-                       memory[index] = bits;
-               }
-
-               public void setCellAsBigInteger(int index, BigInteger bits)
-               {
-                       setCell(index, BitVector.from(bits, cellWidth));
-               }
-               
-               public BigInteger getCellAsBigInteger(int index)
-               {
-                       try {
-                               return getCell(index).getUnsignedValue();
-                       }
-                       catch(NumberFormatException e)
-                       {
-                               throw new MemoryException(e);
-                       }
-               }
-
-               @Override
-               public String toString()
-               {
-                       return Arrays.deepToString(memory);
-               }
+               setCell(address, BitVector.from(data, cellWidth));
        }
 
        @Override
@@ -152,22 +45,4 @@ public class WordAddressableMemory implements MainMemory
        {
                return definition;
        }
-
-       @Override
-       public void registerObserver(MemoryObserver ob)
-       {
-               observers.add(ob);
-       }
-
-       @Override
-       public void deregisterObserver(MemoryObserver ob)
-       {
-               observers.remove(ob);
-       }
-
-       @Override
-       public void notifyObservers(long address)
-       {
-               observers.forEach(ob -> ob.update(address));
-       }
 }
index 1fb59d0..5f50dbc 100644 (file)
@@ -12,7 +12,7 @@ import net.mograsim.logic.core.types.Bit;
 import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.core.wires.Wire;
 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-import net.mograsim.machine.DefaultMainMemoryDefinition;
+import net.mograsim.machine.MainMemoryDefinition;
 
 class WordAddressableMemoryTest {
        
@@ -28,7 +28,8 @@ class WordAddressableMemoryTest {
                ReadWriteEnd dataI = data.createReadWriteEnd();
                ReadWriteEnd addressI = address.createReadWriteEnd();
 
-               WordAddressableMemoryComponent memory = new WordAddressableMemoryComponent(t, 4, new DefaultMainMemoryDefinition(64, 16, 4096L, Long.MAX_VALUE), data.createReadWriteEnd(),
+               @SuppressWarnings("unused")
+               WordAddressableMemoryComponent memory = new WordAddressableMemoryComponent(t, 4, MainMemoryDefinition.create(64, 16, 4096L, Long.MAX_VALUE), data.createReadWriteEnd(),
                                rW.createReadOnlyEnd(), address.createReadOnlyEnd());
 
                Random r = new Random();
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java
deleted file mode 100644 (file)
index 10498f6..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import java.math.BigInteger;
-
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.EditingSupport;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TextCellEditor;
-
-import net.mograsim.plugin.asm.AsmNumberUtil;
-import net.mograsim.plugin.memory.MemoryView.DisplaySettings;
-
-public class MemoryCellEditingSupport extends EditingSupport
-{
-       private final TableViewer viewer;
-       private final CellEditor editor;
-       private final DisplaySettings displaySettings;
-
-       public MemoryCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings)
-       {
-               super(viewer);
-               this.viewer = viewer;
-               this.displaySettings = displaySettings;
-               editor = new TextCellEditor(viewer.getTable());
-               editor.setValidator(new NumberCellEditorValidator());
-       }
-
-       @Override
-       protected boolean canEdit(Object element)
-       {
-               return true;
-       }
-
-       @Override
-       protected CellEditor getCellEditor(Object element)
-       {
-               return editor;
-       }
-
-       @Override
-       protected Object getValue(Object element)
-       {
-               MemoryTableRow row = (MemoryTableRow) element;
-               return AsmNumberUtil.toString(row.getMemory().getCellAsBigInteger(row.address), displaySettings.getDataNumberType());
-       }
-
-       @Override
-       protected void setValue(Object element, Object userInput)
-       {
-               MemoryTableRow row = (MemoryTableRow) element;
-               try
-               {
-                       row.getMemory().setCellAsBigInteger(row.address, AsmNumberUtil.valueOf((String) userInput));
-               }
-               catch (@SuppressWarnings("unused") NumberFormatException e)
-               {
-                       row.getMemory().setCellAsBigInteger(row.address, BigInteger.valueOf(0));
-               }
-               viewer.update(element, null);
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java
deleted file mode 100644 (file)
index 9f2a9e1..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import org.eclipse.jface.viewers.ILazyContentProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Display;
-
-import net.mograsim.machine.MainMemory;
-import net.mograsim.machine.MemoryObserver;
-
-public class MemoryTableContentProvider implements ILazyContentProvider, MemoryObserver
-{
-       private long lower;
-       private TableViewer viewer;
-       private final static int limit = 10_000;
-       private int amount = 0;
-       private MainMemory memory;
-
-       public void setLowerBound(long lower)
-       {
-               if (memory != null)
-                       this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower));
-               else
-                       this.lower = lower;
-               updateItemCount();
-       }
-
-       public void updateItemCount()
-       {
-               if (memory != null)
-               {
-                       long size = memory.getDefinition().getMaximalAddress() - lower;
-                       viewer.setItemCount(size > amount ? amount : (int) size);
-               } else
-                       viewer.setItemCount(0);
-       }
-
-       public long getLowerBound()
-       {
-               return lower;
-       }
-
-       public void setAmount(int amount)
-       {
-               this.amount = Integer.min(amount, limit);
-               updateItemCount();
-       }
-
-       public int getAmount()
-       {
-               return amount;
-       }
-
-       @Override
-       public void updateElement(int index)
-       {
-               long address = lower + index;
-               if (address <= memory.getDefinition().getMaximalAddress())
-                       viewer.replace(new MemoryTableRow(address, memory), index);
-       }
-
-       @Override
-       public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
-       {
-               this.viewer = (TableViewer) viewer;
-               this.memory = (MainMemory) newInput;
-               if (oldInput != null)
-                       ((MainMemory) oldInput).deregisterObserver(this);
-               if (memory != null)
-                       memory.registerObserver(this);
-               setLowerBound(0L);
-       }
-
-       @Override
-       public void update(long address)
-       {
-               Display.getDefault().asyncExec(() -> updateElement((int) (address - lower)));
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java
deleted file mode 100644 (file)
index fa5b626..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import net.mograsim.machine.MainMemory;
-
-public class MemoryTableRow
-{
-       public final long address;
-       private final MainMemory memory;
-
-       public MemoryTableRow(long address, MainMemory memory)
-       {
-               this.address = address;
-               this.memory = memory;
-       }
-
-       public MainMemory getMemory()
-       {
-               return memory;
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java
deleted file mode 100644 (file)
index 5254745..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.VerifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.part.ViewPart;
-
-import net.mograsim.machine.DefaultMainMemoryDefinition;
-import net.mograsim.machine.MainMemory;
-import net.mograsim.machine.standard.memory.WordAddressableMemory;
-import net.mograsim.plugin.asm.AsmNumberUtil;
-import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
-
-public class MemoryView extends ViewPart
-{
-       private TableViewer viewer;
-       private MemoryTableContentProvider provider;
-       private DisplaySettings displaySettings;
-       private String addressFormat;
-
-       @Override
-       public void createPartControl(Composite parent)
-       {
-               provider = new MemoryTableContentProvider();
-               displaySettings = new DisplaySettings();
-               displaySettings.setDataNumberType(NumberType.HEXADECIMAL);
-
-               GridLayout layout = new GridLayout(6, false);
-               parent.setLayout(layout);
-               Label fromLabel = new Label(parent, SWT.NONE);
-               fromLabel.setText("Address: ");
-               Text fromText = new Text(parent, SWT.BORDER | SWT.SEARCH);
-               fromText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
-               VerifyListener vl = new NumberVerifyListener();
-               fromText.addVerifyListener(vl);
-               fromText.setText("0");
-               fromText.addModifyListener(e ->
-               {
-                       try
-                       {
-                               provider.setLowerBound(AsmNumberUtil.valueOf(fromText.getText()).longValue());
-                               viewer.refresh();
-                       }
-                       catch (@SuppressWarnings("unused") NumberFormatException ex)
-                       {
-                               // Nothing to do here
-                       }
-               });
-
-               Label amountLabel = new Label(parent, SWT.NONE);
-               amountLabel.setText("Number of cells: ");
-               Text amountText = new Text(parent, SWT.BORDER | SWT.SEARCH);
-               amountText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
-               amountText.addVerifyListener(vl);
-               amountText.setText("0");
-               amountText.addModifyListener(e ->
-               {
-                       try
-                       {
-                               provider.setAmount(AsmNumberUtil.valueOf(amountText.getText()).intValue());
-                               viewer.refresh();
-                       }
-                       catch (@SuppressWarnings("unused") NumberFormatException ex)
-                       {
-                               // Nothing to do here
-                       }
-               });
-
-               setupRadixSelector(parent);
-
-               createViewer(parent);
-       }
-
-       private void setupRadixSelector(Composite parent)
-       {
-               Label radixLabel = new Label(parent, SWT.NONE);
-               radixLabel.setText("Radix: ");
-               Combo selectRadix = new Combo(parent, SWT.READ_ONLY);
-
-               String entries[] = new String[] { "Binary", "Octal", "Decimal", "Hexadecimal" };
-               NumberType corTypes[] = new NumberType[] { NumberType.BINARY, NumberType.OCTAL, NumberType.DECIMAL, NumberType.HEXADECIMAL };
-               selectRadix.setItems(entries);
-               selectRadix.addSelectionListener(new SelectionListener()
-               {
-                       @Override
-                       public void widgetSelected(SelectionEvent e)
-                       {
-                               int index = selectRadix.getSelectionIndex();
-                               if (index == -1)
-                                       displaySettings.setDataNumberType(NumberType.HEXADECIMAL);
-                               else
-                               {
-                                       displaySettings.setDataNumberType(corTypes[index]);
-                               }
-                               viewer.refresh();
-                       }
-
-                       @Override
-                       public void widgetDefaultSelected(SelectionEvent e)
-                       {
-                               widgetSelected(e);
-                       }
-               });
-       }
-
-       private void createViewer(Composite parent)
-       {
-               viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL);
-               createColumns();
-               Table table = viewer.getTable();
-               table.setHeaderVisible(true);
-               table.setLinesVisible(true);
-               viewer.setUseHashlookup(true);
-               viewer.setContentProvider(provider);
-               setMemoryBinding(new WordAddressableMemory(new DefaultMainMemoryDefinition(8, 8, 8L, Long.MAX_VALUE)));
-               getSite().setSelectionProvider(viewer);
-
-               GridData gd = new GridData();
-               gd.verticalAlignment = GridData.FILL;
-               gd.horizontalSpan = 6;
-               gd.grabExcessHorizontalSpace = true;
-               gd.grabExcessVerticalSpace = true;
-               gd.horizontalAlignment = GridData.FILL;
-               viewer.getControl().setLayoutData(gd);
-       }
-
-       private void createColumns()
-       {
-               String[] titles = { "Address", "Data" };
-               int[] bounds = { 100, 100 };
-
-               TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0]);
-               col.setLabelProvider(new ColumnLabelProvider()
-               {
-                       @Override
-                       public String getText(Object element)
-                       {
-                               MemoryTableRow row = (MemoryTableRow) element;
-                               return String.format(addressFormat, row.address);// TODO: make the string length dependent on memory address length
-                       }
-               });
-
-               col = createTableViewerColumn(titles[1], bounds[1]);
-               col.setLabelProvider(new ColumnLabelProvider()
-               {
-                       @Override
-                       public String getText(Object element)
-                       {
-                               MemoryTableRow row = (MemoryTableRow) element;
-                               return AsmNumberUtil.toString(row.getMemory().getCellAsBigInteger(row.address), displaySettings.getDataNumberType());
-                       }
-               });
-               col.setEditingSupport(new MemoryCellEditingSupport(viewer, displaySettings));
-       }
-
-       private TableViewerColumn createTableViewerColumn(String title, int bound)
-       {
-               TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
-               TableColumn column = viewerColumn.getColumn();
-               column.setText(title);
-               column.setWidth(bound);
-               column.setResizable(true);
-               column.setMoveable(false);
-               return viewerColumn;
-       }
-
-       @Override
-       public void setFocus()
-       {
-               viewer.getControl().setFocus();
-       }
-
-       public void setMemoryBinding(MainMemory m)
-       {
-               int hexAddressLength = Long.toUnsignedString(m.getDefinition().getMaximalAddress(), 16).length();
-               addressFormat = "0x%0" + hexAddressLength + "X";
-               viewer.setInput(m);
-       }
-
-       public static class DisplaySettings
-       {
-               private AsmNumberUtil.NumberType dataNumberType;
-
-               public AsmNumberUtil.NumberType getDataNumberType()
-               {
-                       return dataNumberType;
-               }
-
-               public void setDataNumberType(AsmNumberUtil.NumberType dataNumberType)
-               {
-                       this.dataNumberType = dataNumberType;
-               }
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java
deleted file mode 100644 (file)
index 236eaa0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import org.eclipse.jface.viewers.ICellEditorValidator;
-
-import net.mograsim.plugin.asm.AsmNumberUtil;
-
-public class NumberCellEditorValidator implements ICellEditorValidator
-{
-
-       @Override
-       public String isValid(Object value)
-       {
-               return AsmNumberUtil.NumberType.NONE.equals(AsmNumberUtil.getType((String) value)) ? (String) value + "is not a valid number"
-                               : null;
-       }
-
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java
deleted file mode 100644 (file)
index 4e5d11c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.mograsim.plugin.memory;
-
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
-import org.eclipse.swt.widgets.Text;
-
-import net.mograsim.plugin.asm.AsmNumberUtil;
-import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
-
-public class NumberVerifyListener implements VerifyListener
-{
-
-       @Override
-       public void verifyText(VerifyEvent e)
-       {
-               String text = computeModifiedText(e);
-               e.doit = !NumberType.NONE.equals(AsmNumberUtil.prefixOfType(text));
-       }
-
-       private static String computeModifiedText(VerifyEvent e)
-       {
-               String modifiedText = ((Text) e.getSource()).getText();
-               modifiedText = modifiedText.substring(0, e.start).concat(e.text).concat(modifiedText.substring(e.end));
-               return modifiedText;
-       }
-}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java
new file mode 100644 (file)
index 0000000..7bba426
--- /dev/null
@@ -0,0 +1,63 @@
+package net.mograsim.plugin.tables;
+
+import java.math.BigInteger;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.tables.memory.DisplaySettings;
+
+public abstract class NumberCellEditingSupport extends EditingSupport
+{
+       private final TableViewer viewer;
+       private final CellEditor editor;
+       private final DisplaySettings displaySettings;
+
+       public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings)
+       {
+               super(viewer);
+               this.viewer = viewer;
+               this.displaySettings = displaySettings;
+               editor = new TextCellEditor(viewer.getTable());
+               editor.setValidator(new NumberCellEditorValidator());
+       }
+
+       @Override
+       final protected boolean canEdit(Object element)
+       {
+               return true;
+       }
+
+       @Override
+       final protected CellEditor getCellEditor(Object element)
+       {
+               return editor;
+       }
+
+       @Override
+       final protected Object getValue(Object element)
+       {
+               return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType());
+       }
+
+       @Override
+       final protected void setValue(Object element, Object userInput)
+       {
+               try
+               {
+                       setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput));
+               }
+               catch (@SuppressWarnings("unused") NumberFormatException e)
+               {
+                       setAsBigInteger(element, BigInteger.valueOf(0));
+               }
+               viewer.update(element, null);
+       }
+
+       protected abstract void setAsBigInteger(Object element, BigInteger value);
+
+       protected abstract BigInteger getAsBigInteger(Object element);
+}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java
new file mode 100644 (file)
index 0000000..e0b445d
--- /dev/null
@@ -0,0 +1,17 @@
+package net.mograsim.plugin.tables;
+
+import org.eclipse.jface.viewers.ICellEditorValidator;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+
+public class NumberCellEditorValidator implements ICellEditorValidator
+{
+
+       @Override
+       public String isValid(Object value)
+       {
+               return AsmNumberUtil.NumberType.NONE.equals(AsmNumberUtil.getType((String) value)) ? (String) value + "is not a valid number"
+                               : null;
+       }
+
+}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java
new file mode 100644 (file)
index 0000000..35f032a
--- /dev/null
@@ -0,0 +1,26 @@
+package net.mograsim.plugin.tables;
+
+import java.math.BigInteger;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.tables.memory.DisplaySettings;
+
+public abstract class NumberColumnLabelProvider extends ColumnLabelProvider
+{
+       private DisplaySettings displaySettings;
+
+       public NumberColumnLabelProvider(DisplaySettings displaySettings)
+       {
+               this.displaySettings = displaySettings;
+       }
+
+       @Override
+       public String getText(Object element)
+       {
+               return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType());
+       }
+
+       public abstract BigInteger getAsBigInteger(Object element);
+}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java
new file mode 100644 (file)
index 0000000..8816a52
--- /dev/null
@@ -0,0 +1,23 @@
+package net.mograsim.plugin.tables.memory;
+
+import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
+
+public class DisplaySettings
+{
+       private NumberType dataNumberType;
+
+       public DisplaySettings(NumberType dataNumberType)
+       {
+               this.dataNumberType = dataNumberType;
+       }
+
+       public NumberType getDataNumberType()
+       {
+               return dataNumberType;
+       }
+
+       public void setDataNumberType(NumberType dataNumberType)
+       {
+               this.dataNumberType = dataNumberType;
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java
new file mode 100644 (file)
index 0000000..94f1821
--- /dev/null
@@ -0,0 +1,29 @@
+package net.mograsim.plugin.tables.memory;
+
+import java.math.BigInteger;
+
+import org.eclipse.jface.viewers.TableViewer;
+
+import net.mograsim.plugin.tables.NumberCellEditingSupport;
+
+public class MemoryCellEditingSupport extends NumberCellEditingSupport
+{
+       public MemoryCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings)
+       {
+               super(viewer, displaySettings);
+       }
+
+       @Override
+       protected void setAsBigInteger(Object element, BigInteger value)
+       {
+               MemoryTableRow row = (MemoryTableRow) element;
+               row.getMemory().setCellAsBigInteger(row.address, value);
+       }
+
+       @Override
+       protected BigInteger getAsBigInteger(Object element)
+       {
+               MemoryTableRow row = (MemoryTableRow) element;
+               return row.getMemory().getCellAsBigInteger(row.address);
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java
new file mode 100644 (file)
index 0000000..aaecc75
--- /dev/null
@@ -0,0 +1,79 @@
+package net.mograsim.plugin.tables.memory;
+
+import org.eclipse.jface.viewers.ILazyContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+
+import net.mograsim.machine.MainMemory;
+import net.mograsim.machine.MemoryObserver;
+
+public class MemoryTableContentProvider implements ILazyContentProvider, MemoryObserver
+{
+       private long lower;
+       private TableViewer viewer;
+       private final static int limit = 10_000;
+       private int amount = 0;
+       private MainMemory memory;
+
+       public void setLowerBound(long lower)
+       {
+               if (memory != null)
+                       this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower));
+               else
+                       this.lower = lower;
+               updateItemCount();
+       }
+
+       public void updateItemCount()
+       {
+               if (memory != null)
+               {
+                       long size = memory.getDefinition().getMaximalAddress() - lower;
+                       viewer.setItemCount(size > amount ? amount : (int) size);
+               } else
+                       viewer.setItemCount(0);
+       }
+
+       public long getLowerBound()
+       {
+               return lower;
+       }
+
+       public void setAmount(int amount)
+       {
+               this.amount = Integer.min(amount, limit);
+               updateItemCount();
+       }
+
+       public int getAmount()
+       {
+               return amount;
+       }
+
+       @Override
+       public void updateElement(int index)
+       {
+               long address = lower + index;
+               if (address <= memory.getDefinition().getMaximalAddress())
+                       viewer.replace(new MemoryTableRow(address, memory), index);
+       }
+
+       @Override
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+       {
+               this.viewer = (TableViewer) viewer;
+               this.memory = (MainMemory) newInput;
+               if (oldInput != null)
+                       ((MainMemory) oldInput).deregisterObserver(this);
+               if (memory != null)
+                       memory.registerObserver(this);
+               setLowerBound(0L);
+       }
+
+       @Override
+       public void update(long address)
+       {
+               Display.getDefault().asyncExec(() -> updateElement((int) (address - lower)));
+       }
+}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java
new file mode 100644 (file)
index 0000000..6f1c353
--- /dev/null
@@ -0,0 +1,20 @@
+package net.mograsim.plugin.tables.memory;
+
+import net.mograsim.machine.MainMemory;
+
+public class MemoryTableRow
+{
+       public final long address;
+       private final MainMemory memory;
+
+       public MemoryTableRow(long address, MainMemory memory)
+       {
+               this.address = address;
+               this.memory = memory;
+       }
+
+       public MainMemory getMemory()
+       {
+               return memory;
+       }
+}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java
new file mode 100644 (file)
index 0000000..98983a6
--- /dev/null
@@ -0,0 +1,194 @@
+package net.mograsim.plugin.tables.memory;
+
+import java.math.BigInteger;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.part.ViewPart;
+
+import net.mograsim.machine.MainMemory;
+import net.mograsim.machine.MainMemoryDefinition;
+import net.mograsim.machine.standard.memory.WordAddressableMemory;
+import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
+import net.mograsim.plugin.tables.NumberColumnLabelProvider;
+
+public class MemoryView extends ViewPart
+{
+       private TableViewer viewer;
+       private MemoryTableContentProvider provider;
+       private DisplaySettings displaySettings;
+       private String addressFormat;
+
+       @Override
+       public void createPartControl(Composite parent)
+       {
+               provider = new MemoryTableContentProvider();
+               displaySettings = new DisplaySettings(NumberType.HEXADECIMAL);
+
+               GridLayout layout = new GridLayout(6, false);
+               parent.setLayout(layout);
+               Label fromLabel = new Label(parent, SWT.NONE);
+               fromLabel.setText("Address: ");
+               Text fromText = new Text(parent, SWT.BORDER | SWT.SEARCH);
+               fromText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
+               VerifyListener vl = new NumberVerifyListener();
+               fromText.addVerifyListener(vl);
+               fromText.setText("0");
+               fromText.addModifyListener(e ->
+               {
+                       try
+                       {
+                               provider.setLowerBound(AsmNumberUtil.valueOf(fromText.getText()).longValue());
+                               viewer.refresh();
+                       }
+                       catch (@SuppressWarnings("unused") NumberFormatException ex)
+                       {
+                               // Nothing to do here
+                       }
+               });
+
+               Label amountLabel = new Label(parent, SWT.NONE);
+               amountLabel.setText("Number of cells: ");
+               Text amountText = new Text(parent, SWT.BORDER | SWT.SEARCH);
+               amountText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
+               amountText.addVerifyListener(vl);
+               amountText.setText("0");
+               amountText.addModifyListener(e ->
+               {
+                       try
+                       {
+                               provider.setAmount(AsmNumberUtil.valueOf(amountText.getText()).intValue());
+                               viewer.refresh();
+                       }
+                       catch (@SuppressWarnings("unused") NumberFormatException ex)
+                       {
+                               // Nothing to do here
+                       }
+               });
+
+               setupRadixSelector(parent);
+
+               createViewer(parent);
+       }
+
+       private void setupRadixSelector(Composite parent)
+       {
+               Label radixLabel = new Label(parent, SWT.NONE);
+               radixLabel.setText("Radix: ");
+               Combo selectRadix = new Combo(parent, SWT.READ_ONLY);
+
+               String entries[] = new String[] { "Binary", "Octal", "Decimal", "Hexadecimal" };
+               NumberType corTypes[] = new NumberType[] { NumberType.BINARY, NumberType.OCTAL, NumberType.DECIMAL, NumberType.HEXADECIMAL };
+               selectRadix.setItems(entries);
+               selectRadix.addSelectionListener(new SelectionListener()
+               {
+                       @Override
+                       public void widgetSelected(SelectionEvent e)
+                       {
+                               int index = selectRadix.getSelectionIndex();
+                               if (index == -1)
+                                       displaySettings.setDataNumberType(NumberType.HEXADECIMAL);
+                               else
+                               {
+                                       displaySettings.setDataNumberType(corTypes[index]);
+                               }
+                               viewer.refresh();
+                       }
+
+                       @Override
+                       public void widgetDefaultSelected(SelectionEvent e)
+                       {
+                               widgetSelected(e);
+                       }
+               });
+       }
+
+       private void createViewer(Composite parent)
+       {
+               viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL);
+               createColumns();
+               Table table = viewer.getTable();
+               table.setHeaderVisible(true);
+               table.setLinesVisible(true);
+               viewer.setUseHashlookup(true);
+               viewer.setContentProvider(provider);
+               setMemoryBinding(new WordAddressableMemory(MainMemoryDefinition.create(8, 8, 8L, Long.MAX_VALUE)));
+               getSite().setSelectionProvider(viewer);
+
+               GridData gd = new GridData();
+               gd.verticalAlignment = GridData.FILL;
+               gd.horizontalSpan = 6;
+               gd.grabExcessHorizontalSpace = true;
+               gd.grabExcessVerticalSpace = true;
+               gd.horizontalAlignment = GridData.FILL;
+               viewer.getControl().setLayoutData(gd);
+       }
+
+       private void createColumns()
+       {
+               String[] titles = { "Address", "Data" };
+               int[] bounds = { 100, 100 };
+
+               TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0]);
+               col.setLabelProvider(new ColumnLabelProvider()
+               {
+                       @Override
+                       public String getText(Object element)
+                       {
+                               MemoryTableRow row = (MemoryTableRow) element;
+                               return String.format(addressFormat, row.address);
+                       }
+               });
+
+               col = createTableViewerColumn(titles[1], bounds[1]);
+               col.setLabelProvider(new NumberColumnLabelProvider(displaySettings)
+               {
+                       @Override
+                       public BigInteger getAsBigInteger(Object element)
+                       {
+                               MemoryTableRow row = (MemoryTableRow) element;
+                               return row.getMemory().getCellAsBigInteger(row.address);
+                       }
+
+               });
+               col.setEditingSupport(new MemoryCellEditingSupport(viewer, displaySettings));
+       }
+
+       private TableViewerColumn createTableViewerColumn(String title, int bound)
+       {
+               TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
+               TableColumn column = viewerColumn.getColumn();
+               column.setText(title);
+               column.setWidth(bound);
+               column.setResizable(true);
+               column.setMoveable(false);
+               return viewerColumn;
+       }
+
+       @Override
+       public void setFocus()
+       {
+               viewer.getControl().setFocus();
+       }
+
+       public void setMemoryBinding(MainMemory m)
+       {
+               int hexAddressLength = Long.toUnsignedString(m.getDefinition().getMaximalAddress(), 16).length();
+               addressFormat = "0x%0" + hexAddressLength + "X";
+               viewer.setInput(m);
+       }
+}
diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java
new file mode 100644 (file)
index 0000000..54d7176
--- /dev/null
@@ -0,0 +1,26 @@
+package net.mograsim.plugin.tables.memory;
+
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.widgets.Text;
+
+import net.mograsim.plugin.asm.AsmNumberUtil;
+import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
+
+public class NumberVerifyListener implements VerifyListener
+{
+
+       @Override
+       public void verifyText(VerifyEvent e)
+       {
+               String text = computeModifiedText(e);
+               e.doit = !NumberType.NONE.equals(AsmNumberUtil.prefixOfType(text));
+       }
+
+       private static String computeModifiedText(VerifyEvent e)
+       {
+               String modifiedText = ((Text) e.getSource()).getText();
+               modifiedText = modifiedText.substring(0, e.start).concat(e.text).concat(modifiedText.substring(e.end));
+               return modifiedText;
+       }
+}