Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim...
authorFabian Stemmler <stemmler@in.tum.de>
Mon, 26 Aug 2019 11:14:36 +0000 (13:14 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Mon, 26 Aug 2019 11:14:36 +0000 (13:14 +0200)
57 files changed:
net.mograsim.logic.core/src/net/mograsim/logic/core/components/Connector.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/Demux.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/ManualSwitch.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/Merger.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/Mux.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/Splitter.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/TriStateBuffer.java
net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java
net.mograsim.logic.core/src/net/mograsim/logic/core/types/Bit.java
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVector.java
net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java
net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java
net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java
net.mograsim.logic.core/test/net/mograsim/logic/core/types/BitVectorTest.java [new file with mode: 0644]
net.mograsim.logic.model.am2900/META-INF/MANIFEST.MF
net.mograsim.logic.model.am2900/components/GUIdff4.json
net.mograsim.logic.model.am2900/components/GUIdff4_invwe.json
net.mograsim.logic.model.am2900/components/GUIdlatch4.json
net.mograsim.logic.model.am2900/components/GUImux2.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUImux2_4.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUImux3.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/GUIram2.json
net.mograsim.logic.model.am2900/components/GUIram4.json
net.mograsim.logic.model.am2900/components/GUIsel1.json [new file with mode: 0644]
net.mograsim.logic.model.am2900/components/am2904/GUIAm2904.json
net.mograsim.logic.model.am2900/components/am2904/GUIAm2904TestLogic.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/examples/GUIComponentTestbench.java
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/TestUtil.java
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java
net.mograsim.logic.model.editor/META-INF/MANIFEST.MF
net.mograsim.logic.model.editor/components/GUIdff4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdff4_invwe.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIdlatch4.json
net.mograsim.logic.model.editor/components/GUImux2.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUImux2_4.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUImux3.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/GUIram2.json
net.mograsim.logic.model.editor/components/GUIram4.json
net.mograsim.logic.model.editor/components/GUIsel1.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2901/GUIAm2901.json
net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json [deleted file]
net.mograsim.logic.model.editor/components/am2904/GUIAm2904.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2904/GUIAm2904MSR.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2904/GUIAm2904TestLogic.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2904/GUIAm2904muSR.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2910/GUIAm2910.json [new file with mode: 0644]
net.mograsim.logic.model.editor/components/am2910/GUIAm2910_old.json [new file with mode: 0644]
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/ViewLogicModelAdapter.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json
net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/highlevelstatehandlers/standard/atomic/BitVectorSplittingAtomicHighLevelStateHandler.java
net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/standardSnippetIDMapping.json
net.mograsim.machine/src/net/mograsim/machine/isa/AsmFloatOperand.java
net.mograsim.machine/src/net/mograsim/machine/isa/AsmIntegerOperand.java
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java
net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java

index 7315e13..528852e 100644 (file)
@@ -17,8 +17,8 @@ public class Connector extends Component implements LogicObserver
        public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd b)
        {
                super(timeline);
-               if (a.length() != b.length())
-                       throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length()));
+               if (a.width() != b.width())
+                       throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.width(), b.width()));
                this.a = a;
                this.b = b;
                a.registerObserver(this);
index 704fa9b..5cf8074 100644 (file)
@@ -22,33 +22,33 @@ public class Demux extends BasicComponent
        private int selected = -1;
 
        /**
-        * Output {@link Wire}s and in must be of uniform length
+        * Output {@link Wire}s and in must be of uniform width
         * 
-        * @param in      Must be of uniform length with all outputs.
+        * @param in      Must be of uniform width with all outputs.
         * @param select  Indexes the output array to which the input is mapped. Must have enough bits to index all outputs.
         * @param outputs One of these outputs receives the input signal, depending on the select bits
         */
        public Demux(Timeline timeline, int processTime, ReadEnd in, ReadEnd select, ReadWriteEnd... outputs)
        {
                super(timeline, processTime);
-               outputSize = in.length();
+               outputSize = in.width();
 
                this.in = in;
                this.outputs = outputs;
                for (int i = 0; i < this.outputs.length; i++)
                {
-                       if (outputs[i].length() != outputSize)
-                               throw new IllegalArgumentException("All DEMUX wire arrays must be of uniform length!");
+                       if (outputs[i].width() != outputSize)
+                               throw new IllegalArgumentException("All DEMUX wire arrays must be of uniform width!");
                        this.outputs[i] = outputs[i];
                }
 
                this.select = select;
                select.registerObserver(this);
 
-               int maxInputs = 1 << select.length();
+               int maxInputs = 1 << select.width();
                if (this.outputs.length > maxInputs)
                        throw new IllegalArgumentException("There are more outputs (" + this.outputs.length + ") to the DEMUX than supported by "
-                                       + select.length() + " select bits (" + maxInputs + ").");
+                                       + select.width() + " select bits (" + maxInputs + ").");
                in.registerObserver(this);
        }
 
index 26238fe..25445ee 100644 (file)
@@ -32,12 +32,12 @@ public class ManualSwitch extends Component implements LogicObservable
 
        public void switchFullOn()
        {
-               setState(BitVector.of(Bit.ONE, output.length()));
+               setState(BitVector.of(Bit.ONE, output.width()));
        }
 
        public void switchFullOff()
        {
-               setState(BitVector.of(Bit.ZERO, output.length()));
+               setState(BitVector.of(Bit.ZERO, output.width()));
        }
 
        public void toggle()
@@ -55,8 +55,8 @@ public class ManualSwitch extends Component implements LogicObservable
 
        public void setState(BitVector bits)
        {
-               if (bits.length() != output.length())
-                       throw new IllegalArgumentException("Incorrect bit vector length");
+               if (bits.width() != output.width())
+                       throw new IllegalArgumentException("Incorrect bit vector width");
                if (bits.equals(output.getInputValues()))
                        return;
                output.feedSignals(bits);
@@ -65,7 +65,7 @@ public class ManualSwitch extends Component implements LogicObservable
 
        public boolean isFullOn()
        {
-               return BitVector.of(Bit.ONE, output.length()).equals(output.getInputValues());
+               return BitVector.of(Bit.ONE, output.width()).equals(output.getInputValues());
        }
 
        public BitVector getValues()
index 6fa5b93..acc05d3 100644 (file)
@@ -17,7 +17,7 @@ public class Merger extends Component implements LogicObserver
 
        /**
         * 
-        * @param union  The output of merging n {@link Wire}s into one. Must have length = a1.length() + a2.length() + ... + an.length().
+        * @param union  The output of merging n {@link Wire}s into one. Must have width = a1.width() + a2.width() + ... + an.width().
         * @param inputs The inputs to be merged into the union
         */
        public Merger(Timeline timeline, ReadWriteEnd union, ReadEnd... inputs)
@@ -27,17 +27,17 @@ public class Merger extends Component implements LogicObserver
                this.out = union;
                this.beginningIndex = new int[inputs.length];
 
-               int length = 0;
+               int width = 0;
                for (int i = 0; i < inputs.length; i++)
                {
-                       beginningIndex[i] = length;
-                       length += inputs[i].length();
+                       beginningIndex[i] = width;
+                       width += inputs[i].width();
                        inputs[i].registerObserver(this);
                }
 
-               if (length != union.length())
+               if (width != union.width())
                        throw new IllegalArgumentException(
-                                       "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length().");
+                                       "The output of merging n WireArrays into one must have width = a1.width() + a2.width() + ... + an.width().");
        }
 
        public ReadEnd getInput(int index)
index 47fe164..3776bde 100644 (file)
@@ -25,32 +25,32 @@ public class Mux extends BasicComponent
        private final int outputSize;
 
        /**
-        * Input {@link Wire}s and out must be of uniform length
+        * Input {@link Wire}s and out must be of uniform width
         * 
-        * @param out    Must be of uniform length with all inputs.
+        * @param out    Must be of uniform width with all inputs.
         * @param select Indexes the input array which is to be mapped to the output. Must have enough bits to index all inputs.
         * @param inputs One of these inputs is mapped to the output, depending on the select bits
         */
        public Mux(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
        {
                super(timeline, processTime);
-               outputSize = out.length();
+               outputSize = out.width();
 
                this.inputs = inputs.clone();
                for (int i = 0; i < this.inputs.length; i++)
                {
-                       if (inputs[i].length() != outputSize)
-                               throw new IllegalArgumentException("All MUX wire arrays must be of uniform length!");
+                       if (inputs[i].width() != outputSize)
+                               throw new IllegalArgumentException("All MUX wire arrays must be of uniform width!");
                        inputs[i].registerObserver(this);
                }
 
                this.select = select;
                select.registerObserver(this);
 
-               int maxInputs = 1 << select.length();
+               int maxInputs = 1 << select.width();
                if (this.inputs.length > maxInputs)
                        throw new IllegalArgumentException("There are more inputs (" + this.inputs.length + ") to the MUX than supported by "
-                                       + select.length() + " select bits (" + maxInputs + ").");
+                                       + select.width() + " select bits (" + maxInputs + ").");
 
                this.out = out;
        }
index 8a1ba20..04658fe 100644 (file)
@@ -20,13 +20,13 @@ public class Splitter extends Component implements LogicObserver
                this.input = input;
                this.outputs = outputs;
                input.registerObserver(this);
-               int length = 0;
+               int width = 0;
                for (ReadEnd out : outputs)
-                       length += out.length();
+                       width += out.width();
 
-               if (input.length() != length)
+               if (input.width() != width)
                        throw new IllegalArgumentException(
-                                       "The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");
+                                       "The input of splitting one into n WireArrays must have width = a1.width() + a2.width() + ... + an.width().");
        }
 
        protected void compute()
@@ -35,8 +35,8 @@ public class Splitter extends Component implements LogicObserver
                int startIndex = 0;
                for (int i = 0; i < outputs.length; i++)
                {
-                       outputs[i].feedSignals(inputBits.subVector(startIndex, startIndex + outputs[i].length()));
-                       startIndex += outputs[i].length();
+                       outputs[i].feedSignals(inputBits.subVector(startIndex, startIndex + outputs[i].width()));
+                       startIndex += outputs[i].width();
                }
        }
 
index ac2e422..057c49e 100644 (file)
@@ -15,11 +15,11 @@ public class TriStateBuffer extends BasicComponent
        public TriStateBuffer(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable)
        {
                super(timeline, processTime);
-               if (in.length() != out.length())
+               if (in.width() != out.width())
                        throw new IllegalArgumentException(
-                                       "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length());
-               if (enable.length() != 1)
-                       throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + ".");
+                                       "Tri-state output must have the same amount of bits as the input. Input: " + in.width() + " Output: " + out.width());
+               if (enable.width() != 1)
+                       throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.width() + ".");
                this.in = in;
                in.registerObserver(this);
                this.enable = enable;
index da30281..d7fecc1 100644 (file)
@@ -13,7 +13,7 @@ public abstract class MultiInputGate extends BasicComponent
 {
        protected ReadEnd[] in;
        protected ReadWriteEnd out;
-       protected final int length;
+       protected final int width;
        protected MutationOperation op;
        protected boolean invert = false;
 
@@ -21,13 +21,13 @@ public abstract class MultiInputGate extends BasicComponent
        {
                super(timeline, processTime);
                this.op = op;
-               length = out.length();
+               width = out.width();
                this.in = in.clone();
                if (in.length < 1)
                        throw new IllegalArgumentException(String.format("Cannot create gate with %d wires.", in.length));
                for (ReadEnd w : in)
                {
-                       if (w.length() != length)
+                       if (w.width() != width)
                                throw new IllegalArgumentException("All wires connected to the gate must be of uniform length.");
                        w.registerObserver(this);
                }
index 8bff357..e627810 100644 (file)
@@ -18,6 +18,11 @@ public enum Bit implements StrictLogicType<Bit>
                this.symbol = symbol;
        }
 
+       /**
+        * Returns if the Bit is binary, this is only true for <code>ZERO</code> and <code>ONE</code>.
+        * 
+        * @return true if and only if <code>this == ONE || this == ZERO</code>
+        */
        public boolean isBinary()
        {
                return this == ONE || this == ZERO;
@@ -64,9 +69,9 @@ public enum Bit implements StrictLogicType<Bit>
                return bits;
        }
 
-       public BitVector toVector(int length)
+       public BitVector toVector(int width)
        {
-               return BitVector.of(this, length);
+               return BitVector.of(this, width);
        }
 
        @Override
index e8a4098..aed0288 100644 (file)
@@ -50,44 +50,26 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return new BitVector(bits.clone());
        }
 
-       public static BitVector of(Bit bit, int length)
+       public static BitVector of(Bit bit, int width)
        {
-               if (length == 1)
+               if (width == 1)
                        return SINGLE_BIT_MAPPING[bit.ordinal()];
-               return new BitVector(bit.makeArray(length));
+               return new BitVector(bit.makeArray(width));
        }
 
-       public BigInteger getUnsignedValue()
+       public static BitVector from(long value, int bits)
        {
-               if (!isBinary())
-                       throw new NumberFormatException("BitVector is non binary: " + toString());
-               Bit[] bits = getBits();
-               int length = length();
-               byte[] bytes = new byte[(length / 8) + 1];
-               for (int i = 0; i < length; i++)
-               {
-                       if (Bit.ONE.equals(bits[i]))
-                       {
-                               bytes[(i / 8) + 1] |= 1 << (i % 8);
-                       }
-               }
-               return new BigInteger(bytes);
+               return from(BigInteger.valueOf(value), bits);
        }
 
-       public static BitVector from(BigInteger b, int length)
+       public static BitVector from(BigInteger value, int bits)
        {
-               int bitLength = b.bitLength();
-               int actualLength = Integer.min(bitLength, length);
-               Bit[] bits = new Bit[length];
-               for (int i = 0; i < actualLength; i++)
-                       bits[i] = b.testBit(i) ? Bit.ONE : Bit.ZERO;
-               if (b.signum() < 0)
-                       for (int i = actualLength; i < length; i++)
-                               bits[i] = Bit.ONE;
-               else
-                       for (int i = actualLength; i < length; i++)
-                               bits[i] = Bit.ZERO;
-               return BitVector.of(bits);
+               Bit[] values = new Bit[bits];
+               for (int i = 0; i < bits; i++)
+               {
+                       values[bits - i - 1] = Bit.of(value.testBit(i));
+               }
+               return new BitVector(values);
        }
 
        public BitVectorMutator mutator()
@@ -116,6 +98,11 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return bits.clone();
        }
 
+       /**
+        * Checks if all bits are {@link Bit#isBinary() binary}.
+        * 
+        * @see Bit#isBinary()
+        */
        public boolean isBinary()
        {
                for (int i = 0; i < bits.length; i++)
@@ -170,21 +157,21 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return new BitVector(unOp(bits.clone(), Bit::not));
        }
 
-       public int length()
+       public int width()
        {
                return bits.length;
        }
 
        public BitVector concat(BitVector other)
        {
-               Bit[] newBits = Arrays.copyOf(bits, length() + other.length());
-               System.arraycopy(other.bits, 0, newBits, length(), other.length());
+               Bit[] newBits = Arrays.copyOf(bits, width() + other.width());
+               System.arraycopy(other.bits, 0, newBits, width(), other.width());
                return new BitVector(newBits);
        }
 
        public BitVector subVector(int start)
        {
-               return new BitVector(Arrays.copyOfRange(bits, start, length()));
+               return new BitVector(Arrays.copyOfRange(bits, start, width()));
        }
 
        public BitVector subVector(int start, int end)
@@ -194,8 +181,8 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
 
        private void checkCompatibility(BitVector bv)
        {
-               if (length() != bv.length())
-                       throw new IllegalArgumentException(format("BitVector length does not match: %d and %d", length(), bv.length()));
+               if (width() != bv.width())
+                       throw new IllegalArgumentException(format("BitVector width does not match: %d and %d", width(), bv.width()));
        }
 
        static Bit[] binOp(Bit[] dest, Bit[] second, BinaryOperator<Bit> op)
@@ -240,21 +227,32 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                }
 
                /**
-                * Returns a new mutator of the specified length, <b>with all bits set to <code>null</code></b>. Use with care!
+                * Returns a new mutator of the specified width, <b>with all bits set to <code>null</code></b>. Use with care!
                 */
-               public static BitVectorMutator ofLength(int length)
+               public static BitVectorMutator ofWidth(int width)
                {
-                       return new BitVectorMutator(new Bit[length]);
+                       return new BitVectorMutator(new Bit[width]);
                }
 
                /**
                 * Returns an empty mutator which has no bits set and will simply copy the values from the first binary operation performed.
+                * <p>
+                * An empty BitVectorMutator <b>must not</b> be converted to BitVector or used to manipulate single bits until at least one two
+                * operand logic operation is performed.
                 */
                public static BitVectorMutator empty()
                {
                        return new BitVectorMutator(null);
                }
 
+               /**
+                * @see #empty()
+                */
+               public boolean isEmpty()
+               {
+                       return bits == null;
+               }
+
                /**
                 * Produces the resulting, immutable {@link BitVector}<br>
                 * 
@@ -311,6 +309,8 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                 */
                public void setMSBit(int bitIndex, Bit bit)
                {
+                       if (bits == null)
+                               throw new IllegalStateException("cannot set a bit of an empty mutator");
                        bits[bitIndex] = bit;
                }
 
@@ -319,6 +319,8 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                 */
                public void setLSBit(int bitIndex, Bit bit)
                {
+                       if (bits == null)
+                               throw new IllegalStateException("cannot set a bit of an empty mutator");
                        bits[bits.length - bitIndex - 1] = bit;
                }
 
@@ -327,6 +329,8 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                 */
                public Bit getMSBit(int bitIndex)
                {
+                       if (bits == null)
+                               throw new IllegalStateException("cannot get a bit of an empty mutator");
                        return bits[bitIndex];
                }
 
@@ -335,18 +339,22 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                 */
                public Bit getLSBit(int bitIndex)
                {
+                       if (bits == null)
+                               throw new IllegalStateException("cannot get a bit of an empty mutator");
                        return bits[bits.length - bitIndex - 1];
                }
 
-               public int length()
+               public int width()
                {
+                       if (bits == null)
+                               throw new IllegalStateException("cannot obtain a width of an empty mutator");
                        return bits.length;
                }
 
                private void checkCompatibility(BitVector bv)
                {
-                       if (bits != null && bits.length != bv.length())
-                               throw new IllegalArgumentException(format("BitVector length does not match: %d and %d", bits.length, bv.length()));
+                       if (bits != null && bits.length != bv.width())
+                               throw new IllegalArgumentException(format("BitVector width does not match: %d and %d", bits.length, bv.width()));
                }
        }
 
@@ -377,9 +385,9 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
 
        /**
         * Does test for equality of values/content, shifting the other BitVector by <code>offset</code> to the right.<br>
-        * Therefore <code>offset + other.length() <= this.length()</code> needs to be true.
+        * Therefore <code>offset + other.width() <= this.wdith()</code> needs to be true.
         * 
-        * @throws ArrayIndexOutOfBoundsException if <code>offset + other.length() > this.length()</code>
+        * @throws ArrayIndexOutOfBoundsException if <code>offset + other.width() > this.width()</code>
         * 
         * @see Object#equals(Object)
         */
@@ -387,7 +395,7 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
        {
                if (other == null)
                        return false;
-               return Arrays.equals(bits, offset, offset + other.length(), other.bits, 0, other.length());
+               return Arrays.equals(bits, offset, offset + other.width(), other.bits, 0, other.width());
        }
 
        /**
@@ -404,6 +412,26 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return sb.toString();
        }
 
+       /**
+        * Returns the value of the BitVector as BigInteger.
+        * 
+        * @throws NumberFormatException if the BitVector is not {@link #isBinary() binary}.
+        */
+       public BigInteger getUnsignedValue()
+       {
+               if (!isBinary())
+                       throw new NumberFormatException(this + " is not binary");
+               byte[] bytes = new byte[(bits.length / 8) + 1];
+               for (int i = 0; i < bits.length; i++)
+               {
+                       if (Bit.ONE == bits[i])
+                       {
+                               bytes[i / 8] |= 1 << (i % 8);
+                       }
+               }
+               return new BigInteger(bytes);
+       }
+
        /**
         * Parses a String containing solely {@link Bit} symbols (MSB first)
         * 
@@ -419,21 +447,6 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                return new BitVector(values);
        }
 
-       public static BitVector of(long value, int bits)
-       {
-               return of(BigInteger.valueOf(value), bits);
-       }
-
-       public static BitVector of(BigInteger value, int bits)
-       {
-               Bit[] values = new Bit[bits];
-               for (int i = 0; i < bits; i++)
-               {
-                       values[bits - i - 1] = Bit.of(value.testBit(i));
-               }
-               return new BitVector(values);
-       }
-
        /**
         * Iterate over the {@link Bit}s of the BitVector <b>from MSB to LSB</b> (left to right).
         */
@@ -455,7 +468,7 @@ public final class BitVector implements StrictLogicType<BitVector>, Iterable<Bit
                        @Override
                        public boolean hasNext()
                        {
-                               return pos != length();
+                               return pos != width();
                        }
                };
        }
index c551fed..4996dcb 100644 (file)
@@ -28,7 +28,7 @@ public class BitVectorFormatter
        public static ColorDefinition formatAsColor(BitVector bitVector)
        {
                // TODO maybe find a color assignment for multiple-bit bit vectors?
-               if (bitVector == null || bitVector.length() != 1)
+               if (bitVector == null || bitVector.width() != 1)
                        return new ColorDefinition(BuiltInColor.COLOR_BLACK);
                switch (bitVector.getLSBit(0))
                {
index 4e12d10..8b28511 100644 (file)
@@ -25,45 +25,44 @@ public class Wire
        private BitVector values;
        public final int travelTime;
        private List<ReadEnd> attached = new ArrayList<>();
-       public final int length;
+       public final int width;
        List<ReadWriteEnd> inputs = new ArrayList<>();
        Timeline timeline;
 
-       public Wire(Timeline timeline, int length, int travelTime)
+       public Wire(Timeline timeline, int width, int travelTime)
        {
-               this(timeline, length, travelTime, null);
+               this(timeline, width, travelTime, null);
        }
 
-       public Wire(Timeline timeline, int length, int travelTime, String name)
+       public Wire(Timeline timeline, int width, int travelTime, String name)
        {
-               if (length < 1)
+               if (width < 1)
                        throw new IllegalArgumentException(
-                                       String.format("Tried to create an array of wires with length %d, but a length of less than 1 makes no sense.", length));
+                                       String.format("Tried to create an array of wires with width %d, but a width of less than 1 makes no sense.", width));
                this.name = name;
                this.timeline = timeline;
-               this.length = length;
+               this.width = width;
                this.travelTime = travelTime;
                initValues();
        }
 
        private void initValues()
        {
-               values = U.toVector(length);
+               values = U.toVector(width);
        }
 
        private void setNewValues(BitVector newValues)
        {
                if (values.equals(newValues))
                        return;
-//             BitVector oldValues = values;
                values = newValues;
                notifyObservers();
        }
 
        void recalculate()
        {
-               if (inputs.size() == 0)
-                       setNewValues(BitVector.of(Bit.U, length));
+               if (inputs.isEmpty())
+                       setNewValues(U.toVector(width));
                else
                {
                        BitVectorMutator mutator = BitVectorMutator.empty();
@@ -88,18 +87,13 @@ public class Wire
         * The {@link Wire} is interpreted as an unsigned integer with n bits.
         * 
         * @return <code>true</code> if all bits are either <code>Bit.ONE</code> or <code>Bit.ZERO</code> (they do not all have to have the same
-        *         value), not <code>Bit.X</code> or <code>Bit.Z</code>. <code>false</code> is returned otherwise.
+        *         value), not <code>Bit.U</code>, <code>Bit.X</code> or <code>Bit.Z</code>. <code>false</code> is returned otherwise.
         * 
         * @author Fabian Stemmler
         */
        public boolean hasNumericValue()
        {
-               for (Bit b : values)
-               {
-                       if (b != Bit.ZERO && b != Bit.ONE)
-                               return false;
-               }
-               return true;
+               return values.isBinary();
        }
 
        /**
@@ -141,10 +135,10 @@ public class Wire
        public long getSignedValue()
        {
                long val = getUnsignedValue();
-               long mask = 1 << (length - 1);
+               long mask = 1 << (width - 1);
                if ((mask & val) != 0)
                {
-                       int shifts = 64 - length;
+                       int shifts = 64 - width;
                        return (val << shifts) >> shifts;
                }
                return val;
@@ -184,9 +178,9 @@ public class Wire
         * 
         * @author Fabian Stemmler
         */
-       void attachEnd(ReadEnd end)
+       boolean attachEnd(ReadEnd end)
        {
-               attached.add(end);
+               return attached.add(end);
        }
 
        void detachEnd(ReadEnd end)
@@ -196,7 +190,7 @@ public class Wire
 
        private void notifyObservers()
        {
-               attached.forEach(r -> r.update());
+               attached.forEach(ReadEnd::update);
        }
 
        /**
@@ -243,7 +237,7 @@ public class Wire
                }
 
                /**
-                * Included for convenient use on {@link Wire}s of length 1.
+                * Included for convenient use on {@link Wire}s of width 1.
                 * 
                 * @return The value of bit 0.
                 * 
@@ -332,9 +326,9 @@ public class Wire
                        recalculate();
                }
 
-               public int length()
+               public int width()
                {
-                       return length;
+                       return width;
                }
 
                public Wire getWire()
@@ -363,7 +357,8 @@ public class Wire
 
        public class ReadWriteEnd extends ReadEnd
        {
-               private boolean open, isWriting;
+               private boolean open;
+               private boolean isWriting;
                private BitVector inputValues;
 
                ReadWriteEnd()
@@ -377,7 +372,7 @@ public class Wire
 
                private void initValues()
                {
-                       inputValues = U.toVector(length);
+                       inputValues = U.toVector(width);
                }
 
                /**
@@ -394,11 +389,11 @@ public class Wire
 
                public void feedSignals(BitVector newValues)
                {
-                       if (newValues.length() != length)
+                       if (newValues.width() != width)
                                throw new IllegalArgumentException(
-                                               String.format("Attempted to input %d bits instead of %d bits.", newValues.length(), length));
+                                               String.format("Attempted to input %d bits instead of %d bits.", newValues.width(), width));
                        if (!open)
-                               throw new RuntimeException("Attempted to write to closed WireArrayEnd.");
+                               throw new IllegalStateException("Attempted to write to closed WireArrayEnd.");
                        timeline.addEvent(e -> setValues(newValues), travelTime);
                }
 
@@ -413,7 +408,7 @@ public class Wire
                public void feedSignals(int startingBit, BitVector bitVector)
                {
                        if (!open)
-                               throw new RuntimeException("Attempted to write to closed WireArrayEnd.");
+                               throw new IllegalStateException("Attempted to write to closed WireArrayEnd.");
                        timeline.addEvent(e -> setValues(startingBit, bitVector), travelTime);
                }
 
@@ -427,7 +422,7 @@ public class Wire
                        if (!inputValues.equalsWithOffset(newValues, startingBit))
                        {
                                Bit[] vals = inputValues.getBits();
-                               System.arraycopy(newValues.getBits(), 0, vals, startingBit, newValues.length());
+                               System.arraycopy(newValues.getBits(), 0, vals, startingBit, newValues.width());
                                inputValues = BitVector.of(vals);
                                Wire.this.recalculate();
                        }
@@ -482,7 +477,7 @@ public class Wire
                 */
                public void clearSignals()
                {
-                       feedSignals(Z.toVector(length));
+                       feedSignals(Z.toVector(width));
                }
 
                public BitVector wireValuesExcludingMe()
@@ -549,20 +544,20 @@ public class Wire
         * Fuses the selected bits of two wires together. If the bits change in one Wire, the other is changed accordingly immediately. Warning:
         * The bits are permanently fused together.
         * 
-        * @param a      The {@link Wire} to be (partially) fused with b
-        * @param b      The {@link Wire} to be (partially) fused with a
-        * @param fromA  The first bit of {@link Wire} a to be fused
-        * @param fromB  The first bit of {@link Wire} b to be fused
-        * @param length The amount of bits to fuse
+        * @param a     The {@link Wire} to be (partially) fused with b
+        * @param b     The {@link Wire} to be (partially) fused with a
+        * @param fromA The first bit of {@link Wire} a to be fused
+        * @param fromB The first bit of {@link Wire} b to be fused
+        * @param width The amount of bits to fuse
         */
-       public static void fuse(Wire a, Wire b, int fromA, int fromB, int length)
+       public static void fuse(Wire a, Wire b, int fromA, int fromB, int width)
        {
                ReadWriteEnd rA = a.createReadWriteEnd(), rB = b.createReadWriteEnd();
                rA.setWriting(false);
                rB.setWriting(false);
-               rA.setValues(BitVector.of(Bit.Z, a.length));
-               rB.setValues(BitVector.of(Bit.Z, b.length));
-               Fusion aF = new Fusion(rB, fromA, fromB, length), bF = new Fusion(rA, fromB, fromA, length);
+               rA.setValues(BitVector.of(Bit.Z, a.width));
+               rB.setValues(BitVector.of(Bit.Z, b.width));
+               Fusion aF = new Fusion(rB, fromA, fromB, width), bF = new Fusion(rA, fromB, fromA, width);
                rA.registerObserver(aF);
                rB.registerObserver(bF);
                aF.update(rA);
@@ -579,20 +574,20 @@ public class Wire
         */
        public static void fuse(Wire a, Wire b)
        {
-               fuse(a, b, 0, 0, a.length);
+               fuse(a, b, 0, 0, a.width);
        }
 
        private static class Fusion implements LogicObserver
        {
                private ReadWriteEnd target;
-               int fromSource, fromTarget, length;
+               int fromSource, fromTarget, width;
 
-               public Fusion(ReadWriteEnd target, int fromSource, int fromTarget, int length)
+               public Fusion(ReadWriteEnd target, int fromSource, int fromTarget, int width)
                {
                        this.target = target;
                        this.fromSource = fromSource;
                        this.fromTarget = fromTarget;
-                       this.length = length;
+                       this.width = width;
                }
 
                @Override
@@ -604,7 +599,7 @@ public class Wire
                        else
                        {
                                target.setWriting(true);
-                               BitVector targetInput = source.wireValuesExcludingMe().subVector(fromSource, fromSource + length);
+                               BitVector targetInput = source.wireValuesExcludingMe().subVector(fromSource, fromSource + width);
                                target.setValues(fromTarget, targetInput);
                        }
                }
index d0ae8c5..d69cd00 100644 (file)
@@ -98,9 +98,9 @@ class ComponentTest
        void fusionTest1()
        {
                Wire a = new Wire(t, 3, 1), b = new Wire(t, 2, 1), c = new Wire(t, 3, 1), out = new Wire(t, 8, 1);
-               Wire.fuse(a, out, 0, 0, a.length);
-               Wire.fuse(b, out, 0, a.length, b.length);
-               Wire.fuse(c, out, 0, a.length + b.length, c.length);
+               Wire.fuse(a, out, 0, 0, a.width);
+               Wire.fuse(b, out, 0, a.width, b.width);
+               Wire.fuse(c, out, 0, a.width + b.width, c.width);
                ReadWriteEnd rA = a.createReadWriteEnd();
                rA.feedSignals(Bit.ZERO, Bit.ONE, Bit.ZERO);
                ReadWriteEnd rB = b.createReadWriteEnd();
diff --git a/net.mograsim.logic.core/test/net/mograsim/logic/core/types/BitVectorTest.java b/net.mograsim.logic.core/test/net/mograsim/logic/core/types/BitVectorTest.java
new file mode 100644 (file)
index 0000000..b83a5ff
--- /dev/null
@@ -0,0 +1,288 @@
+package net.mograsim.logic.core.types;
+
+import static net.mograsim.logic.core.types.BitVector.*;
+import static net.mograsim.logic.core.types.Bit.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.math.BigInteger;
+import java.util.Iterator;
+
+import org.junit.jupiter.api.Test;
+
+class BitVectorTest
+{
+
+       @Test
+       void testOfBitArray()
+       {
+               BitVector.of(); // should be allowed and work
+
+               assertSame(SINGLE_U, BitVector.of(U));
+               assertSame(SINGLE_X, BitVector.of(X));
+               assertSame(SINGLE_0, BitVector.of(ZERO));
+               assertSame(SINGLE_1, BitVector.of(ONE));
+               assertSame(SINGLE_Z, BitVector.of(Z));
+       }
+
+       @Test
+       void testOfBitInt()
+       {
+               assertEquals(BitVector.of(), BitVector.of(ONE, 0));
+
+               assertSame(SINGLE_U, BitVector.of(U, 1));
+               assertSame(SINGLE_X, BitVector.of(X, 1));
+               assertSame(SINGLE_0, BitVector.of(ZERO, 1));
+               assertSame(SINGLE_1, BitVector.of(ONE, 1));
+               assertSame(SINGLE_Z, BitVector.of(Z, 1));
+
+               assertEquals(BitVector.of(X, X, X), BitVector.of(X, 3));
+       }
+
+       @Test
+       void testGetUnsignedValue()
+       {
+               assertEquals(BigInteger.valueOf(0b101), BitVector.parse("101").getUnsignedValue());
+               assertEquals(BigInteger.valueOf(0b01010), BitVector.parse("01010").getUnsignedValue());
+               assertEquals(BigInteger.valueOf(0), BitVector.parse("0000").getUnsignedValue());
+
+               assertThrows(NumberFormatException.class, () -> BitVector.parse("00X1").getUnsignedValue());
+
+       }
+
+       @Test
+       void testOfLongInt()
+       {
+               assertEquals(BitVector.parse("101"), BitVector.from(0b101L, 3));
+               assertEquals(BitVector.parse("01010"), BitVector.from(0b01010L, 5));
+               assertEquals(BitVector.parse("10101"), BitVector.from(-11L, 5));
+               assertEquals(BitVector.parse("0000"), BitVector.from(0L, 4));
+       }
+
+       @Test
+       void testOfBigIntegerInt()
+       {
+               assertEquals(BitVector.parse("101"), BitVector.from(BigInteger.valueOf(0b101), 3));
+               assertEquals(BitVector.parse("01010"), BitVector.from(BigInteger.valueOf(0b01010), 5));
+               assertEquals(BitVector.parse("10101"), BitVector.from(BigInteger.valueOf(-11), 5));
+               assertEquals(BitVector.parse("0000"), BitVector.from(BigInteger.valueOf(0), 4));
+       }
+
+       @Test
+       void testMutator()
+       {
+               var bv = BitVector.SINGLE_1;
+               var bvm = bv.mutator();
+
+               assertFalse(bvm.isEmpty());
+               assertEquals(ONE, bvm.getLSBit(0));
+               assertEquals(SINGLE_1, bvm.toBitVector());
+       }
+
+       @Test
+       void testGetMSBit()
+       {
+               assertEquals(ONE, SINGLE_1.getMSBit(0));
+               assertEquals(ONE, BitVector.of(ONE, X, X, X).getMSBit(0));
+               assertEquals(ONE, BitVector.of(X, X, X, X, ONE, X).getMSBit(4));
+       }
+
+       @Test
+       void testGetLSBit()
+       {
+               assertEquals(ONE, SINGLE_1.getLSBit(0));
+               assertEquals(ONE, BitVector.of(X, X, X, ONE).getLSBit(0));
+               assertEquals(ONE, BitVector.of(X, X, X, X, ONE, X).getLSBit(1));
+       }
+
+       @Test
+       void testGetBits()
+       {
+               assertArrayEquals(new Bit[] { X, ONE, Z }, BitVector.of(X, ONE, Z).getBits());
+               assertArrayEquals(new Bit[] { X, ONE, Z }, BitVector.parse("X1Z").getBits());
+       }
+
+       @Test
+       void testIsBinary()
+       {
+               assertTrue(SINGLE_0.isBinary());
+               assertTrue(SINGLE_1.isBinary());
+
+               assertFalse(SINGLE_U.isBinary());
+               assertFalse(SINGLE_X.isBinary());
+               assertFalse(SINGLE_Z.isBinary());
+
+               assertTrue(BitVector.of(ONE, ZERO, ONE, ONE, ZERO).isBinary());
+               assertFalse(BitVector.of(ONE, ZERO, ZERO, X).isBinary());
+       }
+
+       @Test
+       void testJoin()
+       {
+               // binary
+               assertEquals(SINGLE_0, SINGLE_0.join(SINGLE_0));
+               assertEquals(SINGLE_X, SINGLE_0.join(SINGLE_1));
+               assertEquals(SINGLE_1, SINGLE_1.join(SINGLE_1));
+
+               // other
+               assertEquals(SINGLE_1, SINGLE_Z.join(SINGLE_1));
+               assertEquals(SINGLE_U, SINGLE_0.join(SINGLE_U));
+               assertEquals(SINGLE_X, SINGLE_X.join(SINGLE_Z));
+
+               // higher width
+               var result = BitVector.of(U, X, ZERO, ONE, Z).join(BitVector.of(ONE, ZERO, ZERO, ONE, Z));
+               assertEquals(BitVector.of(U, X, ZERO, ONE, Z), result);
+       }
+
+       @Test
+       void testAnd()
+       {
+               // binary
+               assertEquals(SINGLE_0, SINGLE_0.and(SINGLE_0));
+               assertEquals(SINGLE_0, SINGLE_0.and(SINGLE_1));
+               assertEquals(SINGLE_1, SINGLE_1.and(SINGLE_1));
+
+               // other
+               assertEquals(SINGLE_X, SINGLE_Z.and(SINGLE_1));
+               assertEquals(SINGLE_0, SINGLE_0.and(SINGLE_U));
+               assertEquals(SINGLE_X, SINGLE_X.and(SINGLE_Z));
+
+               // higher width
+               var result = BitVector.of(U, X, ZERO, ONE, ONE).and(BitVector.of(ONE, ONE, ZERO, ZERO, ONE));
+               assertEquals(BitVector.of(U, X, ZERO, ZERO, ONE), result);
+       }
+
+       @Test
+       void testOr()
+       {
+               // binary
+               assertEquals(SINGLE_0, SINGLE_0.or(SINGLE_0));
+               assertEquals(SINGLE_1, SINGLE_0.or(SINGLE_1));
+               assertEquals(SINGLE_1, SINGLE_1.or(SINGLE_1));
+
+               // other
+               assertEquals(SINGLE_1, SINGLE_Z.or(SINGLE_1));
+               assertEquals(SINGLE_1, SINGLE_1.or(SINGLE_U));
+               assertEquals(SINGLE_X, SINGLE_X.or(SINGLE_Z));
+
+               // higher width
+               var result = BitVector.of(U, X, ZERO, ONE, ZERO).or(BitVector.of(ZERO, ZERO, ZERO, ONE, ONE));
+               assertEquals(BitVector.of(U, X, ZERO, ONE, ONE), result);
+       }
+
+       @Test
+       void testXor()
+       {
+               // binary
+               assertEquals(SINGLE_0, SINGLE_0.xor(SINGLE_0));
+               assertEquals(SINGLE_1, SINGLE_0.xor(SINGLE_1));
+               assertEquals(SINGLE_0, SINGLE_1.xor(SINGLE_1));
+
+               // other
+               assertEquals(SINGLE_X, SINGLE_Z.xor(SINGLE_1));
+               assertEquals(SINGLE_U, SINGLE_0.xor(SINGLE_U));
+               assertEquals(SINGLE_X, SINGLE_X.xor(SINGLE_Z));
+
+               // higher width
+               var result = BitVector.of(U, X, ZERO, ONE, ONE).xor(BitVector.of(ONE, ZERO, ZERO, ZERO, ONE));
+               assertEquals(BitVector.of(U, X, ZERO, ONE, ZERO), result);
+       }
+
+       @Test
+       void testNot()
+       {
+               // binary
+               assertEquals(SINGLE_1, SINGLE_0.not());
+               assertEquals(SINGLE_0, SINGLE_1.not());
+
+               // other
+               assertEquals(SINGLE_U, SINGLE_U.not());
+               assertEquals(SINGLE_X, SINGLE_X.not());
+               assertEquals(SINGLE_X, SINGLE_Z.not());
+
+               // higher width
+               var result = BitVector.of(U, X, ZERO, ONE, Z).not();
+               assertEquals(BitVector.of(U, X, ONE, ZERO, X), result);
+       }
+
+       @Test
+       void testWidth()
+       {
+               assertEquals(0, BitVector.of().width());
+               assertEquals(1, SINGLE_0.width());
+               assertEquals(3, BitVector.of(X, X, Z).width());
+       }
+
+       @Test
+       void testConcat()
+       {
+               assertEquals(BitVector.of(U, X), SINGLE_U.concat(SINGLE_X));
+               assertEquals(BitVector.of(Z, X, U, ONE, X), BitVector.of(Z, X, U).concat(BitVector.of(ONE, X)));
+       }
+
+       @Test
+       void testSubVectorInt()
+       {
+               assertEquals(SINGLE_0, SINGLE_0.subVector(0));
+               assertEquals(BitVector.of(), SINGLE_0.subVector(1));
+               assertEquals(SINGLE_0, BitVector.of(ONE, ZERO).subVector(1));
+               assertEquals(BitVector.of(X, Z), BitVector.of(ZERO, U, ONE, X, Z).subVector(3));
+       }
+
+       @Test
+       void testSubVectorIntInt()
+       {
+               assertEquals(SINGLE_0, SINGLE_0.subVector(0, 1));
+               assertEquals(BitVector.of(), SINGLE_0.subVector(0, 0));
+               assertEquals(SINGLE_0, BitVector.of(ONE, ZERO).subVector(1, 2));
+               assertEquals(BitVector.of(ONE, X), BitVector.of(ZERO, U, ONE, X, Z).subVector(2, 4));
+       }
+
+       @Test
+       void testEqualsObject()
+       {
+               assertEquals(SINGLE_X, SINGLE_X);
+               assertNotEquals(SINGLE_0, SINGLE_1);
+
+               assertEquals(BitVector.of(X, Z, U), BitVector.of(X, Z, U));
+               assertNotEquals(BitVector.of(X, Z, U), BitVector.of(X, X, U));
+       }
+
+       @Test
+       void testEqualsWithOffset()
+       {
+               assertTrue(SINGLE_X.equalsWithOffset(SINGLE_X, 0));
+               assertFalse(SINGLE_0.equalsWithOffset(SINGLE_1, 0));
+
+               assertTrue(BitVector.of(X, Z, U).equalsWithOffset(BitVector.of(Z, U), 1));
+               assertFalse(BitVector.of(X, Z, U).equalsWithOffset(BitVector.of(X, U), 1));
+               assertTrue(BitVector.of(X, Z, U).equalsWithOffset(BitVector.of(U), 2));
+       }
+
+       @Test
+       void testParse()
+       {
+               assertEquals(SINGLE_U, BitVector.parse("U"));
+               assertEquals(SINGLE_X, BitVector.parse("X"));
+               assertEquals(SINGLE_0, BitVector.parse("0"));
+               assertEquals(SINGLE_1, BitVector.parse("1"));
+               assertEquals(SINGLE_Z, BitVector.parse("Z"));
+
+               assertEquals(BitVector.of(X, U, Z, ONE, ZERO), BitVector.parse("XUZ10"));
+
+               assertThrows(RuntimeException.class, () -> BitVector.parse("01BX"));
+       }
+
+       @Test
+       void testIterator()
+       {
+               var bv = BitVector.of(U, Z, ONE, ZERO, X);
+               Iterator<Bit> it = bv.iterator();
+
+               assertEquals(U, it.next());
+               assertEquals(Z, it.next());
+               assertEquals(ONE, it.next());
+               assertEquals(ZERO, it.next());
+               assertEquals(X, it.next());
+               assertFalse(it.hasNext());
+       }
+}
index bd5fcb5..fb03a1f 100644 (file)
@@ -4,6 +4,7 @@ Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: net.mograsim.logic.model.am2900;singleton:=true
 Bundle-Version: 0.1.0.qualifier
 Export-Package: net.mograsim.logic.model.am2900.components,
+ net.mograsim.logic.model.am2900.components.am2904,
  net.mograsim.logic.model.am2900.components.am2910,
  net.mograsim.logic.model.examples
 Bundle-RequiredExecutionEnvironment: JavaSE-11
index 4064f93..72b7273 100644 (file)
@@ -689,7 +689,7 @@ mograsim version: 0.1.3
             "q3",
             "q4"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             1,
             1,
             1,
index cb697d2..7665a99 100644 (file)
@@ -698,7 +698,7 @@ mograsim version: 0.1.3
             "q3",
             "q4"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             1,
             1,
             1,
index 28021df..a836450 100644 (file)
@@ -368,7 +368,7 @@ mograsim version: 0.1.3
             "q3",
             "q4"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             1,
             1,
             1,
diff --git a/net.mograsim.logic.model.am2900/components/GUImux2.json b/net.mograsim.logic.model.am2900/components/GUImux2.json
new file mode 100644 (file)
index 0000000..2542ce0
--- /dev/null
@@ -0,0 +1,447 @@
+mograsim version: 0.1.3
+{
+  "width": 70.0,
+  "height": 70.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "I00",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I11",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I10",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 70.0,
+        "y": 10.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I01",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 30.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 24.0,
+          "y": 29.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 24.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 54.0,
+          "y": 39.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 24.0,
+          "y": 49.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIsel1",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 60.0,
+          "y": 100.0
+        }
+      },
+      {
+        "id": "GUIsel1",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 60.0,
+          "y": 35.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 115.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 55.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 55.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#9",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 50.0
+          },
+          {
+            "x": 15.0,
+            "y": 10.0
+          },
+          {
+            "x": 85.0,
+            "y": 10.0
+          },
+          {
+            "x": 85.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#8",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 105.0
+          },
+          {
+            "x": 105.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 40.0
+          },
+          {
+            "x": 105.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 150.0
+          },
+          {
+            "x": 20.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I10"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#3",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 100.0
+          },
+          {
+            "x": 40.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I00"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#2",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 75.0
+          },
+          {
+            "x": 35.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "GUImux2",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "default"
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUImux2_4.json b/net.mograsim.logic.model.am2900/components/GUImux2_4.json
new file mode 100644 (file)
index 0000000..f9648ee
--- /dev/null
@@ -0,0 +1,692 @@
+mograsim version: 0.1.3
+{
+  "width": 62.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "I00",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I11",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I10",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 62.0,
+        "y": 16.0
+      },
+      "name": "Y",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I01",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 19.0,
+          "y": 34.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 25.0,
+          "y": 45.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 140.0,
+          "y": 25.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
+        "pos": {
+          "x": 25.0,
+          "y": 180.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 25.0,
+          "y": 140.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 25.0,
+          "y": 85.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 40.0,
+          "y": 125.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 40.0,
+          "y": 30.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 100.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#36",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 50.0
+          },
+          {
+            "x": 15.0,
+            "y": 20.0
+          },
+          {
+            "x": 60.0,
+            "y": 20.0
+          },
+          {
+            "x": 60.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I00"
+        },
+        "name": "unnamedWire#19",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 60.0
+          },
+          {
+            "x": 15.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I10"
+        },
+        "name": "unnamedWire#21",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 155.0
+          },
+          {
+            "x": 15.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#22",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#27",
+        "path": [
+          {
+            "x": 80.0,
+            "y": 75.0
+          },
+          {
+            "x": 80.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#29",
+        "path": [
+          {
+            "x": 90.0,
+            "y": 95.0
+          },
+          {
+            "x": 90.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 140.0
+          },
+          {
+            "x": 85.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#30",
+        "path": [
+          {
+            "x": 95.0,
+            "y": 160.0
+          },
+          {
+            "x": 95.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "GUImux1_4",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler"
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.am2900/components/GUImux3.json b/net.mograsim.logic.model.am2900/components/GUImux3.json
new file mode 100644 (file)
index 0000000..69181cd
--- /dev/null
@@ -0,0 +1,479 @@
+mograsim version: 0.1.3
+{
+  "width": 80.0,
+  "height": 120.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I000",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 70.0
+      },
+      "name": "I011",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 100.0
+      },
+      "name": "I110",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I010",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 90.0
+      },
+      "name": "I101",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 80.0
+      },
+      "name": "I100",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 110.0
+      },
+      "name": "I111",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 80.0,
+        "y": 10.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I001",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "S2",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 24.0,
+          "y": 94.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 19.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 35.0,
+          "y": 185.0
+        }
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 35.0,
+          "y": 85.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 125.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I111"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I11"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 275.0
+          },
+          {
+            "x": 15.0,
+            "y": 245.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I10"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I110"
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 235.0
+          },
+          {
+            "x": 10.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 110.0,
+            "y": 95.0
+          },
+          {
+            "x": 110.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 115.0,
+            "y": 195.0
+          },
+          {
+            "x": 115.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 70.0,
+            "y": 25.0
+          },
+          {
+            "x": 70.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I10"
+        },
+        "name": "unnamedWire#9",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I001"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I000"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I00"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 100.0
+          },
+          {
+            "x": 10.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I011"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 145.0
+          },
+          {
+            "x": 15.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#4",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I101"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I01"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I00"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I100"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 215.0
+          },
+          {
+            "x": 10.0,
+            "y": 200.0
+          }
+        ]
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "GUImux3",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler"
+}
\ No newline at end of file
index 31a01fb..c291980 100644 (file)
@@ -2998,7 +2998,7 @@ mograsim version: 0.1.3
             "c01.q",
             "c00.q"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             4,
             4,
             4,
index 05bfe9d..f676b3d 100644 (file)
@@ -3490,7 +3490,7 @@ mograsim version: 0.1.3
             "c01.q",
             "c00.q"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             16,
             16,
             16,
diff --git a/net.mograsim.logic.model.am2900/components/GUIsel1.json b/net.mograsim.logic.model.am2900/components/GUIsel1.json
new file mode 100644 (file)
index 0000000..26a25cf
--- /dev/null
@@ -0,0 +1,208 @@
+mograsim version: 0.1.3
+{
+  "width": 35.0,
+  "height": 40.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "I2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "S2",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 35.0,
+          "y": 30.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#3",
+        "pos": {
+          "x": 60.0,
+          "y": 40.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 35.0,
+          "y": 55.0
+        },
+        "params": 1
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#9"
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#8"
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 87.5
+          },
+          {
+            "x": 15.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S2"
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 37.5
+          },
+          {
+            "x": 15.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 12.5
+          },
+          {
+            "x": 25.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 62.5
+          },
+          {
+            "x": 25.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#10"
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "GUIsel1",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "default"
+}
\ No newline at end of file
index 9e1fd5d..33bddda 100644 (file)
@@ -1,52 +1,44 @@
 mograsim version: 0.1.3
 {
-  "width": 72.0,
-  "height": 61.0,
+  "width": 120.0,
+  "height": 94.0,
   "interfacePins": [
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 24.400000000000002
+        "x": 0.0,
+        "y": 25.0
       },
       "name": "IOVR",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 19.400000000000002
+        "x": 0.0,
+        "y": 30.0
       },
       "name": "_CEM",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 0.4,
-        "y": 5.4
+        "x": 0.0,
+        "y": 5.0
       },
       "name": "C",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 29.400000000000002
-      },
-      "name": "YN_in",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.4,
-        "y": 31.400000000000002
+        "x": 0.0,
+        "y": 61.0
       },
       "name": "I",
       "logicWidth": 13
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 9.4
+        "x": 0.0,
+        "y": 40.0
       },
       "name": "_EN",
       "logicWidth": 1
@@ -61,26 +53,26 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": -24.6,
-        "y": 14.4
+        "x": 120.0,
+        "y": 17.0
       },
-      "name": "SIOn_in",
+      "name": "YC",
       "logicWidth": 1
     },
     {
       "location": {
         "x": -24.6,
-        "y": 24.400000000000002
+        "y": 14.4
       },
-      "name": "C0",
+      "name": "SIOn_in",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 54.400000000000006
+        "x": -24.6,
+        "y": 24.400000000000002
       },
-      "name": "YOVR_in",
+      "name": "C0",
       "logicWidth": 1
     },
     {
@@ -93,26 +85,26 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 34.4
+        "x": 0.0,
+        "y": 36.0
       },
-      "name": "YZ_in",
+      "name": "_EZ",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -24.6,
-        "y": 9.4
+        "x": -14.600000000000001,
+        "y": 14.4
       },
-      "name": "_EZ",
+      "name": "Cx",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 14.4
+        "x": 120.0,
+        "y": 21.0
       },
-      "name": "Cx",
+      "name": "YN",
       "logicWidth": 1
     },
     {
@@ -125,42 +117,42 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": -24.6,
-        "y": 29.400000000000002
+        "x": 0.0,
+        "y": 15.0
       },
       "name": "IC",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 49.400000000000006
+        "x": 0.0,
+        "y": 42.0
       },
       "name": "_EOVR",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -34.6,
-        "y": 14.4
+        "x": 120.0,
+        "y": 11.0
       },
-      "name": "IN",
+      "name": "YZ",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -24.6,
-        "y": 39.400000000000006
+        "x": 0.0,
+        "y": 20.0
       },
-      "name": "YC_out",
+      "name": "IN",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -34.6,
-        "y": -0.6000000000000001
+        "x": 61.0,
+        "y": 0.0
       },
-      "name": "YOVR_out",
+      "name": "_OEY",
       "logicWidth": 1
     },
     {
@@ -189,44 +181,28 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": -34.6,
-        "y": 24.400000000000002
-      },
-      "name": "YZ_out",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": -24.6,
-        "y": 4.4
+        "x": 0.0,
+        "y": 10.0
       },
       "name": "IZ",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -24.6,
-        "y": -0.6000000000000001
+        "x": 120.0,
+        "y": 60.0
       },
       "name": "CT",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -24.6,
-        "y": 34.4
+        "x": 0.0,
+        "y": 33.0
       },
       "name": "_CEmu",
       "logicWidth": 1
     },
-    {
-      "location": {
-        "x": -34.6,
-        "y": 19.400000000000002
-      },
-      "name": "YN_out",
-      "logicWidth": 1
-    },
     {
       "location": {
         "x": -24.6,
@@ -237,18 +213,18 @@ mograsim version: 0.1.3
     },
     {
       "location": {
-        "x": -34.6,
-        "y": 4.4
+        "x": 120.0,
+        "y": 25.0
       },
-      "name": "_EC",
+      "name": "YOVR",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": -14.600000000000001,
-        "y": 39.400000000000006
+        "x": 0.0,
+        "y": 38.0
       },
-      "name": "YC_in",
+      "name": "_EC",
       "logicWidth": 1
     }
   ],
@@ -257,299 +233,2202 @@ mograsim version: 0.1.3
     "subComps": [
       {
         "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
-        "name": "WireCrossPoint#0",
+        "name": "WireCrossPoint#14",
         "pos": {
-          "x": 190.0,
-          "y": 10.0
+          "x": 520.0,
+          "y": 190.0
         },
-        "params": 1
+        "params": 4
       },
       {
-        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904RegCTInstrDecode",
-        "name": "GUIAm2904RegCTInstrDecode#0",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#13",
         "pos": {
-          "x": 35.0,
-          "y": 80.0
-        }
+          "x": 330.0,
+          "y": 125.0
+        },
+        "params": 1
       },
       {
-        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
-        "name": "GUISplitter#0",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#16",
         "pos": {
-          "x": 5.0,
-          "y": 90.0
+          "x": 255.0,
+          "y": 255.0
         },
-        "params": 13
+        "params": 4
       },
       {
-        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
-        "name": "GUIMerger#1",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#15",
         "pos": {
-          "x": 20.0,
-          "y": 150.0
+          "x": 255.0,
+          "y": 265.0
         },
-        "params": 5
+        "params": 4
       },
       {
-        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
-        "name": "GUIMerger#0",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
         "pos": {
-          "x": 20.0,
-          "y": 90.0
+          "x": 180.0,
+          "y": 135.0
         },
-        "params": 6
+        "params": 4
       },
       {
-        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904ShiftInstrDecode",
-        "name": "GUIAm2904ShiftInstrDecode#0",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
         "pos": {
-          "x": 40.0,
-          "y": 230.0
-        }
+          "x": 165.0,
+          "y": 150.0
+        },
+        "params": 1
       },
       {
-        "id": "class:net.mograsim.logic.model.am2900.components.GUIdff4_finewe",
-        "name": "GUIdff4_finewe#0",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#3",
         "pos": {
-          "x": 195.0,
-          "y": 5.0
-        }
+          "x": 335.0,
+          "y": 270.0
+        },
+        "params": 4
       },
       {
-        "id": "class:net.mograsim.logic.model.am2900.components.GUIdff4_finewe",
-        "name": "GUIdff4_finewe#1",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#2",
         "pos": {
-          "x": 195.0,
-          "y": 110.0
-        }
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O10"
-        },
-        "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I4"
+          "x": 295.0,
+          "y": 120.0
         },
-        "name": "unnamedWire#14",
-        "path": []
+        "params": 4
       },
       {
-        "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O9"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 530.0,
+          "y": 100.0
         },
-        "name": "unnamedWire#13",
-        "path": []
+        "params": 4
       },
       {
-        "pin1": {
-          "compName": "GUIAm2904ShiftInstrDecode#0",
-          "pinName": "I"
-        },
-        "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "O"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 150.0,
+          "y": 160.0
         },
-        "name": "unnamedWire#16",
-        "path": [
-          {
-            "x": 35.0,
-            "y": 265.0
-          },
-          {
-            "x": 35.0,
-            "y": 175.0
-          }
-        ]
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "O"
-        },
-        "pin2": {
-          "compName": "GUIAm2904RegCTInstrDecode#0",
-          "pinName": "I"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 215.0,
+          "y": 180.0
         },
-        "name": "unnamedWire#15",
-        "path": []
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I5"
-        },
-        "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O5"
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
+        "pos": {
+          "x": 530.0,
+          "y": 170.0
         },
-        "name": "unnamedWire#9",
-        "path": []
+        "params": {
+          "logicWidth": 4,
+          "orientation": "RIGHT"
+        }
       },
       {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O4"
-        },
-        "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I4"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 120.0,
+          "y": 15.0
         },
-        "name": "unnamedWire#8",
-        "path": []
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I3"
-        },
-        "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O3"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 215.0,
+          "y": 200.0
         },
-        "name": "unnamedWire#7",
-        "path": []
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O2"
-        },
-        "pin2": {
-          "compName": "GUIMerger#0",
-          "pinName": "I2"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 215.0,
+          "y": 160.0
         },
-        "name": "unnamedWire#6",
-        "path": []
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff4_finewe#0",
-          "pinName": "C"
-        },
-        "name": "unnamedWire#1",
-        "path": []
+        "id": "GUIAm2904muSR",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 270.0,
+          "y": 250.0
+        }
       },
       {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#10",
+        "pos": {
+          "x": 195.0,
+          "y": 55.0
         },
-        "name": "unnamedWire#0",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 25.0
-          },
-          {
-            "x": 5.0,
-            "y": 10.0
-          }
-        ]
+        "params": 1
       },
       {
-        "pin1": {
-          "compName": "GUIMerger#0",
-          "pinName": "I1"
-        },
-        "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O1"
-        },
-        "name": "unnamedWire#5",
-        "path": []
+        "id": "GUIAm2904MSR",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 225.0,
+          "y": 95.0
+        }
       },
       {
-        "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O6"
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#12",
+        "pos": {
+          "x": 195.0,
+          "y": 35.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 470.0,
+          "y": 160.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#11",
+        "pos": {
+          "x": 195.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 370.0,
+          "y": 130.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
+        "pos": {
+          "x": 415.0,
+          "y": 210.0
+        }
+      },
+      {
+        "id": "GUInot4",
+        "name": "DeserializedSubmodelComponent#4",
+        "pos": {
+          "x": 135.0,
+          "y": 40.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#3",
+        "pos": {
+          "x": 510.0,
+          "y": 165.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#7",
+        "pos": {
+          "x": 300.0,
+          "y": 310.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#2",
+        "pos": {
+          "x": 15.0,
+          "y": 65.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIAm2904TestLogic",
+        "name": "DeserializedSubmodelComponent#6",
+        "pos": {
+          "x": 225.0,
+          "y": 340.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#1",
+        "pos": {
+          "x": 25.0,
+          "y": 305.0
+        },
+        "params": 5
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#9",
+        "pos": {
+          "x": 480.0,
+          "y": 305.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 25.0,
+          "y": 245.0
+        },
+        "params": 6
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#8",
+        "pos": {
+          "x": 540.0,
+          "y": 295.0
+        }
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#10",
+        "pos": {
+          "x": 485.0,
+          "y": 355.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#10",
+        "pos": {
+          "x": 340.0,
+          "y": 120.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#9",
+        "pos": {
+          "x": 205.0,
+          "y": 10.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#8",
+        "pos": {
+          "x": 205.0,
+          "y": 30.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#5",
+        "pos": {
+          "x": 225.0,
+          "y": 175.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#4",
+        "pos": {
+          "x": 225.0,
+          "y": 155.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#7",
+        "pos": {
+          "x": 205.0,
+          "y": 50.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#6",
+        "pos": {
+          "x": 205.0,
+          "y": 70.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 130.0,
+          "y": 5.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 190.0,
+          "y": 145.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#3",
+        "pos": {
+          "x": 225.0,
+          "y": 215.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 225.0,
+          "y": 195.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#4",
+        "pos": {
+          "x": 395.0,
+          "y": 225.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#3",
+        "pos": {
+          "x": 450.0,
+          "y": 175.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 395.0,
+          "y": 195.0
+        },
+        "params": 2
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 555.0,
+          "y": 80.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#8",
+        "pos": {
+          "x": 445.0,
+          "y": 370.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#7",
+        "pos": {
+          "x": 445.0,
+          "y": 330.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#6",
+        "pos": {
+          "x": 285.0,
+          "y": 320.0
+        },
+        "params": 3
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#5",
+        "pos": {
+          "x": 395.0,
+          "y": 265.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 10.0,
+          "y": 245.0
+        },
+        "params": 13
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904RegCTInstrDecode",
+        "name": "GUIAm2904RegCTInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 230.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904ShiftInstrDecode",
+        "name": "GUIAm2904ShiftInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 360.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#36",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_CEmu"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#4",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#37",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#39",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#110",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#111",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y111"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I111"
+        },
+        "name": "unnamedWire#114",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I110"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y110"
+        },
+        "name": "unnamedWire#115",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#112",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#113",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y011"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I011"
+        },
+        "name": "unnamedWire#118",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I010"
+        },
+        "name": "unnamedWire#119",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#41",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y101"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I101"
+        },
+        "name": "unnamedWire#116",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#40",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I100"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y100"
+        },
+        "name": "unnamedWire#117",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EOVR"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#42",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#45",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EN"
+        },
+        "name": "unnamedWire#44",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#4",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEZ"
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#4",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "YZ"
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#100",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#103",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#4",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#104",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#101",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#102",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "YC"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#107",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#108",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "YOVR"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#52",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#105",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "YN"
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#106",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#54",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#53",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#56",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#5",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#109",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#55",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O10"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I4"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#1",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O9"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "O"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 395.0
+          },
+          {
+            "x": 40.0,
+            "y": 325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 100.0
+          },
+          {
+            "x": 5.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IOVR"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 125.0
+          },
+          {
+            "x": 10.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IC"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_CINV"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "CINV"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IZ"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 50.0
+          },
+          {
+            "x": 5.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#2",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "mu"
+        },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#30",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_EN"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_EN"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "MSR_MUX"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "MUX"
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#79",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#10",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "name": "unnamedWire#81",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#10",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#80",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#10",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#83",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_OEY"
+        },
+        "name": "unnamedWire#82",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#85",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#84",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#87",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#86",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUIMerger#3",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#89",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#88",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O5"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O4"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I4"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#3",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#90",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#3",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#92",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUIMerger#3",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#91",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_MUX"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "MUX"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "Y_MUX"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#94",
+        "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": "GUIMerger#3",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "name": "unnamedWire#93",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#96",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#95",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O6"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#98",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#97",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O8"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#1",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O7"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_OVRRET"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "OVRRET"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#99",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEN"
+        },
+        "name": "unnamedWire#58",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CEM"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#57",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEOVR"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#59",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#132",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#7",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#133",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_INV"
+        },
+        "name": "unnamedWire#130",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#131",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I0"
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "M"
         },
-        "name": "unnamedWire#10",
+        "name": "unnamedWire#136",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#8",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#137",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#7",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#134",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#8",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#135",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#7",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#6",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#60",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#9",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#63",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "OEN"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#138",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#8",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#62",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#65",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "name": "unnamedWire#64",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EN"
+        },
+        "pin2": {
+          "compName": "GUINandGate#7",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#67",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#6",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EOVR"
+        },
+        "name": "unnamedWire#66",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#9",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#69",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EC"
+        },
+        "name": "unnamedWire#68",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y000"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I000"
+        },
+        "name": "unnamedWire#121",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "CT"
+        },
+        "name": "unnamedWire#122",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I001"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y001"
+        },
+        "name": "unnamedWire#120",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
           "pinName": "O0"
         },
         "pin2": {
-          "compName": "GUIMerger#0",
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#125",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#6",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#126",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#70",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#123",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_MUX"
+        },
+        "name": "unnamedWire#124",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#8",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#72",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
           "pinName": "I0"
         },
-        "name": "unnamedWire#4",
+        "name": "unnamedWire#129",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#9",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#71",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUINandGate#6",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#74",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#127",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUINandGate#7",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#73",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_EXP"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#128",
         "path": []
       },
       {
         "pin1": {
           "compName": "_submodelinterface",
-          "pinName": "I"
+          "pinName": "_EC"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "I"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A2"
         },
-        "name": "unnamedWire#3",
+        "name": "unnamedWire#76",
         "path": []
       },
       {
         "pin1": {
-          "compName": "GUISplitter#0",
-          "pinName": "O8"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A1"
         },
         "pin2": {
-          "compName": "GUIMerger#1",
-          "pinName": "I2"
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
         },
-        "name": "unnamedWire#12",
+        "name": "unnamedWire#75",
         "path": []
       },
       {
         "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
         },
         "pin2": {
-          "compName": "GUIdff4_finewe#1",
-          "pinName": "C"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A4"
         },
-        "name": "unnamedWire#2",
-        "path": [
-          {
-            "x": 190.0,
-            "y": 115.0
-          }
-        ]
+        "name": "unnamedWire#78",
+        "path": []
       },
       {
         "pin1": {
-          "compName": "GUIMerger#1",
-          "pinName": "I1"
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A3"
         },
         "pin2": {
-          "compName": "GUISplitter#0",
-          "pinName": "O7"
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
         },
-        "name": "unnamedWire#11",
+        "name": "unnamedWire#77",
         "path": []
       }
     ]
index ff3abac..26928e5 100644 (file)
@@ -1,36 +1,36 @@
 mograsim version: 0.1.3
 {
-  "width": 29.0,
-  "height": 45.0,
+  "width": 60.0,
+  "height": 90.0,
   "interfacePins": [
     {
       "location": {
-        "x": 29.0,
-        "y": 30.0
+        "x": 60.0,
+        "y": 60.0
       },
       "name": "Y101",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 10.0
+        "x": 60.0,
+        "y": 20.0
       },
       "name": "Y001",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 25.0
+        "x": 60.0,
+        "y": 50.0
       },
       "name": "Y100",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 40.0
+        "x": 60.0,
+        "y": 80.0
       },
       "name": "Y111",
       "logicWidth": 1
@@ -38,139 +38,139 @@ mograsim version: 0.1.3
     {
       "location": {
         "x": 0.0,
-        "y": 22.0
+        "y": 50.0
       },
       "name": "I",
       "logicWidth": 4
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 20.0
+        "x": 60.0,
+        "y": 40.0
       },
       "name": "Y011",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 5.0
+        "x": 60.0,
+        "y": 10.0
       },
       "name": "Y000",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 35.0
+        "x": 60.0,
+        "y": 70.0
       },
       "name": "Y110",
       "logicWidth": 1
     },
     {
       "location": {
-        "x": 29.0,
-        "y": 15.0
+        "x": 60.0,
+        "y": 30.0
       },
       "name": "Y010",
       "logicWidth": 1
     }
   ],
   "submodel": {
-    "innerScale": 0.2,
+    "innerScale": 0.4,
     "subComps": [
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#1",
         "pos": {
-          "x": 40.0,
+          "x": 45.0,
           "y": 50.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#0",
         "pos": {
-          "x": 80.0,
+          "x": 85.0,
           "y": 20.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#3",
         "pos": {
-          "x": 40.0,
+          "x": 45.0,
           "y": 105.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#2",
         "pos": {
-          "x": 115.0,
+          "x": 120.0,
           "y": 15.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#1",
         "pos": {
-          "x": 29.0,
+          "x": 34.0,
           "y": 99.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#0",
         "pos": {
-          "x": 24.0,
-          "y": 114.0
+          "x": 29.0,
+          "y": 129.0
         },
         "params": 1
       },
       {
-        "id": "GUISplitter",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
         "name": "GUISplitter#0",
         "pos": {
           "x": 5.0,
-          "y": 95.0
+          "y": 110.0
         },
         "params": 4
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#3",
         "pos": {
-          "x": 74.0,
+          "x": 79.0,
           "y": 24.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#2",
         "pos": {
-          "x": 74.0,
+          "x": 79.0,
           "y": 34.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#5",
         "pos": {
-          "x": 19.0,
-          "y": 109.0
+          "x": 24.0,
+          "y": 119.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#4",
         "pos": {
           "x": 19.0,
@@ -179,55 +179,55 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#7",
         "pos": {
-          "x": 69.0,
+          "x": 74.0,
           "y": 59.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#6",
         "pos": {
-          "x": 34.0,
+          "x": 39.0,
           "y": 64.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#9",
         "pos": {
-          "x": 19.0,
+          "x": 24.0,
           "y": 149.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#8",
         "pos": {
-          "x": 69.0,
+          "x": 74.0,
           "y": 119.0
         },
         "params": 1
       },
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#5",
         "pos": {
-          "x": 75.0,
+          "x": 80.0,
           "y": 165.0
         },
         "params": 1
       },
       {
-        "id": "WireCrossPoint",
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
         "name": "WireCrossPoint#10",
         "pos": {
-          "x": 34.0,
+          "x": 39.0,
           "y": 109.0
         },
         "params": 1
@@ -236,15 +236,15 @@ mograsim version: 0.1.3
         "id": "GUIxor",
         "name": "DeserializedSubmodelComponent#0",
         "pos": {
-          "x": 35.0,
+          "x": 40.0,
           "y": 20.0
         }
       },
       {
-        "id": "GUINandGate",
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
         "name": "GUINandGate#4",
         "pos": {
-          "x": 75.0,
+          "x": 80.0,
           "y": 115.0
         },
         "params": 1
@@ -263,15 +263,11 @@ mograsim version: 0.1.3
         "name": "unnamedWire#14",
         "path": [
           {
-            "x": 70.0,
-            "y": 45.0
-          },
-          {
-            "x": 110.0,
-            "y": 45.0
+            "x": 115.0,
+            "y": 60.0
           },
           {
-            "x": 110.0,
+            "x": 115.0,
             "y": 30.0
           }
         ]
@@ -312,7 +308,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#15",
         "path": [
           {
-            "x": 75.0,
+            "x": 80.0,
             "y": 50.0
           }
         ]
@@ -339,7 +335,12 @@ mograsim version: 0.1.3
           "pinName": ""
         },
         "name": "unnamedWire#17",
-        "path": []
+        "path": [
+          {
+            "x": 25.0,
+            "y": 110.0
+          }
+        ]
       },
       {
         "pin1": {
@@ -351,12 +352,7 @@ mograsim version: 0.1.3
           "pinName": ""
         },
         "name": "unnamedWire#19",
-        "path": [
-          {
-            "x": 20.0,
-            "y": 105.0
-          }
-        ]
+        "path": []
       },
       {
         "pin1": {
@@ -371,7 +367,7 @@ mograsim version: 0.1.3
         "path": [
           {
             "x": 20.0,
-            "y": 95.0
+            "y": 110.0
           }
         ]
       },
@@ -435,11 +431,11 @@ mograsim version: 0.1.3
         "name": "unnamedWire#24",
         "path": [
           {
-            "x": 65.0,
+            "x": 70.0,
             "y": 115.0
           },
           {
-            "x": 65.0,
+            "x": 70.0,
             "y": 130.0
           }
         ]
@@ -576,7 +572,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#30",
         "path": [
           {
-            "x": 70.0,
+            "x": 75.0,
             "y": 170.0
           }
         ]
@@ -593,11 +589,11 @@ mograsim version: 0.1.3
         "name": "unnamedWire#10",
         "path": [
           {
-            "x": 105.0,
+            "x": 110.0,
             "y": 20.0
           },
           {
-            "x": 105.0,
+            "x": 110.0,
             "y": 30.0
           }
         ]
@@ -626,7 +622,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#32",
         "path": [
           {
-            "x": 20.0,
+            "x": 25.0,
             "y": 180.0
           }
         ]
@@ -643,7 +639,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#4",
         "path": [
           {
-            "x": 30.0,
+            "x": 35.0,
             "y": 35.0
           }
         ]
@@ -660,7 +656,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#31",
         "path": [
           {
-            "x": 35.0,
+            "x": 40.0,
             "y": 120.0
           }
         ]
@@ -677,7 +673,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#3",
         "path": [
           {
-            "x": 25.0,
+            "x": 30.0,
             "y": 25.0
           }
         ]
@@ -694,7 +690,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#12",
         "path": [
           {
-            "x": 35.0,
+            "x": 40.0,
             "y": 55.0
           }
         ]
@@ -711,8 +707,8 @@ mograsim version: 0.1.3
         "name": "unnamedWire#2",
         "path": [
           {
-            "x": 30.0,
-            "y": 125.0
+            "x": 35.0,
+            "y": 140.0
           }
         ]
       },
@@ -745,7 +741,7 @@ mograsim version: 0.1.3
         "name": "unnamedWire#33",
         "path": [
           {
-            "x": 25.0,
+            "x": 30.0,
             "y": 200.0
           }
         ]
index b9e7b2b..bea1a75 100644 (file)
@@ -32,10 +32,10 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                addPin(new Pin(this, "muSR_MUX", 2, 80, 10), Usage.OUTPUT, Position.LEFT);
                addPin(new Pin(this, "muSR_OVRRET", 1, 80, 20), Usage.OUTPUT, Position.LEFT);
                addPin(new Pin(this, "muSR_CINV", 1, 80, 30), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "muSR__WEZ", 1, 80, 40), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "muSR__WEC", 1, 80, 50), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "muSR__WEN", 1, 80, 60), Usage.OUTPUT, Position.LEFT);
-               addPin(new Pin(this, "muSR__WEOVR", 1, 80, 70), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "muSR_WEZ", 1, 80, 40), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "muSR_WEC", 1, 80, 50), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "muSR_WEN", 1, 80, 60), Usage.OUTPUT, Position.LEFT);
+               addPin(new Pin(this, "muSR_WEOVR", 1, 80, 70), Usage.OUTPUT, Position.LEFT);
                // MSR MUX:
                // 000: 0
                // 001: 1
@@ -45,13 +45,15 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                // 101: I, invert C
                // 110: Swap OVR and C
                // 111: _M
-               addPin(new Pin(this, "MSR_MUX", 3, 40, 0), Usage.OUTPUT, Position.BOTTOM);
+               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);
                // CT SRC MUX:
                // 00: mu
                // 01: mu
                // 10: M
                // 11: I
-               addPin(new Pin(this, "CT_SRC_MUX", 2, 10, 80), Usage.OUTPUT, Position.TOP);
+               addPin(new Pin(this, "Y_MUX", 2, 10, 80), Usage.OUTPUT, Position.TOP);
                // CT MUX:
                // see Am2900 Family Data Book, Am2904, Table 4 (CT_MUX2-0 = I3-1)
                addPin(new Pin(this, "CT_MUX", 3, 30, 80), Usage.OUTPUT, Position.TOP);
@@ -72,12 +74,12 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                                break;
                        case U:
                                for (ReadWriteEnd e : readWriteEnds.values())
-                                       e.feedSignals(BitVector.of(U, e.length()));
+                                       e.feedSignals(BitVector.of(U, e.width()));
                                return null;
                        case X:
                        case Z:
                                for (ReadWriteEnd e : readWriteEnds.values())
-                                       e.feedSignals(BitVector.of(X, e.length()));
+                                       e.feedSignals(BitVector.of(X, e.width()));
                                return null;
                        case ZERO:
                                break;
@@ -91,110 +93,110 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        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);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 1:
                        readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 3:
                        readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 6:
                case 7:
                        readWriteEnds.get("muSR_MUX").feedSignals(ONE, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ONE);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 8:
                        readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 9:
                        readWriteEnds.get("muSR_MUX").feedSignals(ONE, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 10:
                        readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 11:
                        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);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 12:
                        readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 13:
                        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);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ZERO);
                        break;
                case 14:
                        readWriteEnds.get("muSR_MUX").feedSignals(ZERO, ZERO);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 15:
                        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);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                case 24:
                case 25:
@@ -205,19 +207,19 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("muSR_MUX").feedSignals(ONE, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ONE);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                        break;
                default:
                        readWriteEnds.get("muSR_MUX").feedSignals(ONE, ONE);
                        readWriteEnds.get("muSR_OVRRET").feedSignals(ZERO);
                        readWriteEnds.get("muSR_CINV").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEZ").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEC").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEN").feedSignals(ZERO);
-                       readWriteEnds.get("muSR__WEOVR").feedSignals(ZERO);
+                       readWriteEnds.get("muSR_WEZ").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEC").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEN").feedSignals(ONE);
+                       readWriteEnds.get("muSR_WEOVR").feedSignals(ONE);
                }
                switch (IAsInt)
                {
@@ -253,7 +255,7 @@ public class GUIAm2904RegCTInstrDecode extends SimpleRectangularHardcodedGUIComp
                        readWriteEnds.get("MSR_MUX").feedSignals(ZERO, ZERO, ONE);
                        break;
                }
-               readWriteEnds.get("CT_SRC_MUX").feedSignals(IBits[0], IBits[1]);
+               readWriteEnds.get("Y_MUX").feedSignals(IBits[0], IBits[1]);
                readWriteEnds.get("CT_INV").feedSignals(IBits[5]);
                readWriteEnds.get("CT_MUX").feedSignals(IBits[2], IBits[3], IBits[4]);
                readWriteEnds.get("CT_EXP").feedSignals((IAsInt & 0b1110) == 0b1110 ? ONE : ZERO);
index 3bef1a0..e5b24f1 100644 (file)
@@ -25,7 +25,7 @@ public class GUIComponentTestbench
        @SuppressWarnings("unused") // for GUIWires being created
        public static void createTestbench(ViewModelModifiable model)
        {
-               GUIComponent comp = IndirectGUIComponentCreator.createComponent(model, "file:components/am2904/GUIAm2904TestLogic.json");
+               GUIComponent comp = IndirectGUIComponentCreator.createComponent(model, "file:components/am2904/GUIAm2904.json");
 
                // guess which pins are outputs and which are inputs
                // TODO this code exists four times... but it seems too "hacky" to put it in a helper class
index 46a4b92..cd682f2 100644 (file)
@@ -92,11 +92,11 @@ public final class TestUtil
                return sb.reverse().toString();
        }
 
-       public static BitVector of(int value, int length)
+       public static BitVector of(int value, int width)
        {
-               BitVectorMutator mutator = BitVectorMutator.ofLength(length);
+               BitVectorMutator mutator = BitVectorMutator.ofWidth(width);
                int val = value;
-               for (int i = length - 1; i >= 0; i--)
+               for (int i = width - 1; i >= 0; i--)
                {
                        mutator.setMSBit(i, Bit.lastBitOf(val));
                        val >>>= 1;
index 1695eae..f3686aa 100644 (file)
@@ -54,7 +54,7 @@ public class TestableAm2910Impl implements TestableAm2910
        @Override
        public void setInstruction(Am2910_Inst inst)
        {
-               I.setState(BitVector.of(inst.ordinal(), 4));
+               I.setState(BitVector.from(inst.ordinal(), 4));
        }
 
        @Override
index d522281..283c286 100644 (file)
@@ -6,7 +6,8 @@ Bundle-Version: 0.1.0.qualifier
 Export-Package: net.mograsim.logic.model.editor,
  net.mograsim.logic.model.editor.handles,
  net.mograsim.logic.model.editor.states,
- net.mograsim.logic.model.editor.ui
+ net.mograsim.logic.model.editor.ui,
+ net.mograsim.logic.model.editor.util
 Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0",
  net.mograsim.preferences;bundle-version="0.1.0",
  net.mograsim.logic.model.am2900;bundle-version="0.1.0"
diff --git a/net.mograsim.logic.model.editor/components/GUIdff4.json b/net.mograsim.logic.model.editor/components/GUIdff4.json
new file mode 100644 (file)
index 0000000..72b7273
--- /dev/null
@@ -0,0 +1,716 @@
+mograsim version: 0.1.3
+{
+  "width": 35.0,
+  "height": 60.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Q2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Q3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Q4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "WE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#1",
+        "pos": {
+          "x": 115.0,
+          "y": 70.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#0",
+        "pos": {
+          "x": 115.0,
+          "y": 20.0
+        }
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 104.0,
+          "y": 74.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 104.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 169.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 104.0,
+          "y": 124.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 159.0,
+          "y": 124.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 164.0,
+          "y": 74.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 154.0,
+          "y": 174.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 55.0,
+          "y": 70.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#3",
+        "pos": {
+          "x": 115.0,
+          "y": 170.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#2",
+        "pos": {
+          "x": 115.0,
+          "y": 120.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q1"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff#0",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff#2",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#18",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 275.0
+          },
+          {
+            "x": 15.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q3"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q4"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#23",
+        "path": [
+          {
+            "x": 95.0,
+            "y": 105.0
+          },
+          {
+            "x": 95.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUIdff#2",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#22",
+        "path": [
+          {
+            "x": 100.0,
+            "y": 95.0
+          },
+          {
+            "x": 100.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#25",
+        "path": [
+          {
+            "x": 165.0,
+            "y": 200.0
+          },
+          {
+            "x": 45.0,
+            "y": 200.0
+          },
+          {
+            "x": 45.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#24",
+        "path": [
+          {
+            "x": 170.0,
+            "y": 195.0
+          },
+          {
+            "x": 50.0,
+            "y": 195.0
+          },
+          {
+            "x": 50.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#26",
+        "path": [
+          {
+            "x": 160.0,
+            "y": 205.0
+          },
+          {
+            "x": 40.0,
+            "y": 205.0
+          },
+          {
+            "x": 40.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 155.0,
+            "y": 210.0
+          },
+          {
+            "x": 35.0,
+            "y": 210.0
+          },
+          {
+            "x": 35.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#8",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#2",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUIdff#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 100.0,
+            "y": 75.0
+          },
+          {
+            "x": 100.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 225.0
+          },
+          {
+            "x": 10.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 175.0
+          },
+          {
+            "x": 5.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "D flip flop\n4 bit",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {
+      "q1": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#0",
+          "subStateID": "q"
+        }
+      },
+      "q2": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#1",
+          "subStateID": "q"
+        }
+      },
+      "q": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.BitVectorSplittingAtomicHighLevelStateHandler",
+        "params": {
+          "vectorPartTargets": [
+            "q1",
+            "q2",
+            "q3",
+            "q4"
+          ],
+          "vectorPartWidths": [
+            1,
+            1,
+            1,
+            1
+          ]
+        }
+      },
+      "q3": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#2",
+          "subStateID": "q"
+        }
+      },
+      "q4": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#3",
+          "subStateID": "q"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUIdff4_invwe.json b/net.mograsim.logic.model.editor/components/GUIdff4_invwe.json
new file mode 100644 (file)
index 0000000..7665a99
--- /dev/null
@@ -0,0 +1,725 @@
+mograsim version: 0.1.3
+{
+  "width": 35.0,
+  "height": 60.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Q2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Q3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Q4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "_WE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#1",
+        "pos": {
+          "x": 115.0,
+          "y": 70.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#0",
+        "pos": {
+          "x": 115.0,
+          "y": 20.0
+        }
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 104.0,
+          "y": 74.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 104.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 169.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 104.0,
+          "y": 124.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 159.0,
+          "y": 124.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 164.0,
+          "y": 74.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 154.0,
+          "y": 174.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 55.0,
+          "y": 70.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#3",
+        "pos": {
+          "x": 115.0,
+          "y": 170.0
+        }
+      },
+      {
+        "id": "GUIdff",
+        "name": "GUIdff#2",
+        "pos": {
+          "x": 115.0,
+          "y": 120.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q1"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff#0",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff#2",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#18",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 275.0
+          },
+          {
+            "x": 25.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q3"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q4"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#23",
+        "path": [
+          {
+            "x": 95.0,
+            "y": 105.0
+          },
+          {
+            "x": 95.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUIdff#2",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#22",
+        "path": [
+          {
+            "x": 100.0,
+            "y": 95.0
+          },
+          {
+            "x": 100.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#25",
+        "path": [
+          {
+            "x": 165.0,
+            "y": 210.0
+          },
+          {
+            "x": 45.0,
+            "y": 210.0
+          },
+          {
+            "x": 45.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#24",
+        "path": [
+          {
+            "x": 170.0,
+            "y": 205.0
+          },
+          {
+            "x": 50.0,
+            "y": 205.0
+          },
+          {
+            "x": 50.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#26",
+        "path": [
+          {
+            "x": 160.0,
+            "y": 215.0
+          },
+          {
+            "x": 40.0,
+            "y": 215.0
+          },
+          {
+            "x": 40.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 155.0,
+            "y": 220.0
+          },
+          {
+            "x": 35.0,
+            "y": 220.0
+          },
+          {
+            "x": 35.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_WE"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#3",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#8",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#2",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUIdff#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 100.0,
+            "y": 75.0
+          },
+          {
+            "x": 100.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 125.0
+          },
+          {
+            "x": 10.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 225.0
+          },
+          {
+            "x": 20.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 175.0
+          },
+          {
+            "x": 15.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "GUIdff#1",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "D flip flop\n4 bit",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {
+      "q1": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#0",
+          "subStateID": "q"
+        }
+      },
+      "q2": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#1",
+          "subStateID": "q"
+        }
+      },
+      "q": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.BitVectorSplittingAtomicHighLevelStateHandler",
+        "params": {
+          "vectorPartTargets": [
+            "q1",
+            "q2",
+            "q3",
+            "q4"
+          ],
+          "vectorPartWidths": [
+            1,
+            1,
+            1,
+            1
+          ]
+        }
+      },
+      "q3": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#2",
+          "subStateID": "q"
+        }
+      },
+      "q4": {
+        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
+        "params": {
+          "delegateTarget": "GUIdff#3",
+          "subStateID": "q"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
index 28021df..a836450 100644 (file)
@@ -368,7 +368,7 @@ mograsim version: 0.1.3
             "q3",
             "q4"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             1,
             1,
             1,
diff --git a/net.mograsim.logic.model.editor/components/GUImux2.json b/net.mograsim.logic.model.editor/components/GUImux2.json
new file mode 100644 (file)
index 0000000..2542ce0
--- /dev/null
@@ -0,0 +1,447 @@
+mograsim version: 0.1.3
+{
+  "width": 70.0,
+  "height": 70.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "I00",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I11",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I10",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 70.0,
+        "y": 10.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I01",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 30.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 24.0,
+          "y": 29.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 24.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 54.0,
+          "y": 39.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 24.0,
+          "y": 49.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIsel1",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 60.0,
+          "y": 100.0
+        }
+      },
+      {
+        "id": "GUIsel1",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 60.0,
+          "y": 35.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 115.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 55.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 55.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#9",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 50.0
+          },
+          {
+            "x": 15.0,
+            "y": 10.0
+          },
+          {
+            "x": 85.0,
+            "y": 10.0
+          },
+          {
+            "x": 85.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#8",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 105.0
+          },
+          {
+            "x": 105.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 40.0
+          },
+          {
+            "x": 105.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 150.0
+          },
+          {
+            "x": 20.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I10"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#3",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 100.0
+          },
+          {
+            "x": 40.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I00"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#2",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 75.0
+          },
+          {
+            "x": 35.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "GUImux2",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "default"
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUImux2_4.json b/net.mograsim.logic.model.editor/components/GUImux2_4.json
new file mode 100644 (file)
index 0000000..f9648ee
--- /dev/null
@@ -0,0 +1,692 @@
+mograsim version: 0.1.3
+{
+  "width": 62.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "I00",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I11",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I10",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 62.0,
+        "y": 16.0
+      },
+      "name": "Y",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I01",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 19.0,
+          "y": 34.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 25.0,
+          "y": 45.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 140.0,
+          "y": 25.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
+        "pos": {
+          "x": 25.0,
+          "y": 180.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 25.0,
+          "y": 140.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 25.0,
+          "y": 85.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 40.0,
+          "y": 125.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 40.0,
+          "y": 30.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 100.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#36",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 50.0
+          },
+          {
+            "x": 15.0,
+            "y": 20.0
+          },
+          {
+            "x": 60.0,
+            "y": 20.0
+          },
+          {
+            "x": 60.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I00"
+        },
+        "name": "unnamedWire#19",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 60.0
+          },
+          {
+            "x": 15.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I10"
+        },
+        "name": "unnamedWire#21",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 155.0
+          },
+          {
+            "x": 15.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#22",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#27",
+        "path": [
+          {
+            "x": 80.0,
+            "y": 75.0
+          },
+          {
+            "x": 80.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#29",
+        "path": [
+          {
+            "x": 90.0,
+            "y": 95.0
+          },
+          {
+            "x": 90.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 140.0
+          },
+          {
+            "x": 85.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#30",
+        "path": [
+          {
+            "x": 95.0,
+            "y": 160.0
+          },
+          {
+            "x": 95.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "GUImux1_4",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler"
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/GUImux3.json b/net.mograsim.logic.model.editor/components/GUImux3.json
new file mode 100644 (file)
index 0000000..69181cd
--- /dev/null
@@ -0,0 +1,479 @@
+mograsim version: 0.1.3
+{
+  "width": 80.0,
+  "height": 120.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "I000",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 70.0
+      },
+      "name": "I011",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 100.0
+      },
+      "name": "I110",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 60.0
+      },
+      "name": "I010",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 90.0
+      },
+      "name": "I101",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 80.0
+      },
+      "name": "I100",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 110.0
+      },
+      "name": "I111",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 80.0,
+        "y": 10.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I001",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 20.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "S2",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 24.0,
+          "y": 94.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 19.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 35.0,
+          "y": 185.0
+        }
+      },
+      {
+        "id": "GUImux2",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 35.0,
+          "y": 85.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 125.0,
+          "y": 20.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I111"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I11"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 275.0
+          },
+          {
+            "x": 15.0,
+            "y": 245.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I10"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I110"
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 235.0
+          },
+          {
+            "x": 10.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 110.0,
+            "y": 95.0
+          },
+          {
+            "x": 110.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 115.0,
+            "y": 195.0
+          },
+          {
+            "x": 115.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 70.0,
+            "y": 25.0
+          },
+          {
+            "x": 70.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I10"
+        },
+        "name": "unnamedWire#9",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I01"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I001"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I000"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I00"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 100.0
+          },
+          {
+            "x": 10.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I11"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I011"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 145.0
+          },
+          {
+            "x": 15.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#4",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S1"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I101"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I01"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I00"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "I100"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 215.0
+          },
+          {
+            "x": 10.0,
+            "y": 200.0
+          }
+        ]
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "GUImux3",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler"
+}
\ No newline at end of file
index 31a01fb..c291980 100644 (file)
@@ -2998,7 +2998,7 @@ mograsim version: 0.1.3
             "c01.q",
             "c00.q"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             4,
             4,
             4,
index 05bfe9d..f676b3d 100644 (file)
@@ -3490,7 +3490,7 @@ mograsim version: 0.1.3
             "c01.q",
             "c00.q"
           ],
-          "vectorPartLengthes": [
+          "vectorPartWidths": [
             16,
             16,
             16,
diff --git a/net.mograsim.logic.model.editor/components/GUIsel1.json b/net.mograsim.logic.model.editor/components/GUIsel1.json
new file mode 100644 (file)
index 0000000..26a25cf
--- /dev/null
@@ -0,0 +1,208 @@
+mograsim version: 0.1.3
+{
+  "width": 35.0,
+  "height": 40.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "I2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "S2",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 35.0,
+          "y": 30.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#3",
+        "pos": {
+          "x": 60.0,
+          "y": 40.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 35.0,
+          "y": 55.0
+        },
+        "params": 1
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#9"
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#8"
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#7",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 87.5
+          },
+          {
+            "x": 15.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S2"
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 15.0,
+            "y": 37.5
+          },
+          {
+            "x": 15.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#0",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 12.5
+          },
+          {
+            "x": 25.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#5",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 62.5
+          },
+          {
+            "x": 25.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#10"
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "GUIsel1",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "default"
+}
\ No newline at end of file
index 503d854..02f1761 100644 (file)
@@ -549,8 +549,8 @@ mograsim version: 0.1.3
         "params": 1
       },
       {
-        "id": "GUIAm2901QReg",
-        "name": "GUIAm2901QReg#0",
+        "id": "GUIdff4",
+        "name": "GUIdff4#0",
         "pos": {
           "x": 90.0,
           "y": 2490.0
@@ -1538,7 +1538,7 @@ mograsim version: 0.1.3
           "pinName": ""
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "C"
         },
         "name": "unnamedWire#17",
@@ -2123,7 +2123,7 @@ mograsim version: 0.1.3
           "pinName": "Y2"
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "D2"
         },
         "name": "unnamedWire#87",
@@ -2135,7 +2135,7 @@ mograsim version: 0.1.3
           "pinName": "Y1"
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "D1"
         },
         "name": "unnamedWire#86",
@@ -2147,7 +2147,7 @@ mograsim version: 0.1.3
           "pinName": "Y4"
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "D4"
         },
         "name": "unnamedWire#89",
@@ -2159,7 +2159,7 @@ mograsim version: 0.1.3
           "pinName": "Y3"
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "D3"
         },
         "name": "unnamedWire#88",
@@ -2327,7 +2327,7 @@ mograsim version: 0.1.3
           "pinName": "QWE"
         },
         "pin2": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "WE"
         },
         "name": "unnamedWire#147",
@@ -3003,7 +3003,7 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "Q2"
         },
         "pin2": {
@@ -3015,7 +3015,7 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "Q1"
         },
         "pin2": {
@@ -3027,7 +3027,7 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "Q4"
         },
         "pin2": {
@@ -3039,7 +3039,7 @@ mograsim version: 0.1.3
       },
       {
         "pin1": {
-          "compName": "GUIAm2901QReg#0",
+          "compName": "GUIdff4#0",
           "pinName": "Q3"
         },
         "pin2": {
@@ -3406,7 +3406,7 @@ mograsim version: 0.1.3
       "qreg": {
         "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomponent.DelegatingSubcomponentHighLevelStateHandler",
         "params": {
-          "delegateTarget": "GUIAm2901QReg#0"
+          "delegateTarget": "GUIdff4#0"
         }
       },
       "regs": {
diff --git a/net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.model.editor/components/am2901/GUIAm2901QReg.json
deleted file mode 100644 (file)
index 4f3bc2d..0000000
+++ /dev/null
@@ -1,716 +0,0 @@
-mograsim version: 0.1.3
-{
-  "width": 35.0,
-  "height": 60.0,
-  "interfacePins": [
-    {
-      "location": {
-        "x": 0.0,
-        "y": 55.0
-      },
-      "name": "D4",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 35.0,
-        "y": 5.0
-      },
-      "name": "Q1",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 35.0,
-        "y": 15.0
-      },
-      "name": "Q2",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 35.0,
-        "y": 25.0
-      },
-      "name": "Q3",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 5.0
-      },
-      "name": "C",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 35.0,
-        "y": 35.0
-      },
-      "name": "Q4",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 25.0
-      },
-      "name": "D1",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 15.0
-      },
-      "name": "WE",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 35.0
-      },
-      "name": "D2",
-      "logicWidth": 1
-    },
-    {
-      "location": {
-        "x": 0.0,
-        "y": 45.0
-      },
-      "name": "D3",
-      "logicWidth": 1
-    }
-  ],
-  "submodel": {
-    "innerScale": 0.2,
-    "subComps": [
-      {
-        "id": "GUIdff",
-        "name": "GUIdff#1",
-        "pos": {
-          "x": 115.0,
-          "y": 70.0
-        }
-      },
-      {
-        "id": "GUIdff",
-        "name": "GUIdff#0",
-        "pos": {
-          "x": 115.0,
-          "y": 20.0
-        }
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#1",
-        "pos": {
-          "x": 104.0,
-          "y": 74.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#0",
-        "pos": {
-          "x": 104.0,
-          "y": 24.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#3",
-        "pos": {
-          "x": 169.0,
-          "y": 24.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#2",
-        "pos": {
-          "x": 104.0,
-          "y": 124.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#5",
-        "pos": {
-          "x": 159.0,
-          "y": 124.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#4",
-        "pos": {
-          "x": 164.0,
-          "y": 74.0
-        },
-        "params": 1
-      },
-      {
-        "id": "WireCrossPoint",
-        "name": "WireCrossPoint#6",
-        "pos": {
-          "x": 154.0,
-          "y": 174.0
-        },
-        "params": 1
-      },
-      {
-        "id": "GUImux1_4",
-        "name": "DeserializedSubmodelComponent#0",
-        "pos": {
-          "x": 55.0,
-          "y": 70.0
-        }
-      },
-      {
-        "id": "GUIdff",
-        "name": "GUIdff#3",
-        "pos": {
-          "x": 115.0,
-          "y": 170.0
-        }
-      },
-      {
-        "id": "GUIdff",
-        "name": "GUIdff#2",
-        "pos": {
-          "x": 115.0,
-          "y": 120.0
-        }
-      }
-    ],
-    "innerWires": [
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Q1"
-        },
-        "name": "unnamedWire#14",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUIdff#0",
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
-        },
-        "name": "unnamedWire#13",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#1",
-          "pinName": "Q"
-        },
-        "name": "unnamedWire#16",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "Q2"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
-        },
-        "name": "unnamedWire#15",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "GUIdff#2",
-          "pinName": "Q"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
-        },
-        "name": "unnamedWire#18",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "D4"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_4"
-        },
-        "name": "unnamedWire#17",
-        "path": [
-          {
-            "x": 15.0,
-            "y": 275.0
-          },
-          {
-            "x": 15.0,
-            "y": 155.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Q3"
-        },
-        "name": "unnamedWire#19",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#3",
-          "pinName": "Q"
-        },
-        "name": "unnamedWire#21",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "_submodelinterface",
-          "pinName": "Q4"
-        },
-        "name": "unnamedWire#20",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y4"
-        },
-        "pin2": {
-          "compName": "GUIdff#3",
-          "pinName": "D"
-        },
-        "name": "unnamedWire#23",
-        "path": [
-          {
-            "x": 95.0,
-            "y": 105.0
-          },
-          {
-            "x": 95.0,
-            "y": 185.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y3"
-        },
-        "pin2": {
-          "compName": "GUIdff#2",
-          "pinName": "D"
-        },
-        "name": "unnamedWire#22",
-        "path": [
-          {
-            "x": 100.0,
-            "y": 95.0
-          },
-          {
-            "x": 100.0,
-            "y": 135.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#4",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_2"
-        },
-        "name": "unnamedWire#25",
-        "path": [
-          {
-            "x": 165.0,
-            "y": 200.0
-          },
-          {
-            "x": 45.0,
-            "y": 200.0
-          },
-          {
-            "x": 45.0,
-            "y": 95.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#3",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_1"
-        },
-        "name": "unnamedWire#24",
-        "path": [
-          {
-            "x": 170.0,
-            "y": 195.0
-          },
-          {
-            "x": 50.0,
-            "y": 195.0
-          },
-          {
-            "x": 50.0,
-            "y": 85.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
-        },
-        "name": "unnamedWire#27",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#5",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_3"
-        },
-        "name": "unnamedWire#26",
-        "path": [
-          {
-            "x": 160.0,
-            "y": 205.0
-          },
-          {
-            "x": 40.0,
-            "y": 205.0
-          },
-          {
-            "x": 40.0,
-            "y": 105.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#6",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I0_4"
-        },
-        "name": "unnamedWire#28",
-        "path": [
-          {
-            "x": 155.0,
-            "y": 210.0
-          },
-          {
-            "x": 35.0,
-            "y": 210.0
-          },
-          {
-            "x": 35.0,
-            "y": 115.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "WE"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "S0"
-        },
-        "name": "unnamedWire#9",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#3",
-          "pinName": "C"
-        },
-        "name": "unnamedWire#8",
-        "path": [
-          {
-            "x": 105.0,
-            "y": 175.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#2",
-          "pinName": "C"
-        },
-        "name": "unnamedWire#7",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#2",
-          "pinName": ""
-        },
-        "name": "unnamedWire#6",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y1"
-        },
-        "pin2": {
-          "compName": "GUIdff#0",
-          "pinName": "D"
-        },
-        "name": "unnamedWire#1",
-        "path": [
-          {
-            "x": 100.0,
-            "y": 75.0
-          },
-          {
-            "x": 100.0,
-            "y": 35.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "C"
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "name": "unnamedWire#0",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#1",
-          "pinName": "C"
-        },
-        "name": "unnamedWire#5",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "D1"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_1"
-        },
-        "name": "unnamedWire#10",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "WireCrossPoint#1",
-          "pinName": ""
-        },
-        "name": "unnamedWire#4",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "WireCrossPoint#0",
-          "pinName": ""
-        },
-        "pin2": {
-          "compName": "GUIdff#0",
-          "pinName": "C"
-        },
-        "name": "unnamedWire#3",
-        "path": []
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "D3"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_3"
-        },
-        "name": "unnamedWire#12",
-        "path": [
-          {
-            "x": 10.0,
-            "y": 225.0
-          },
-          {
-            "x": 10.0,
-            "y": 145.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "_submodelinterface",
-          "pinName": "D2"
-        },
-        "pin2": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "I1_2"
-        },
-        "name": "unnamedWire#11",
-        "path": [
-          {
-            "x": 5.0,
-            "y": 175.0
-          },
-          {
-            "x": 5.0,
-            "y": 135.0
-          }
-        ]
-      },
-      {
-        "pin1": {
-          "compName": "DeserializedSubmodelComponent#0",
-          "pinName": "Y2"
-        },
-        "pin2": {
-          "compName": "GUIdff#1",
-          "pinName": "D"
-        },
-        "name": "unnamedWire#2",
-        "path": []
-      }
-    ]
-  },
-  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
-  "symbolRendererParams": {
-    "centerText": "GUIAm2901QReg",
-    "centerTextHeight": 5.0,
-    "horizontalComponentCenter": 17.5,
-    "pinLabelHeight": 3.5,
-    "pinLabelMargin": 0.5
-  },
-  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
-  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
-  "highLevelStateHandlerParams": {
-    "subcomponentHighLevelStates": {},
-    "atomicHighLevelStates": {
-      "q1": {
-        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
-        "params": {
-          "delegateTarget": "GUIdff#0",
-          "subStateID": "q"
-        }
-      },
-      "q2": {
-        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
-        "params": {
-          "delegateTarget": "GUIdff#1",
-          "subStateID": "q"
-        }
-      },
-      "q": {
-        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.BitVectorSplittingAtomicHighLevelStateHandler",
-        "params": {
-          "vectorPartTargets": [
-            "q1",
-            "q2",
-            "q3",
-            "q4"
-          ],
-          "vectorPartLengthes": [
-            1,
-            1,
-            1,
-            1
-          ]
-        }
-      },
-      "q3": {
-        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
-        "params": {
-          "delegateTarget": "GUIdff#2",
-          "subStateID": "q"
-        }
-      },
-      "q4": {
-        "id": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic.DelegatingAtomicHighLevelStateHandler",
-        "params": {
-          "delegateTarget": "GUIdff#3",
-          "subStateID": "q"
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2904/GUIAm2904.json b/net.mograsim.logic.model.editor/components/am2904/GUIAm2904.json
new file mode 100644 (file)
index 0000000..33bddda
--- /dev/null
@@ -0,0 +1,2450 @@
+mograsim version: 0.1.3
+{
+  "width": 120.0,
+  "height": 94.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "IOVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 30.0
+      },
+      "name": "_CEM",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 61.0
+      },
+      "name": "I",
+      "logicWidth": 13
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 40.0
+      },
+      "name": "_EN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -14.600000000000001,
+        "y": -0.6000000000000001
+      },
+      "name": "QIOn_out",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 17.0
+      },
+      "name": "YC",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -24.6,
+        "y": 14.4
+      },
+      "name": "SIOn_in",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -24.6,
+        "y": 24.400000000000002
+      },
+      "name": "C0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -34.6,
+        "y": 29.400000000000002
+      },
+      "name": "QIO0_in",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 36.0
+      },
+      "name": "_EZ",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -14.600000000000001,
+        "y": 14.4
+      },
+      "name": "Cx",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 21.0
+      },
+      "name": "YN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -24.6,
+        "y": 19.400000000000002
+      },
+      "name": "SIOn_out",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "IC",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 42.0
+      },
+      "name": "_EOVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 11.0
+      },
+      "name": "YZ",
+      "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": -24.6,
+        "y": 44.400000000000006
+      },
+      "name": "SIO0_in",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -24.6,
+        "y": 49.400000000000006
+      },
+      "name": "SIO0_out",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -14.600000000000001,
+        "y": 44.400000000000006
+      },
+      "name": "QIO0_out",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 10.0
+      },
+      "name": "IZ",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 60.0
+      },
+      "name": "CT",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 33.0
+      },
+      "name": "_CEmu",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": -24.6,
+        "y": 54.400000000000006
+      },
+      "name": "QIOn_in",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 120.0,
+        "y": 25.0
+      },
+      "name": "YOVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 38.0
+      },
+      "name": "_EC",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#14",
+        "pos": {
+          "x": 520.0,
+          "y": 190.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#13",
+        "pos": {
+          "x": 330.0,
+          "y": 125.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#16",
+        "pos": {
+          "x": 255.0,
+          "y": 255.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#15",
+        "pos": {
+          "x": 255.0,
+          "y": 265.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 180.0,
+          "y": 135.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 165.0,
+          "y": 150.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 335.0,
+          "y": 270.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 295.0,
+          "y": 120.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 530.0,
+          "y": 100.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 150.0,
+          "y": 160.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 215.0,
+          "y": 180.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
+        "pos": {
+          "x": 530.0,
+          "y": 170.0
+        },
+        "params": {
+          "logicWidth": 4,
+          "orientation": "RIGHT"
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 120.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 215.0,
+          "y": 200.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 215.0,
+          "y": 160.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIAm2904muSR",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 270.0,
+          "y": 250.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#10",
+        "pos": {
+          "x": 195.0,
+          "y": 55.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIAm2904MSR",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 225.0,
+          "y": 95.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#12",
+        "pos": {
+          "x": 195.0,
+          "y": 35.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#3",
+        "pos": {
+          "x": 470.0,
+          "y": 160.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#11",
+        "pos": {
+          "x": 195.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 370.0,
+          "y": 130.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
+        "pos": {
+          "x": 415.0,
+          "y": 210.0
+        }
+      },
+      {
+        "id": "GUInot4",
+        "name": "DeserializedSubmodelComponent#4",
+        "pos": {
+          "x": 135.0,
+          "y": 40.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#3",
+        "pos": {
+          "x": 510.0,
+          "y": 165.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUImux3",
+        "name": "DeserializedSubmodelComponent#7",
+        "pos": {
+          "x": 300.0,
+          "y": 310.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#2",
+        "pos": {
+          "x": 15.0,
+          "y": 65.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIAm2904TestLogic",
+        "name": "DeserializedSubmodelComponent#6",
+        "pos": {
+          "x": 225.0,
+          "y": 340.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#1",
+        "pos": {
+          "x": 25.0,
+          "y": 305.0
+        },
+        "params": 5
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#9",
+        "pos": {
+          "x": 480.0,
+          "y": 305.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 25.0,
+          "y": 245.0
+        },
+        "params": 6
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#8",
+        "pos": {
+          "x": 540.0,
+          "y": 295.0
+        }
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#10",
+        "pos": {
+          "x": 485.0,
+          "y": 355.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#10",
+        "pos": {
+          "x": 340.0,
+          "y": 120.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#9",
+        "pos": {
+          "x": 205.0,
+          "y": 10.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#8",
+        "pos": {
+          "x": 205.0,
+          "y": 30.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#5",
+        "pos": {
+          "x": 225.0,
+          "y": 175.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#4",
+        "pos": {
+          "x": 225.0,
+          "y": 155.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#7",
+        "pos": {
+          "x": 205.0,
+          "y": 50.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#6",
+        "pos": {
+          "x": 205.0,
+          "y": 70.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 130.0,
+          "y": 5.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 190.0,
+          "y": 145.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#3",
+        "pos": {
+          "x": 225.0,
+          "y": 215.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 225.0,
+          "y": 195.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#4",
+        "pos": {
+          "x": 395.0,
+          "y": 225.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#3",
+        "pos": {
+          "x": 450.0,
+          "y": 175.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 395.0,
+          "y": 195.0
+        },
+        "params": 2
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 555.0,
+          "y": 80.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#8",
+        "pos": {
+          "x": 445.0,
+          "y": 370.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#7",
+        "pos": {
+          "x": 445.0,
+          "y": 330.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#6",
+        "pos": {
+          "x": 285.0,
+          "y": 320.0
+        },
+        "params": 3
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#5",
+        "pos": {
+          "x": 395.0,
+          "y": 265.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 10.0,
+          "y": 245.0
+        },
+        "params": 13
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904RegCTInstrDecode",
+        "name": "GUIAm2904RegCTInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 230.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904ShiftInstrDecode",
+        "name": "GUIAm2904ShiftInstrDecode#0",
+        "pos": {
+          "x": 50.0,
+          "y": 360.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#36",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_CEmu"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#4",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#37",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#39",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#110",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#111",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y111"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I111"
+        },
+        "name": "unnamedWire#114",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I110"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y110"
+        },
+        "name": "unnamedWire#115",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
+        },
+        "name": "unnamedWire#112",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#113",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y011"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I011"
+        },
+        "name": "unnamedWire#118",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y010"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I010"
+        },
+        "name": "unnamedWire#119",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#41",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y101"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I101"
+        },
+        "name": "unnamedWire#116",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#40",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I100"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y100"
+        },
+        "name": "unnamedWire#117",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EOVR"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#42",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#45",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EN"
+        },
+        "name": "unnamedWire#44",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#4",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEZ"
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#4",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "YZ"
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#100",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#103",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#4",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#104",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#101",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#102",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "YC"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#107",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#5",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#108",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "YOVR"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#52",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#105",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "YN"
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#4",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#106",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#54",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#53",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#56",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#5",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#109",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#55",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O10"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I4"
+        },
+        "name": "unnamedWire#14",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#1",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O9"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "O"
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 395.0
+          },
+          {
+            "x": 40.0,
+            "y": 325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#15",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 100.0
+          },
+          {
+            "x": 5.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IOVR"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 10.0,
+            "y": 125.0
+          },
+          {
+            "x": 10.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IC"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_CINV"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "CINV"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "IZ"
+        },
+        "pin2": {
+          "compName": "GUIMerger#2",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 50.0
+          },
+          {
+            "x": 5.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#2",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "mu"
+        },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#30",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904ShiftInstrDecode#0",
+          "pinName": "MC_EN"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "COVD_EN"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "MSR_MUX"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "MUX"
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#79",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#10",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "name": "unnamedWire#81",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#10",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#80",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#10",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#83",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_OEY"
+        },
+        "name": "unnamedWire#82",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#85",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
+        },
+        "name": "unnamedWire#84",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#87",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#86",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUIMerger#3",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#89",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#88",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O5"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O4"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I4"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#3",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#90",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#3",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#92",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUIMerger#3",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#91",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_MUX"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "MUX"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "Y_MUX"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#94",
+        "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": "GUIMerger#3",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "name": "unnamedWire#93",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#96",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#95",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O6"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#98",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#97",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O8"
+        },
+        "pin2": {
+          "compName": "GUIMerger#1",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#12",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#1",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O7"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_OVRRET"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "OVRRET"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#99",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEN"
+        },
+        "name": "unnamedWire#58",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CEM"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#57",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "muSR_WEOVR"
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#59",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#132",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#7",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#133",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_INV"
+        },
+        "name": "unnamedWire#130",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#131",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "M"
+        },
+        "name": "unnamedWire#136",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#8",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#137",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#7",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#134",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#8",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#10",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#135",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#7",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#6",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#60",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#9",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#63",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "OEN"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#138",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#8",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#62",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#65",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "name": "unnamedWire#64",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EN"
+        },
+        "pin2": {
+          "compName": "GUINandGate#7",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#67",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#6",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EOVR"
+        },
+        "name": "unnamedWire#66",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#9",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#69",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "_EC"
+        },
+        "name": "unnamedWire#68",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y000"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I000"
+        },
+        "name": "unnamedWire#121",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "CT"
+        },
+        "name": "unnamedWire#122",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I001"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y001"
+        },
+        "name": "unnamedWire#120",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#125",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#6",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#126",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#70",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#123",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_MUX"
+        },
+        "name": "unnamedWire#124",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#8",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#72",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#129",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "GUINandGate#9",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#71",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "GUINandGate#6",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#74",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#6",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S2"
+        },
+        "name": "unnamedWire#127",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "GUINandGate#7",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#73",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2904RegCTInstrDecode#0",
+          "pinName": "CT_EXP"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#9",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#128",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A2"
+        },
+        "name": "unnamedWire#76",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#75",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A4"
+        },
+        "name": "unnamedWire#78",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
+        },
+        "name": "unnamedWire#77",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "Am2904",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2904/GUIAm2904MSR.json b/net.mograsim.logic.model.editor/components/am2904/GUIAm2904MSR.json
new file mode 100644 (file)
index 0000000..3296f39
--- /dev/null
@@ -0,0 +1,1895 @@
+mograsim version: 0.1.3
+{
+  "width": 45.0,
+  "height": 46.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 4.0,
+        "y": 46.0
+      },
+      "name": "MUX",
+      "logicWidth": 3
+    },
+    {
+      "location": {
+        "x": 45.0,
+        "y": 19.0
+      },
+      "name": "Q",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 27.5,
+        "y": 46.0
+      },
+      "name": "COVD_EN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 14.0,
+        "y": 46.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 5.5,
+        "y": 0.0
+      },
+      "name": "_EZ",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 37.5,
+        "y": 46.0
+      },
+      "name": "COVD_V",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "mu",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 18.0
+      },
+      "name": "Y",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 31.0
+      },
+      "name": "I",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 25.5,
+        "y": 0.0
+      },
+      "name": "_EN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 15.5,
+        "y": 0.0
+      },
+      "name": "_EC",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.5,
+        "y": 0.2
+      },
+      "name": "_EOVR",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.1,
+    "subComps": [
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#14",
+        "pos": {
+          "x": 89.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#13",
+        "pos": {
+          "x": 194.0,
+          "y": 234.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 325.0,
+          "y": 90.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#16",
+        "pos": {
+          "x": 319.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#15",
+        "pos": {
+          "x": 319.0,
+          "y": 294.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#3",
+        "pos": {
+          "x": 5.0,
+          "y": 295.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 45.0,
+          "y": 425.0
+        },
+        "params": 3
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 5.0,
+          "y": 165.0
+        },
+        "params": 4
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 414.0,
+          "y": 174.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 29.0,
+          "y": 284.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 5.0,
+          "y": 35.0
+        },
+        "params": 4
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 424.0,
+          "y": 194.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 419.0,
+          "y": 184.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 84.0,
+          "y": 344.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 429.0,
+          "y": 204.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 29.0,
+          "y": 254.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 94.0,
+          "y": 364.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 49.0,
+          "y": 114.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 74.0,
+          "y": 314.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",
+        "pos": {
+          "x": 89.0,
+          "y": 84.0
+        },
+        "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",
+        "pos": {
+          "x": 19.0,
+          "y": 294.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 150.0,
+          "y": 280.0
+        }
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#11",
+        "pos": {
+          "x": 89.0,
+          "y": 94.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#5",
+        "pos": {
+          "x": 200.0,
+          "y": 230.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#4",
+        "pos": {
+          "x": 110.0,
+          "y": 60.0
+        }
+      },
+      {
+        "id": "GUImux1",
+        "name": "DeserializedSubmodelComponent#7",
+        "pos": {
+          "x": 325.0,
+          "y": 290.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#6",
+        "pos": {
+          "x": 250.0,
+          "y": 180.0
+        }
+      },
+      {
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 435.0,
+          "y": 175.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUIand",
+        "name": "DeserializedSubmodelComponent#8",
+        "pos": {
+          "x": 380.0,
+          "y": 85.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A3"
+        },
+        "name": "unnamedWire#36",
+        "path": [
+          {
+            "x": 425.0,
+            "y": 390.0
+          },
+          {
+            "x": 90.0,
+            "y": 390.0
+          },
+          {
+            "x": 90.0,
+            "y": 355.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#35",
+        "path": [
+          {
+            "x": 420.0,
+            "y": 385.0
+          },
+          {
+            "x": 85.0,
+            "y": 385.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#79",
+        "path": [
+          {
+            "x": 205.0,
+            "y": 85.0
+          },
+          {
+            "x": 205.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#37",
+        "path": [
+          {
+            "x": 430.0,
+            "y": 395.0
+          },
+          {
+            "x": 95.0,
+            "y": 395.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#39",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#81",
+        "path": [
+          {
+            "x": 215.0,
+            "y": 65.0
+          },
+          {
+            "x": 215.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#80",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 205.0
+          },
+          {
+            "x": 210.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "name": "unnamedWire#83",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#82",
+        "path": [
+          {
+            "x": 245.0,
+            "y": 445.0
+          },
+          {
+            "x": 245.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#41",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#85",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#40",
+        "path": [
+          {
+            "x": 95.0,
+            "y": 305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "COVD_EN"
+        },
+        "name": "unnamedWire#84",
+        "path": [
+          {
+            "x": 275.0,
+            "y": 295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#87",
+        "path": [
+          {
+            "x": 305.0,
+            "y": 195.0
+          },
+          {
+            "x": 305.0,
+            "y": 305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 230.0
+          },
+          {
+            "x": 50.0,
+            "y": 230.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "COVD_V"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#7",
+          "pinName": "I1"
+        },
+        "name": "unnamedWire#86",
+        "path": [
+          {
+            "x": 375.0,
+            "y": 325.0
+          },
+          {
+            "x": 320.0,
+            "y": 325.0
+          },
+          {
+            "x": 320.0,
+            "y": 315.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "name": "unnamedWire#45",
+        "path": [
+          {
+            "x": 50.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#89",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#44",
+        "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"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#15",
+          "pinName": ""
+        },
+        "name": "unnamedWire#90",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "name": "unnamedWire#92",
+        "path": [
+          {
+            "x": 320.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#16",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#91",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE4"
+        },
+        "name": "unnamedWire#1",
+        "path": [
+          {
+            "x": 355.0,
+            "y": 30.0
+          },
+          {
+            "x": 355.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "C"
+        },
+        "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
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "name": "unnamedWire#52",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#11",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#14",
+          "pinName": ""
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "mu"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#54",
+        "path": [
+          {
+            "x": 90.0,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE1"
+        },
+        "name": "unnamedWire#4",
+        "path": [
+          {
+            "x": 55.0,
+            "y": 15.0
+          },
+          {
+            "x": 370.0,
+            "y": 15.0
+          },
+          {
+            "x": 370.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#53",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 35.0
+          },
+          {
+            "x": 35.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#56",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#8",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#3",
+        "path": [
+          {
+            "x": 155.0,
+            "y": 20.0
+          },
+          {
+            "x": 365.0,
+            "y": 20.0
+          },
+          {
+            "x": 365.0,
+            "y": 90.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE3"
+        },
+        "name": "unnamedWire#2",
+        "path": [
+          {
+            "x": 255.0,
+            "y": 25.0
+          },
+          {
+            "x": 360.0,
+            "y": 25.0
+          },
+          {
+            "x": 360.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#11",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#55",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 55.0
+          },
+          {
+            "x": 25.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#58",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 135.0
+          },
+          {
+            "x": 30.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#57",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 155.0
+          },
+          {
+            "x": 20.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#12",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_1"
+        },
+        "name": "unnamedWire#59",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 245.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#18",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#61",
+        "path": [
+          {
+            "x": 75.0,
+            "y": 265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#60",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#63",
+        "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",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#65",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "MUX"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 435.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#64",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "name": "unnamedWire#67",
+        "path": [
+          {
+            "x": 195.0,
+            "y": 435.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#3",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#23",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 305.0
+          },
+          {
+            "x": 25.0,
+            "y": 265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUISplitter#3",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#66",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#69",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 235.0
+          },
+          {
+            "x": 105.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#24",
+        "path": [
+          {
+            "x": 60.0,
+            "y": 425.0
+          },
+          {
+            "x": 60.0,
+            "y": 415.0
+          },
+          {
+            "x": 30.0,
+            "y": 415.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#13",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#68",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q4"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "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#8",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE2"
+        },
+        "name": "unnamedWire#72",
+        "path": [
+          {
+            "x": 420.0,
+            "y": 90.0
+          },
+          {
+            "x": 420.0,
+            "y": 110.0
+          },
+          {
+            "x": 365.0,
+            "y": 110.0
+          },
+          {
+            "x": 365.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#71",
+        "path": [
+          {
+            "x": 300.0,
+            "y": 245.0
+          },
+          {
+            "x": 300.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#30",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#74",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#73",
+        "path": [
+          {
+            "x": 310.0,
+            "y": 225.0
+          },
+          {
+            "x": 310.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#32",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#76",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y2"
+        },
+        "name": "unnamedWire#31",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_3"
+        },
+        "name": "unnamedWire#75",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "A1"
+        },
+        "name": "unnamedWire#34",
+        "path": [
+          {
+            "x": 415.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 380.0
+          },
+          {
+            "x": 80.0,
+            "y": 335.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#4",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#78",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 225.0
+          },
+          {
+            "x": 200.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#3",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#5",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#6",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#77",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "MSR",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "standard",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2904/GUIAm2904TestLogic.json b/net.mograsim.logic.model.editor/components/am2904/GUIAm2904TestLogic.json
new file mode 100644 (file)
index 0000000..26928e5
--- /dev/null
@@ -0,0 +1,765 @@
+mograsim version: 0.1.3
+{
+  "width": 60.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 60.0,
+        "y": 60.0
+      },
+      "name": "Y101",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 20.0
+      },
+      "name": "Y001",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 50.0
+      },
+      "name": "Y100",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 80.0
+      },
+      "name": "Y111",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 40.0
+      },
+      "name": "Y011",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 10.0
+      },
+      "name": "Y000",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 70.0
+      },
+      "name": "Y110",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 30.0
+      },
+      "name": "Y010",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 45.0,
+          "y": 50.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 85.0,
+          "y": 20.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#3",
+        "pos": {
+          "x": 45.0,
+          "y": 105.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 120.0,
+          "y": 15.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 34.0,
+          "y": 99.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 29.0,
+          "y": 129.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 5.0,
+          "y": 110.0
+        },
+        "params": 4
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 79.0,
+          "y": 24.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 79.0,
+          "y": 34.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 24.0,
+          "y": 119.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 19.0,
+          "y": 74.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 74.0,
+          "y": 59.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 39.0,
+          "y": 64.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 24.0,
+          "y": 149.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 74.0,
+          "y": 119.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#5",
+        "pos": {
+          "x": 80.0,
+          "y": 165.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#10",
+        "pos": {
+          "x": 39.0,
+          "y": 109.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 40.0,
+          "y": 20.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#4",
+        "pos": {
+          "x": 80.0,
+          "y": 115.0
+        },
+        "params": 1
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 115.0,
+            "y": 60.0
+          },
+          {
+            "x": 115.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#13",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y000"
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y001"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 80.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#18",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#17",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 110.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#21",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 110.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y011"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#4",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y100"
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y010"
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#4",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#24",
+        "path": [
+          {
+            "x": 70.0,
+            "y": 115.0
+          },
+          {
+            "x": 70.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#3",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#4",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Y110"
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Y101"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#28",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#5",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#30",
+        "path": [
+          {
+            "x": 75.0,
+            "y": 170.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 110.0,
+            "y": 20.0
+          },
+          {
+            "x": 110.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#5",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#32",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#4",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#3",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#10",
+          "pinName": ""
+        },
+        "name": "unnamedWire#31",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#3",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "name": "unnamedWire#2",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "Y111"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#33",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 200.0
+          }
+        ]
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "Test\nlogic",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2904/GUIAm2904muSR.json b/net.mograsim.logic.model.editor/components/am2904/GUIAm2904muSR.json
new file mode 100644 (file)
index 0000000..fa3ed35
--- /dev/null
@@ -0,0 +1,1081 @@
+mograsim version: 0.1.3
+{
+  "width": 45.0,
+  "height": 46.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 4.0,
+        "y": 46.0
+      },
+      "name": "MUX",
+      "logicWidth": 2
+    },
+    {
+      "location": {
+        "x": 45.0,
+        "y": 19.0
+      },
+      "name": "Q",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 27.5,
+        "y": 46.0
+      },
+      "name": "CINV",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 14.0,
+        "y": 46.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 5.5,
+        "y": 0.0
+      },
+      "name": "_EZ",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 37.5,
+        "y": 46.0
+      },
+      "name": "OVRRET",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 31.0
+      },
+      "name": "I",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 25.5,
+        "y": 0.0
+      },
+      "name": "_EN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 15.5,
+        "y": 0.0
+      },
+      "name": "_EC",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 13.5
+      },
+      "name": "M",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 35.5,
+        "y": 0.0
+      },
+      "name": "_EOVR",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.1,
+    "subComps": [
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 215.0,
+          "y": 255.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 245.0,
+          "y": 245.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUINandGate",
+        "name": "GUINandGate#2",
+        "pos": {
+          "x": 215.0,
+          "y": 235.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIMerger",
+        "name": "GUIMerger#0",
+        "pos": {
+          "x": 435.0,
+          "y": 175.0
+        },
+        "params": 4
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#2",
+        "pos": {
+          "x": 45.0,
+          "y": 430.0
+        },
+        "params": 2
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#1",
+        "pos": {
+          "x": 5.0,
+          "y": 295.0
+        },
+        "params": 4
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 89.0,
+          "y": 224.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 89.0,
+          "y": 234.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUISplitter",
+        "name": "GUISplitter#0",
+        "pos": {
+          "x": 5.0,
+          "y": 120.0
+        },
+        "params": 4
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 429.0,
+          "y": 204.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 89.0,
+          "y": 214.0
+        },
+        "params": 1
+      },
+      {
+        "id": "WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 209.0,
+          "y": 244.0
+        },
+        "params": 1
+      },
+      {
+        "id": "GUIdff4_finewe",
+        "name": "GUIdff4_finewe#0",
+        "pos": {
+          "x": 375.0,
+          "y": 170.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#1",
+        "pos": {
+          "x": 100.0,
+          "y": 190.0
+        }
+      },
+      {
+        "id": "GUImux1_4",
+        "name": "DeserializedSubmodelComponent#0",
+        "pos": {
+          "x": 45.0,
+          "y": 240.0
+        }
+      },
+      {
+        "id": "GUIxor",
+        "name": "DeserializedSubmodelComponent#2",
+        "pos": {
+          "x": 215.0,
+          "y": 200.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "CINV"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#36",
+        "path": [
+          {
+            "x": 275.0,
+            "y": 390.0
+          },
+          {
+            "x": 190.0,
+            "y": 390.0
+          },
+          {
+            "x": 190.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#38",
+        "path": [
+          {
+            "x": 140.0,
+            "y": 325.0
+          },
+          {
+            "x": 345.0,
+            "y": 325.0
+          },
+          {
+            "x": 345.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE1"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_EZ"
+        },
+        "name": "unnamedWire#37",
+        "path": [
+          {
+            "x": 370.0,
+            "y": 185.0
+          },
+          {
+            "x": 370.0,
+            "y": 5.0
+          },
+          {
+            "x": 55.0,
+            "y": 5.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EOVR"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE4"
+        },
+        "name": "unnamedWire#39",
+        "path": [
+          {
+            "x": 355.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_EC"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE2"
+        },
+        "name": "unnamedWire#41",
+        "path": [
+          {
+            "x": 155.0,
+            "y": 10.0
+          },
+          {
+            "x": 365.0,
+            "y": 10.0
+          },
+          {
+            "x": 365.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "_WE3"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_EN"
+        },
+        "name": "unnamedWire#40",
+        "path": [
+          {
+            "x": 360.0,
+            "y": 205.0
+          },
+          {
+            "x": 360.0,
+            "y": 15.0
+          },
+          {
+            "x": 255.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D2"
+        },
+        "name": "unnamedWire#43",
+        "path": [
+          {
+            "x": 310.0,
+            "y": 205.0
+          },
+          {
+            "x": 310.0,
+            "y": 235.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y1"
+        },
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 315.0,
+            "y": 225.0
+          },
+          {
+            "x": 315.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y4"
+        },
+        "name": "unnamedWire#45",
+        "path": [
+          {
+            "x": 160.0,
+            "y": 245.0
+          },
+          {
+            "x": 160.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#44",
+        "path": [
+          {
+            "x": 305.0,
+            "y": 245.0
+          },
+          {
+            "x": 305.0,
+            "y": 225.0
+          },
+          {
+            "x": 170.0,
+            "y": 225.0
+          },
+          {
+            "x": 170.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#47",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 240.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "D4"
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#2",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#48",
+        "path": [
+          {
+            "x": 210.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#1",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q2"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I0"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "M"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#1",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#10",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIMerger#0",
+          "pinName": "O"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Q"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O2"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 25.0,
+            "y": 275.0
+          },
+          {
+            "x": 25.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff4_finewe#0",
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I2"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 20.0,
+            "y": 150.0
+          },
+          {
+            "x": 20.0,
+            "y": 285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compName": "GUISplitter#0",
+          "pinName": "O0"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 255.0
+          },
+          {
+            "x": 35.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#0",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 30.0,
+            "y": 130.0
+          },
+          {
+            "x": 30.0,
+            "y": 265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": [
+          {
+            "x": 90.0,
+            "y": 430.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "MUX"
+        },
+        "pin2": {
+          "compName": "GUISplitter#2",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 435.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y3"
+        },
+        "name": "unnamedWire#18",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_4"
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_2"
+        },
+        "name": "unnamedWire#19",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#21",
+        "path": [
+          {
+            "x": 90.0,
+            "y": 205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I1_1"
+        },
+        "name": "unnamedWire#20",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_2"
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#25",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#0",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#27",
+        "path": [
+          {
+            "x": 40.0,
+            "y": 235.0
+          },
+          {
+            "x": 40.0,
+            "y": 245.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "I0_4"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIMerger#0",
+          "pinName": "I3"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUISplitter#2",
+          "pinName": "O1"
+        },
+        "pin2": {
+          "compName": "DeserializedSubmodelComponent#1",
+          "pinName": "S0"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 440.0
+          },
+          {
+            "x": 85.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#2",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#30",
+        "path": [
+          {
+            "x": 240.0,
+            "y": 245.0
+          },
+          {
+            "x": 240.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "OVRRET"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#32",
+        "path": [
+          {
+            "x": 375.0,
+            "y": 360.0
+          },
+          {
+            "x": 205.0,
+            "y": 360.0
+          },
+          {
+            "x": 205.0,
+            "y": 260.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#31",
+        "path": [
+          {
+            "x": 240.0,
+            "y": 260.0
+          },
+          {
+            "x": 240.0,
+            "y": 265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#34",
+        "path": [
+          {
+            "x": 430.0,
+            "y": 280.0
+          },
+          {
+            "x": 210.0,
+            "y": 280.0
+          },
+          {
+            "x": 210.0,
+            "y": 270.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#33",
+        "path": []
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "simpleRectangularLike",
+  "symbolRendererParams": {
+    "centerText": "muSR",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "default",
+  "highLevelStateHandlerSnippetID": "standard",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2910/GUIAm2910.json b/net.mograsim.logic.model.editor/components/am2910/GUIAm2910.json
new file mode 100644 (file)
index 0000000..647afc3
--- /dev/null
@@ -0,0 +1,1138 @@
+mograsim version: 0.1.3
+{
+  "width": 72.0,
+  "height": 67.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 60.0,
+        "y": 0.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 36.0,
+        "y": 0.0
+      },
+      "name": "D",
+      "logicWidth": 12
+    },
+    {
+      "location": {
+        "x": 72.0,
+        "y": 40.0
+      },
+      "name": "CI",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 6.0
+      },
+      "name": "_RLD",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 19.0,
+        "y": 67.0
+      },
+      "name": "_MAP",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 44.0
+      },
+      "name": "_CCEN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 49.0,
+        "y": 67.0
+      },
+      "name": "_OE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 72.0,
+        "y": 14.0
+      },
+      "name": "_FULL",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 38.0,
+        "y": 67.0
+      },
+      "name": "Y",
+      "logicWidth": 12
+    },
+    {
+      "location": {
+        "x": 13.0,
+        "y": 67.0
+      },
+      "name": "_PL",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 25.0,
+        "y": 67.0
+      },
+      "name": "_VECT",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 38.0
+      },
+      "name": "_CC",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 10.0,
+          "y": 210.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIram5_12",
+        "name": "GUIram5_12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 100.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 40.0,
+          "y": 185.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIdff12",
+        "name": "GUIdff12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 160.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIinc12",
+        "name": "GUIinc12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 190.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#3",
+        "pos": {
+          "x": 265.0,
+          "y": 150.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 294.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 324.0,
+          "y": 149.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 179.0,
+          "y": 89.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 189.0,
+          "y": 274.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 4.0,
+          "y": 219.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 179.0,
+          "y": 14.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 299.0,
+          "y": 44.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUITriStateBuffer",
+        "name": "GUITriStateBuffer#0",
+        "pos": {
+          "x": 180.0,
+          "y": 290.0
+        },
+        "params": {
+          "logicWidth": 12,
+          "orientation": "DOWN_ALT"
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 299.0,
+          "y": 79.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 299.0,
+          "y": 114.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 299.0,
+          "y": 169.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUInor12",
+        "name": "GUInor12#0",
+        "pos": {
+          "x": 190.0,
+          "y": 80.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#0",
+        "pos": {
+          "x": 160.0,
+          "y": 95.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910InstrPLA",
+        "name": "GUIAm2910InstrPLA#0",
+        "pos": {
+          "x": 80.0,
+          "y": 155.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910SP",
+        "name": "GUIAm2910SP#0",
+        "pos": {
+          "x": 305.0,
+          "y": 55.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#1",
+        "pos": {
+          "x": 260.0,
+          "y": 115.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#2",
+        "pos": {
+          "x": 345.0,
+          "y": 180.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIsel4_12",
+        "name": "GUIsel4_12#0",
+        "pos": {
+          "x": 150.0,
+          "y": 175.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910RegCntr",
+        "name": "GUIAm2910RegCntr#0",
+        "pos": {
+          "x": 160.0,
+          "y": 25.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#36",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#37",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#39",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "CI"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "CI"
+        },
+        "name": "unnamedWire#41",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#40",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_MAP"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_MAP"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_PL"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_PL"
+        },
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 290.0
+          },
+          {
+            "x": 65.0,
+            "y": 290.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#45",
+        "path": [
+          {
+            "x": 70.0,
+            "y": 250.0
+          },
+          {
+            "x": 70.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_VECT"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_VECT"
+        },
+        "name": "unnamedWire#44",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 290.0
+          },
+          {
+            "x": 125.0,
+            "y": 290.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YR"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SB"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YD"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SA"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "OUT"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#52",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUInor12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "R\u003d0"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 230.0,
+            "y": 90.0
+          },
+          {
+            "x": 230.0,
+            "y": 120.0
+          },
+          {
+            "x": 95.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "EN"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_OE"
+        },
+        "name": "unnamedWire#53",
+        "path": [
+          {
+            "x": 245.0,
+            "y": 300.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YmuPC"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SD"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "RDEC"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "DEC"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 120.0,
+            "y": 170.0
+          },
+          {
+            "x": 120.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YF"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SC"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "RWE"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "WE"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 115.0,
+            "y": 160.0
+          },
+          {
+            "x": 115.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "STKI1"
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "STKI1"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 290.0,
+            "y": 230.0
+          },
+          {
+            "x": 290.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "STKI0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 220.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "STKI0"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIinc12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 325.0,
+            "y": 275.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#19",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 220.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUInor12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#25",
+        "path": [
+          {
+            "x": 145.0,
+            "y": 15.0
+          },
+          {
+            "x": 145.0,
+            "y": 150.0
+          },
+          {
+            "x": 160.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUITriStateBuffer#0",
+          "pinName": "IN"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_RLD"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "_RLD"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "PASS"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 65.0,
+            "y": 195.0
+          },
+          {
+            "x": 65.0,
+            "y": 160.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CCEN"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#30",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#32",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#31",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "_FULL"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_FULL"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#33",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 220.0
+          },
+          {
+            "x": 35.0,
+            "y": 200.0
+          }
+        ]
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "Am2910",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.model.editor/components/am2910/GUIAm2910_old.json b/net.mograsim.logic.model.editor/components/am2910/GUIAm2910_old.json
new file mode 100644 (file)
index 0000000..ae71c6d
--- /dev/null
@@ -0,0 +1,1089 @@
+mograsim version: 0.1.3
+{
+  "width": 72.0,
+  "height": 61.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 19.0,
+        "y": 61.0
+      },
+      "name": "_MAP",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 44.0
+      },
+      "name": "_CCEN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 60.0,
+        "y": 0.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 36.0,
+        "y": 0.0
+      },
+      "name": "D",
+      "logicWidth": 12
+    },
+    {
+      "location": {
+        "x": 72.0,
+        "y": 14.0
+      },
+      "name": "_FULL",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 72.0,
+        "y": 40.0
+      },
+      "name": "CI",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 6.0
+      },
+      "name": "_RLD",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 50.0
+      },
+      "name": "I",
+      "logicWidth": 4
+    },
+    {
+      "location": {
+        "x": 38.0,
+        "y": 61.0
+      },
+      "name": "Y",
+      "logicWidth": 12
+    },
+    {
+      "location": {
+        "x": 13.0,
+        "y": 61.0
+      },
+      "name": "_PL",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 25.0,
+        "y": 61.0
+      },
+      "name": "_VECT",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 38.0
+      },
+      "name": "_CC",
+      "logicWidth": 1
+    }
+  ],
+  "submodel": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#1",
+        "pos": {
+          "x": 10.0,
+          "y": 210.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIram5_12",
+        "name": "GUIram5_12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 100.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+        "name": "GUINandGate#0",
+        "pos": {
+          "x": 40.0,
+          "y": 185.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIdff12",
+        "name": "GUIdff12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 160.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIinc12",
+        "name": "GUIinc12#0",
+        "pos": {
+          "x": 305.0,
+          "y": 190.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#3",
+        "pos": {
+          "x": 265.0,
+          "y": 150.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#1",
+        "pos": {
+          "x": 294.0,
+          "y": 104.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#0",
+        "pos": {
+          "x": 324.0,
+          "y": 149.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#3",
+        "pos": {
+          "x": 179.0,
+          "y": 89.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#2",
+        "pos": {
+          "x": 189.0,
+          "y": 274.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#5",
+        "pos": {
+          "x": 4.0,
+          "y": 219.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#4",
+        "pos": {
+          "x": 179.0,
+          "y": 14.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#7",
+        "pos": {
+          "x": 299.0,
+          "y": 44.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#6",
+        "pos": {
+          "x": 299.0,
+          "y": 79.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#9",
+        "pos": {
+          "x": 299.0,
+          "y": 114.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.wires.WireCrossPoint",
+        "name": "WireCrossPoint#8",
+        "pos": {
+          "x": 299.0,
+          "y": 169.0
+        },
+        "params": 1
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUIsel4_12",
+        "name": "GUIsel4_12#0",
+        "pos": {
+          "x": 150.0,
+          "y": 175.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.GUInor12",
+        "name": "GUInor12#0",
+        "pos": {
+          "x": 190.0,
+          "y": 80.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#0",
+        "pos": {
+          "x": 160.0,
+          "y": 95.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910InstrPLA",
+        "name": "GUIAm2910InstrPLA#0",
+        "pos": {
+          "x": 80.0,
+          "y": 155.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910SP",
+        "name": "GUIAm2910SP#0",
+        "pos": {
+          "x": 305.0,
+          "y": 55.0
+        }
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#1",
+        "pos": {
+          "x": 260.0,
+          "y": 115.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay",
+        "name": "GUIBitDisplay#2",
+        "pos": {
+          "x": 345.0,
+          "y": 180.0
+        },
+        "params": 12
+      },
+      {
+        "id": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910RegCntr",
+        "name": "GUIAm2910RegCntr#0",
+        "pos": {
+          "x": 160.0,
+          "y": 25.0
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "name": "unnamedWire#36",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIdff12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#35",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "name": "unnamedWire#38",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#6",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#37",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#39",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "CI"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "CI"
+        },
+        "name": "unnamedWire#41",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "C"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#7",
+          "pinName": ""
+        },
+        "name": "unnamedWire#40",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_MAP"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_MAP"
+        },
+        "name": "unnamedWire#43",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_PL"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_PL"
+        },
+        "name": "unnamedWire#42",
+        "path": [
+          {
+            "x": 85.0,
+            "y": 290.0
+          },
+          {
+            "x": 65.0,
+            "y": 290.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "I"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "I"
+        },
+        "name": "unnamedWire#45",
+        "path": [
+          {
+            "x": 70.0,
+            "y": 250.0
+          },
+          {
+            "x": 70.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "_VECT"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_VECT"
+        },
+        "name": "unnamedWire#44",
+        "path": [
+          {
+            "x": 105.0,
+            "y": 290.0
+          },
+          {
+            "x": 125.0,
+            "y": 290.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#47",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#46",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#49",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIBitDisplay#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#48",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "name": "unnamedWire#9",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "B"
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#8",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "A"
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#7",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#6",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YR"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SB"
+        },
+        "name": "unnamedWire#1",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIram5_12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#50",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YD"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SA"
+        },
+        "name": "unnamedWire#0",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#9",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#8",
+          "pinName": ""
+        },
+        "name": "unnamedWire#51",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIdff12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "name": "unnamedWire#5",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUInor12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "R\u003d0"
+        },
+        "name": "unnamedWire#10",
+        "path": [
+          {
+            "x": 230.0,
+            "y": 90.0
+          },
+          {
+            "x": 230.0,
+            "y": 120.0
+          },
+          {
+            "x": 95.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIinc12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIdff12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#4",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YmuPC"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SD"
+        },
+        "name": "unnamedWire#3",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "RDEC"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "DEC"
+        },
+        "name": "unnamedWire#12",
+        "path": [
+          {
+            "x": 120.0,
+            "y": 170.0
+          },
+          {
+            "x": 120.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "YF"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "SC"
+        },
+        "name": "unnamedWire#2",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "RWE"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "WE"
+        },
+        "name": "unnamedWire#11",
+        "path": [
+          {
+            "x": 115.0,
+            "y": 160.0
+          },
+          {
+            "x": 115.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "STKI1"
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "STKI1"
+        },
+        "name": "unnamedWire#14",
+        "path": [
+          {
+            "x": 290.0,
+            "y": 230.0
+          },
+          {
+            "x": 290.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "STKI0"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#13",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 220.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "name": "unnamedWire#16",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#1",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "STKI0"
+        },
+        "name": "unnamedWire#15",
+        "path": [
+          {
+            "x": 295.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIinc12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#18",
+        "path": [
+          {
+            "x": 325.0,
+            "y": 275.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "name": "unnamedWire#17",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUIram5_12#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "C"
+        },
+        "name": "unnamedWire#19",
+        "path": [
+          {
+            "x": 200.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#21",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#0",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#20",
+        "path": [
+          {
+            "x": 220.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "D"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "name": "unnamedWire#23",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#3",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUInor12#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#22",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIsel4_12#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#25",
+        "path": [
+          {
+            "x": 145.0,
+            "y": 15.0
+          },
+          {
+            "x": 145.0,
+            "y": 150.0
+          },
+          {
+            "x": 160.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#4",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "D"
+        },
+        "name": "unnamedWire#24",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#2",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "Y"
+        },
+        "name": "unnamedWire#27",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_RLD"
+        },
+        "pin2": {
+          "compName": "GUIAm2910RegCntr#0",
+          "pinName": "_RLD"
+        },
+        "name": "unnamedWire#26",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CC"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#29",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#0",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUIAm2910InstrPLA#0",
+          "pinName": "PASS"
+        },
+        "name": "unnamedWire#28",
+        "path": [
+          {
+            "x": 65.0,
+            "y": 195.0
+          },
+          {
+            "x": 65.0,
+            "y": 160.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "_submodelinterface",
+          "pinName": "_CCEN"
+        },
+        "pin2": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "name": "unnamedWire#30",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#32",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "WireCrossPoint#5",
+          "pinName": ""
+        },
+        "pin2": {
+          "compName": "GUINandGate#1",
+          "pinName": "A"
+        },
+        "name": "unnamedWire#31",
+        "path": [
+          {
+            "x": 5.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compName": "GUIAm2910SP#0",
+          "pinName": "_FULL"
+        },
+        "pin2": {
+          "compName": "_submodelinterface",
+          "pinName": "_FULL"
+        },
+        "name": "unnamedWire#34",
+        "path": []
+      },
+      {
+        "pin1": {
+          "compName": "GUINandGate#1",
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compName": "GUINandGate#0",
+          "pinName": "B"
+        },
+        "name": "unnamedWire#33",
+        "path": [
+          {
+            "x": 35.0,
+            "y": 220.0
+          },
+          {
+            "x": 35.0,
+            "y": 200.0
+          }
+        ]
+      }
+    ]
+  },
+  "symbolRendererSnippetID": "class:net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer",
+  "symbolRendererParams": {
+    "centerText": "Am2910",
+    "centerTextHeight": 5.0,
+    "horizontalComponentCenter": 17.5,
+    "pinLabelHeight": 3.5,
+    "pinLabelMargin": 0.5
+  },
+  "outlineRendererSnippetID": "class:net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer",
+  "highLevelStateHandlerSnippetID": "class:net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler",
+  "highLevelStateHandlerParams": {
+    "subcomponentHighLevelStates": {},
+    "atomicHighLevelStates": {}
+  }
+}
\ No newline at end of file
index 51e74dd..9cdbabb 100644 (file)
@@ -106,8 +106,8 @@ public abstract class SubmodelComponent extends GUIComponent
                this.submodelInterface = new SubmodelInterface(submodelModifiable, SUBMODEL_INTERFACE_NAME);
 
                this.submodelScale = 1;
-               this.maxVisibleRegionFillRatioForAlpha0 = 0.4;
-               this.minVisibleRegionFillRatioForAlpha1 = 0.8;
+               this.maxVisibleRegionFillRatioForAlpha0 = 0.8;
+               this.minVisibleRegionFillRatioForAlpha1 = 0.9;
                this.renderer = new LogicUIRenderer(submodelModifiable);
 
                submodelModifiable.setRedrawHandler(model.getRedrawHandler());
index 17dc22f..6e722a0 100644 (file)
@@ -95,7 +95,7 @@ public class ViewLogicModelAdapter
                                        if (externalWireCandidate != null)
                                                if (externalWire == null)
                                                        externalWire = externalWireCandidate;
-                                               else if (externalWire.length == externalWireCandidate.length)
+                                               else if (externalWire.width == externalWireCandidate.width)
                                                        Wire.fuse(externalWire, externalWireCandidate);
                                                else
                                                        throw new IllegalArgumentException(
index 14bb97b..e510661 100644 (file)
@@ -7,8 +7,12 @@ mograsim version: 0.1.3
   "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
   "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
   "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
+  "GUIAm2904": "file:components/am2904/GUIAm2904.json",
+  "GUIAm2904MSR": "file:components/am2904/GUIAm2904MSR.json",
+  "GUIAm2904muSR": "file:components/am2904/GUIAm2904muSR.json",
   "GUIAm2904RegCTInstrDecode": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904RegCTInstrDecode",
   "GUIAm2904ShiftInstrDecode": "class:net.mograsim.logic.model.am2900.components.am2904.GUIAm2904ShiftInstrDecode",
+  "GUIAm2904TestLogic": "file:components/am2904/GUIAm2904TestLogic.json",
   "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
   "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
   "GUIAm2910InstrPLA": "class:net.mograsim.logic.model.am2900.components.am2910.GUIAm2910InstrPLA",
@@ -35,6 +39,9 @@ mograsim version: 0.1.3
   "GUIinc12": "class:net.mograsim.logic.model.am2900.components.GUIinc12",
   "GUImux1": "file:components/GUImux1.json",
   "GUImux1_4": "file:components/GUImux1_4.json",
+  "GUImux2": "file:components/GUImux2.json",
+  "GUImux2_4": "file:components/GUImux2_4.json",
+  "GUImux3": "file:components/GUImux3.json",
   "GUInand3": "file:components/GUInand3.json",
   "GUInor12": "class:net.mograsim.logic.model.am2900.components.GUInor12",
   "GUInot4": "file:components/GUInot4.json",
@@ -43,6 +50,7 @@ mograsim version: 0.1.3
   "GUIram2": "file:components/GUIram2.json",
   "GUIram4": "file:components/GUIram4.json",
   "GUIram5_12": "class:net.mograsim.logic.model.am2900.components.GUIram5_12",
+  "GUIsel1": "file:components/GUIsel1.json",
   "GUIsel2_4": "file:components/GUIsel2_4.json",
   "GUIsel3_4": "file:components/GUIsel3_4.json",
   "GUIsel4_12": "class:net.mograsim.logic.model.am2900.components.GUImux4_12",
index 0e2328a..f26c872 100644 (file)
@@ -15,8 +15,8 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh
 {
        private SubmodelComponent component;
        private final List<String> vectorPartTargets;
-       private final List<Integer> vectorPartLengthes;
-       private int length;
+       private final List<Integer> vectorPartWidths;
+       private int width;
 
        public BitVectorSplittingAtomicHighLevelStateHandler(HighLevelStateHandlerContext context)
        {
@@ -28,38 +28,38 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh
        {
                this.component = context.component;
                this.vectorPartTargets = new ArrayList<>();
-               this.vectorPartLengthes = new ArrayList<>();
+               this.vectorPartWidths = new ArrayList<>();
                if (params != null)
-                       setVectorParts(params.vectorPartTargets, params.vectorPartLengthes);
+                       setVectorParts(params.vectorPartTargets, params.vectorPartWidths);
        }
 
-       public void set(List<String> targets, List<Integer> lengthes)
+       public void set(List<String> targets, List<Integer> widths)
        {
-               setVectorParts(targets, lengthes);
+               setVectorParts(targets, widths);
        }
 
-       public void addVectorPart(String target, int length)
+       public void addVectorPart(String target, int width)
        {
                vectorPartTargets.add(target);
-               vectorPartLengthes.add(length);
-               this.length += length;
+               vectorPartWidths.add(width);
+               this.width += width;
        }
 
        public void clearVectorParts()
        {
                vectorPartTargets.clear();
-               vectorPartLengthes.clear();
-               length = 0;
+               vectorPartWidths.clear();
+               width = 0;
        }
 
-       private void setVectorParts(List<String> targets, List<Integer> lengthes)
+       private void setVectorParts(List<String> targets, List<Integer> widths)
        {
                clearVectorParts();
-               if (targets.size() != lengthes.size())
-                       throw new IllegalArgumentException("Targets list and lenghtes list have different sizes");
+               if (targets.size() != widths.size())
+                       throw new IllegalArgumentException("Targets list and widths list have different sizes");
                vectorPartTargets.addAll(targets);
-               vectorPartLengthes.addAll(lengthes);
-               length += lengthes.stream().mapToInt(Integer::intValue).sum();
+               vectorPartWidths.addAll(widths);
+               width += widths.stream().mapToInt(Integer::intValue).sum();
        }
 
        @Override
@@ -74,9 +74,9 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh
                                vectorPart = BitVector.of((Bit) subStateUncasted);
                        else
                                vectorPart = (BitVector) subStateUncasted;
-                       if (vectorPart.length() != vectorPartLengthes.get(partIndex))
+                       if (vectorPart.width() != vectorPartWidths.get(partIndex))
                                throw new IllegalArgumentException(
-                                               "Incorrect vector part length: " + vectorPart.length() + "; expected " + vectorPartLengthes.get(partIndex));
+                                               "Incorrect vector part width: " + vectorPart.width() + "; expected " + vectorPartWidths.get(partIndex));
                        result = vectorPart.concat(result);
                }
                return result;
@@ -86,14 +86,14 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh
        public void setHighLevelState(Object newState)
        {
                BitVector newStateCasted = (BitVector) newState;
-               if (newStateCasted.length() != length)
-                       throw new IllegalArgumentException("Incorrect vector length: " + newStateCasted.length() + "; expected " + length);
+               if (newStateCasted.width() != width)
+                       throw new IllegalArgumentException("Incorrect vector width: " + newStateCasted.width() + "; expected " + width);
                for (int partIndex = vectorPartTargets.size() - 1, bitIndex = 0; partIndex >= 0; partIndex--)
                {
-                       int vectorPartLength = vectorPartLengthes.get(partIndex);
-                       BitVector vectorPart = newStateCasted.subVector(bitIndex, bitIndex + vectorPartLength);
+                       int vectorPartWidth = vectorPartWidths.get(partIndex);
+                       BitVector vectorPart = newStateCasted.subVector(bitIndex, bitIndex + vectorPartWidth);
                        component.setHighLevelState(vectorPartTargets.get(partIndex), vectorPart);
-                       bitIndex += vectorPartLength;
+                       bitIndex += vectorPartWidth;
                }
        }
 
@@ -102,14 +102,14 @@ public class BitVectorSplittingAtomicHighLevelStateHandler implements AtomicHigh
        {
                BitVectorSplittingAtomicHighLevelStateHandlerParams params = new BitVectorSplittingAtomicHighLevelStateHandlerParams();
                params.vectorPartTargets = new ArrayList<>(vectorPartTargets);
-               params.vectorPartLengthes = new ArrayList<>(vectorPartLengthes);
+               params.vectorPartWidths = new ArrayList<>(vectorPartWidths);
                return params;
        }
 
        public static class BitVectorSplittingAtomicHighLevelStateHandlerParams
        {
                public List<String> vectorPartTargets;
-               public List<Integer> vectorPartLengthes;
+               public List<Integer> vectorPartWidths;
        }
 
        static
index a14c49a..9f7856f 100644 (file)
@@ -10,6 +10,7 @@ mograsim version: 0.1.3
     "pinNames": "net.mograsim.logic.model.snippets.symbolrenderers.PinNamesSymbolRenderer"
   },
   "standardHighLevelStateHandlerSuppliers": {
+    "default": "net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler",
     "standard": "net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandler"
   }
 }
\ No newline at end of file
index 7a1a6eb..a15d9d5 100644 (file)
@@ -90,7 +90,7 @@ public class AsmFloatOperand implements AsmOperand
                int bitLength = raw.bitLength() - (bi.signum() - 1) / 2;
                if (bitLength > size)
                        throw new AsmNumberFormatException("Error parsing %s: bit count %d exceeds size %d", bi, bitLength, size);
-               BitVectorMutator bvm = BitVectorMutator.ofLength(size);
+               BitVectorMutator bvm = BitVectorMutator.ofWidth(size);
                for (int i = 0; i < size; i++)
                        bvm.setLSBit(i, Bit.of(raw.testBit(i)));
                return bvm.toBitVector();
index d3ac80f..70f5a43 100644 (file)
@@ -55,7 +55,7 @@ public class AsmIntegerOperand implements AsmOperand
                int bitLength = bi.bitLength() - (bi.signum() - 1) / 2;
                if (bitLength > size)
                        throw new AsmNumberFormatException("Error parsing %s: bit count %d exceeds size %d", bi, bitLength, size);
-               BitVectorMutator bvm = BitVectorMutator.ofLength(size);
+               BitVectorMutator bvm = BitVectorMutator.ofWidth(size);
                for (int i = 0; i < size; i++)
                        bvm.setLSBit(i, Bit.of(bi.testBit(i)));
                return bvm.toBitVector();
index ee40201..2e209f1 100644 (file)
@@ -112,9 +112,9 @@ public class WordAddressableMemory implements MainMemory
 
                public void setCell(int index, BitVector bits)
                {
-                       if (bits.length() != cellWidth)
+                       if (bits.width() != cellWidth)
                                throw new IllegalArgumentException(String.format(
-                                               "BitVector to be saved in memory cell has unexpected length. Expected: %d Actual: %d", cellWidth, bits.length()));
+                                               "BitVector to be saved in memory cell has unexpected width. Expected: %d Actual: %d", cellWidth, bits.width()));
                        memory[index] = bits;
                }
 
index e781d3d..4cec2b1 100644 (file)
@@ -5,13 +5,12 @@ import java.util.List;
 import net.mograsim.logic.core.components.BasicComponent;
 import net.mograsim.logic.core.timeline.Timeline;
 import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
 import net.mograsim.machine.MainMemoryDefinition;
 
 /**
- * A memory component that only allows access to words of a specific length
+ * A memory component that only allows access to words of a specific width
  */
 public class WordAddressableMemoryComponent extends BasicComponent
 {
@@ -31,12 +30,12 @@ public class WordAddressableMemoryComponent extends BasicComponent
                        ReadEnd rWBit, ReadEnd address)
        {
                super(timeline, processTime);
-               if(data.length() != definition.getCellWidth())
-                       throw new IllegalArgumentException(String.format("Bit width of data wire does not match main memory definition. Expected: %d Actual: %d", definition.getCellWidth(), data.length()));
-               if(rWBit.length() != 1)
-                       throw new IllegalArgumentException(String.format("Bit width of read/write mode select wire is unexpected. Expected: 1 Actual: %d", rWBit.length()));
-               if(address.length() != definition.getMemoryAddressBits())
-                       throw new IllegalArgumentException(String.format("Bit width of address wire does not match main memory definition. Expected: %d Actual: %d", definition.getMemoryAddressBits(), address.length()));
+               if(data.width() != definition.getCellWidth())
+                       throw new IllegalArgumentException(String.format("Bit width of data wire does not match main memory definition. Expected: %d Actual: %d", definition.getCellWidth(), data.width()));
+               if(rWBit.width() != 1)
+                       throw new IllegalArgumentException(String.format("Bit width of read/write mode select wire is unexpected. Expected: 1 Actual: %d", rWBit.width()));
+               if(address.width() != definition.getMemoryAddressBits())
+                       throw new IllegalArgumentException(String.format("Bit width of address wire does not match main memory definition. Expected: %d Actual: %d", definition.getMemoryAddressBits(), address.width()));
                this.data = data;
                this.rWBit = rWBit;
                this.address = address;
@@ -53,7 +52,7 @@ public class WordAddressableMemoryComponent extends BasicComponent
                if (!address.hasNumericValue())
                {
                        if (read.equals(rWBit.getValue()))
-                               data.feedSignals(BitVector.of(Bit.U, data.length()));
+                               data.feedSignals(Bit.U.toVector(data.width()));
                        else
                                data.clearSignals();
                        return;